From 9bd70b82ea0e1865a94ab1d43a87f9f85968412e Mon Sep 17 00:00:00 2001 From: duffyduck Date: Mon, 29 Dec 2025 02:30:19 +0100 Subject: [PATCH] sst wait for filling buffer --- python_bridge/chat_audio_bridge.py | 42 ++++++++++++++++++------------ 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/python_bridge/chat_audio_bridge.py b/python_bridge/chat_audio_bridge.py index 60e56f4..502d9d8 100755 --- a/python_bridge/chat_audio_bridge.py +++ b/python_bridge/chat_audio_bridge.py @@ -148,9 +148,8 @@ class ClaudesEyesAudioBridge: self._mute_lock = threading.Lock() # Silence-Timeout: Wie lange Stille bevor Aufnahme als fertig gilt - # 2 Sekunden ist ein guter Kompromiss zwischen natürlichen Pausen - # und schneller Reaktion. Bei 5s dauert es zu lange. - self._silence_timeout = 2.0 # Sekunden + # 3 Sekunden erlaubt natürliche Denkpausen beim Sprechen + self._silence_timeout = 3.0 # Sekunden def _load_config(self, config_path: str) -> dict: """Lädt die Konfiguration""" @@ -690,33 +689,42 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!""" break # ════════════════════════════════════════════════════════════════ - # STEFAN-ZEIT: Nach Claudes Antwort 5 Sekunden warten ob Stefan - # was sagen will. Wenn Stefan spricht, senden wir seine Nachricht - # SOFORT (ohne auf TICK zu warten) - das IST sein "TICK"! + # STEFAN-ZEIT: Nach Claudes Antwort warten ob Stefan was sagen will. + # Wenn Stefan spricht, warten wir AKTIV auf den Buffer. # ════════════════════════════════════════════════════════════════ - logger.debug("Warte 5s ob Stefan antworten will...") + logger.debug("Warte auf Stefan...") stefan_wait_start = time.time() - stefan_timeout = 5.0 # Sekunden warten auf Stefan + stefan_initial_timeout = 5.0 # Sekunden um mit Sprechen zu beginnen stefan_has_spoken = False - while self.running and (time.time() - stefan_wait_start) < stefan_timeout: + while self.running and (time.time() - stefan_wait_start) < stefan_initial_timeout: # Wenn Stefan anfängt zu sprechen, warte bis er fertig ist if self._recording.is_set(): logger.debug("Stefan spricht, warte auf Stille...") while self.running and self._recording.is_set(): - time.sleep(0.5) + time.sleep(0.3) logger.debug("Stefan fertig mit Sprechen") stefan_has_spoken = True - # WICHTIG: Zusätzliche Wartezeit für STT-Verarbeitung! - # Google Speech Recognition braucht Zeit um den letzten - # Text-Block zu verarbeiten und in den Buffer zu schreiben. - stt_processing_wait = 2.0 # Sekunden für API-Verarbeitung - logger.debug(f"Warte {stt_processing_wait}s für STT-Verarbeitung...") - time.sleep(stt_processing_wait) + # AKTIV auf Buffer warten statt feste Zeiten! + # Warte bis Text im Buffer ankommt (max 30s Sicherheits-Timeout) + buffer_wait_start = time.time() + buffer_timeout = 30.0 # Sicherheits-Timeout + logger.debug("Warte aktiv 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") + logger.debug("STT-Verarbeitung abgeschlossen") break - time.sleep(0.5) + time.sleep(0.3) if not self.running: break