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()
# 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