sst wait for filling buffer

This commit is contained in:
duffyduck 2025-12-29 02:30:19 +01:00
parent de0108d57c
commit 9bd70b82ea
1 changed files with 25 additions and 17 deletions

View File

@ -148,9 +148,8 @@ class ClaudesEyesAudioBridge:
self._mute_lock = threading.Lock() self._mute_lock = threading.Lock()
# Silence-Timeout: Wie lange Stille bevor Aufnahme als fertig gilt # Silence-Timeout: Wie lange Stille bevor Aufnahme als fertig gilt
# 2 Sekunden ist ein guter Kompromiss zwischen natürlichen Pausen # 3 Sekunden erlaubt natürliche Denkpausen beim Sprechen
# und schneller Reaktion. Bei 5s dauert es zu lange. self._silence_timeout = 3.0 # Sekunden
self._silence_timeout = 2.0 # Sekunden
def _load_config(self, config_path: str) -> dict: def _load_config(self, config_path: str) -> dict:
"""Lädt die Konfiguration""" """Lädt die Konfiguration"""
@ -690,33 +689,42 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!"""
break break
# ════════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════════
# STEFAN-ZEIT: Nach Claudes Antwort 5 Sekunden warten ob Stefan # STEFAN-ZEIT: Nach Claudes Antwort warten ob Stefan was sagen will.
# was sagen will. Wenn Stefan spricht, senden wir seine Nachricht # Wenn Stefan spricht, warten wir AKTIV auf den Buffer.
# SOFORT (ohne auf TICK zu warten) - das IST sein "TICK"!
# ════════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════════
logger.debug("Warte 5s ob Stefan antworten will...") logger.debug("Warte auf Stefan...")
stefan_wait_start = time.time() 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 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 # Wenn Stefan anfängt zu sprechen, warte bis er fertig ist
if self._recording.is_set(): if self._recording.is_set():
logger.debug("Stefan spricht, warte auf Stille...") logger.debug("Stefan spricht, warte auf Stille...")
while self.running and self._recording.is_set(): while self.running and self._recording.is_set():
time.sleep(0.5) time.sleep(0.3)
logger.debug("Stefan fertig mit Sprechen") logger.debug("Stefan fertig mit Sprechen")
stefan_has_spoken = True stefan_has_spoken = True
# WICHTIG: Zusätzliche Wartezeit für STT-Verarbeitung! # AKTIV auf Buffer warten statt feste Zeiten!
# Google Speech Recognition braucht Zeit um den letzten # Warte bis Text im Buffer ankommt (max 30s Sicherheits-Timeout)
# Text-Block zu verarbeiten und in den Buffer zu schreiben. buffer_wait_start = time.time()
stt_processing_wait = 2.0 # Sekunden für API-Verarbeitung buffer_timeout = 30.0 # Sicherheits-Timeout
logger.debug(f"Warte {stt_processing_wait}s für STT-Verarbeitung...") logger.debug("Warte aktiv auf Stefan-Buffer...")
time.sleep(stt_processing_wait)
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") logger.debug("STT-Verarbeitung abgeschlossen")
break break
time.sleep(0.5) time.sleep(0.3)
if not self.running: if not self.running:
break break