new main loop
This commit is contained in:
parent
a9fafdc6f8
commit
cb0bd4589c
|
|
@ -689,77 +689,76 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!"""
|
||||||
break
|
break
|
||||||
|
|
||||||
# ════════════════════════════════════════════════════════════════
|
# ════════════════════════════════════════════════════════════════
|
||||||
# STEFAN-ZEIT: Nach Claudes Antwort warten ob Stefan was sagen will.
|
# STEFAN-ZEIT: Einfache, robuste Schleife
|
||||||
# Sammle ALLE Eingaben bis Stefan wirklich fertig ist.
|
|
||||||
#
|
#
|
||||||
# WICHTIG: Wir prüfen BEIDES:
|
# Logik:
|
||||||
# 1. _recording Flag (gesetzt wenn STT Sprache erkennt)
|
# - Warte bis zu 5s auf Stefan (wenn er nicht spricht)
|
||||||
# 2. Ob gerade kein Mute aktiv ist (damit wir überhaupt hören können)
|
# - SOBALD er spricht: warte bis er FERTIG ist (Recording=False)
|
||||||
|
# - Nach Recording-Ende: warte 3s ob er weiter spricht
|
||||||
|
# - Wenn 3s Stille: Buffer holen und weiter
|
||||||
#
|
#
|
||||||
# Die Schleife läuft solange bis ENTWEDER:
|
# Eine einzige while-Schleife mit klaren Zuständen!
|
||||||
# - Stefan fertig gesprochen hat (Buffer gefüllt, kein Recording mehr)
|
|
||||||
# - ODER der Timeout abläuft UND kein Recording aktiv ist
|
|
||||||
# ════════════════════════════════════════════════════════════════
|
# ════════════════════════════════════════════════════════════════
|
||||||
logger.debug("Warte auf Stefan...")
|
logger.debug("Stefan-Zeit startet...")
|
||||||
stefan_wait_start = time.time()
|
|
||||||
stefan_initial_timeout = 5.0 # Sekunden um mit Sprechen zu beginnen
|
stefan_timeout = 5.0 # Max warten wenn Stefan NICHT spricht
|
||||||
stefan_has_spoken = False
|
nachdenk_pause = 3.0 # Warten nach Recording ob er weiter spricht
|
||||||
|
stefan_start = time.time()
|
||||||
|
last_recording_end = 0 # Wann endete das letzte Recording?
|
||||||
|
stefan_hat_gesprochen = False
|
||||||
|
|
||||||
while self.running:
|
while self.running:
|
||||||
# Timeout nur anwenden wenn Stefan NICHT gerade spricht
|
ist_recording = self._recording.is_set()
|
||||||
if not self._recording.is_set():
|
jetzt = time.time()
|
||||||
if (time.time() - stefan_wait_start) >= stefan_initial_timeout:
|
|
||||||
logger.debug("Stefan-Timeout, kein Recording aktiv")
|
# ─── FALL 1: Stefan spricht gerade ───
|
||||||
|
if ist_recording:
|
||||||
|
if not stefan_hat_gesprochen:
|
||||||
|
logger.debug("Stefan spricht!")
|
||||||
|
stefan_hat_gesprochen = True
|
||||||
|
last_recording_end = 0 # Reset! Er spricht (wieder)
|
||||||
|
time.sleep(0.05)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# ─── FALL 2: Stefan spricht NICHT ───
|
||||||
|
|
||||||
|
# Hat Stefan gerade aufgehört zu sprechen?
|
||||||
|
if stefan_hat_gesprochen and last_recording_end == 0:
|
||||||
|
last_recording_end = jetzt
|
||||||
|
logger.debug(f"Recording-Pause, warte {nachdenk_pause}s...")
|
||||||
|
|
||||||
|
# War Stefan am Sprechen? → Warte auf Nachdenk-Pause
|
||||||
|
if stefan_hat_gesprochen:
|
||||||
|
zeit_seit_ende = jetzt - last_recording_end
|
||||||
|
|
||||||
|
if zeit_seit_ende >= nachdenk_pause:
|
||||||
|
# 3s Stille nach dem Sprechen → Stefan ist fertig
|
||||||
|
logger.debug("Stefan ist fertig (3s Stille)")
|
||||||
break
|
break
|
||||||
|
|
||||||
# Wenn Stefan anfängt zu sprechen, sammle ALLES was er sagt
|
# Noch in der Nachdenk-Pause, weiter warten
|
||||||
if self._recording.is_set():
|
time.sleep(0.05)
|
||||||
if not stefan_has_spoken:
|
continue
|
||||||
logger.debug("Stefan spricht, sammle alle Eingaben...")
|
|
||||||
stefan_has_spoken = True
|
|
||||||
|
|
||||||
# Sammle alle Eingaben bis Stefan WIRKLICH fertig ist
|
# ─── FALL 3: Stefan hat noch GAR NICHT gesprochen ───
|
||||||
# Das heißt: Recording endet UND danach kommt 3s lang nichts mehr
|
zeit_gewartet = jetzt - stefan_start
|
||||||
while self.running:
|
|
||||||
# Warte bis aktuelles Recording endet
|
|
||||||
while self.running and self._recording.is_set():
|
|
||||||
time.sleep(0.1) # Schnellere Prüfung
|
|
||||||
|
|
||||||
# Recording ist beendet - aber spricht Stefan gleich weiter?
|
if zeit_gewartet >= stefan_timeout:
|
||||||
# Warte kurz und prüfe ob neues Recording startet
|
# 5s gewartet, Stefan schweigt → weiter mit TICK
|
||||||
nachdenk_pause = 3.0 # Sekunden warten ob Stefan weiter spricht
|
logger.debug("Stefan-Timeout (5s ohne Sprache)")
|
||||||
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.1) # Schnellere Prüfung
|
|
||||||
|
|
||||||
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 = 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.1) # Schnellere Prüfung
|
|
||||||
|
|
||||||
logger.debug("STT-Verarbeitung abgeschlossen")
|
|
||||||
break
|
break
|
||||||
time.sleep(0.1) # Schnellere Prüfung für bessere Reaktion
|
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
# Buffer holen (falls Stefan was gesagt hat)
|
||||||
|
if stefan_hat_gesprochen:
|
||||||
|
# Kurz warten bis STT den Buffer gefüllt hat
|
||||||
|
buffer_start = time.time()
|
||||||
|
while self.running and (time.time() - buffer_start) < 2.0:
|
||||||
|
with self._stefan_buffer_lock:
|
||||||
|
if self._stefan_buffer:
|
||||||
|
break
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
if not self.running:
|
if not self.running:
|
||||||
break
|
break
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue