sst buffer read all 3 seconds to hold tick loop

This commit is contained in:
duffyduck 2025-12-29 02:43:15 +01:00
parent 9bd70b82ea
commit 23b7209f6a
1 changed files with 34 additions and 14 deletions

View File

@ -690,7 +690,7 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!"""
# ════════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════════
# STEFAN-ZEIT: Nach Claudes Antwort warten ob Stefan was sagen will. # STEFAN-ZEIT: Nach Claudes Antwort warten ob Stefan was sagen will.
# Wenn Stefan spricht, warten wir AKTIV auf den Buffer. # Sammle ALLE Eingaben bis Stefan wirklich fertig ist.
# ════════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════════
logger.debug("Warte auf Stefan...") logger.debug("Warte auf Stefan...")
stefan_wait_start = time.time() stefan_wait_start = time.time()
@ -698,29 +698,49 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!"""
stefan_has_spoken = False stefan_has_spoken = False
while self.running and (time.time() - stefan_wait_start) < stefan_initial_timeout: while self.running and (time.time() - stefan_wait_start) < stefan_initial_timeout:
# Wenn Stefan anfängt zu sprechen, warte bis er fertig ist # Wenn Stefan anfängt zu sprechen, sammle ALLES was er sagt
if self._recording.is_set(): if self._recording.is_set():
logger.debug("Stefan spricht, warte auf Stille...") logger.debug("Stefan spricht, sammle alle Eingaben...")
while self.running and self._recording.is_set():
time.sleep(0.3)
logger.debug("Stefan fertig mit Sprechen")
stefan_has_spoken = True stefan_has_spoken = True
# AKTIV auf Buffer warten statt feste Zeiten! # Sammle alle Eingaben bis Stefan WIRKLICH fertig ist
# Warte bis Text im Buffer ankommt (max 30s Sicherheits-Timeout) # Das heißt: Recording endet UND danach kommt 3s lang nichts mehr
while self.running:
# Warte bis aktuelles Recording endet
while self.running and self._recording.is_set():
time.sleep(0.3)
# Recording ist beendet - aber spricht Stefan gleich weiter?
# Warte kurz und prüfe ob neues Recording startet
nachdenk_pause = 3.0 # Sekunden warten ob Stefan weiter spricht
pause_start = time.time()
weiter_gesprochen = False
logger.debug(f"Recording-Pause, warte {nachdenk_pause}s ob Stefan weiter spricht...")
while self.running and (time.time() - pause_start) < nachdenk_pause:
if self._recording.is_set():
logger.debug("Stefan spricht weiter!")
weiter_gesprochen = True
break
time.sleep(0.2)
if not weiter_gesprochen:
# Stefan hat nicht weiter gesprochen - jetzt ist er fertig
logger.debug("Stefan ist fertig (keine weitere Eingabe)")
break
# Jetzt auf Buffer warten
buffer_wait_start = time.time() buffer_wait_start = time.time()
buffer_timeout = 30.0 # Sicherheits-Timeout buffer_timeout = 10.0 # Sicherheits-Timeout
logger.debug("Warte aktiv auf Stefan-Buffer...") logger.debug("Warte auf Stefan-Buffer...")
while self.running and (time.time() - buffer_wait_start) < buffer_timeout: while self.running and (time.time() - buffer_wait_start) < buffer_timeout:
with self._stefan_buffer_lock: with self._stefan_buffer_lock:
if self._stefan_buffer: if self._stefan_buffer:
logger.debug(f"Stefan-Buffer gefüllt: {len(self._stefan_buffer)} Einträge") logger.debug(f"Stefan-Buffer gefüllt: {len(self._stefan_buffer)} Einträge")
break break
time.sleep(0.2) # Kurzes Polling time.sleep(0.2)
else:
# Timeout erreicht ohne Buffer
logger.warning("Stefan-Buffer Timeout - kein Text angekommen")
logger.debug("STT-Verarbeitung abgeschlossen") logger.debug("STT-Verarbeitung abgeschlossen")
break break