From 23b7209f6a2baffb1ddbc93c2c8f1caa4099b55f Mon Sep 17 00:00:00 2001 From: duffyduck Date: Mon, 29 Dec 2025 02:43:15 +0100 Subject: [PATCH] sst buffer read all 3 seconds to hold tick loop --- python_bridge/chat_audio_bridge.py | 48 +++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/python_bridge/chat_audio_bridge.py b/python_bridge/chat_audio_bridge.py index 502d9d8..6ff153b 100755 --- a/python_bridge/chat_audio_bridge.py +++ b/python_bridge/chat_audio_bridge.py @@ -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. - # Wenn Stefan spricht, warten wir AKTIV auf den Buffer. + # Sammle ALLE Eingaben bis Stefan wirklich fertig ist. # ════════════════════════════════════════════════════════════════ logger.debug("Warte auf Stefan...") stefan_wait_start = time.time() @@ -698,29 +698,49 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!""" stefan_has_spoken = False 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(): - logger.debug("Stefan spricht, warte auf Stille...") - while self.running and self._recording.is_set(): - time.sleep(0.3) - logger.debug("Stefan fertig mit Sprechen") + logger.debug("Stefan spricht, sammle alle Eingaben...") stefan_has_spoken = True - # AKTIV auf Buffer warten statt feste Zeiten! - # Warte bis Text im Buffer ankommt (max 30s Sicherheits-Timeout) + # Sammle alle Eingaben bis Stefan WIRKLICH fertig ist + # 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_timeout = 30.0 # Sicherheits-Timeout - logger.debug("Warte aktiv auf Stefan-Buffer...") + buffer_timeout = 10.0 # Sicherheits-Timeout + logger.debug("Warte auf Stefan-Buffer...") while self.running and (time.time() - buffer_wait_start) < buffer_timeout: with self._stefan_buffer_lock: if self._stefan_buffer: logger.debug(f"Stefan-Buffer gefüllt: {len(self._stefan_buffer)} Einträge") break - time.sleep(0.2) # Kurzes Polling - else: - # Timeout erreicht ohne Buffer - logger.warning("Stefan-Buffer Timeout - kein Text angekommen") + time.sleep(0.2) logger.debug("STT-Verarbeitung abgeschlossen") break