Le controleur passe par les contrats, la duplication disparait
This commit is contained in:
+13
-12
@@ -11,15 +11,15 @@ contexte de l'app). La transcription, elle, part sur un thread de fond.
|
||||
import threading
|
||||
|
||||
from audio_level import compute_rms, shape_level
|
||||
from capture import Recorder, inject_text
|
||||
from core import entree_audio_muette, is_long_enough
|
||||
from engine import Recorder, Transcriber, inject_text, play_sound
|
||||
|
||||
|
||||
class ZonzaController:
|
||||
"""Machine à états pilotée par toggle(). on_state : callback(str) pour l'UI (menu)."""
|
||||
|
||||
def __init__(self, config, pulse_window, on_state=None, run_on_main=None,
|
||||
lancer_tache=None):
|
||||
def __init__(self, config, pulse_window, transcripteur, systeme, on_state=None,
|
||||
run_on_main=None, lancer_tache=None):
|
||||
self.config = config
|
||||
self.pulse = pulse_window
|
||||
self.on_state = on_state or (lambda s: None)
|
||||
@@ -34,7 +34,8 @@ class ZonzaController:
|
||||
lambda fn: threading.Thread(target=fn, daemon=True).start()
|
||||
)
|
||||
self.recorder = Recorder(config["sample_rate"], on_block=self._on_audio_block)
|
||||
self.transcriber = Transcriber(config["model"], config["language"])
|
||||
self.transcriber = transcripteur
|
||||
self.systeme = systeme
|
||||
self.recording = False
|
||||
self._lock = threading.Lock()
|
||||
self._smoothed_level = 0.0
|
||||
@@ -68,7 +69,7 @@ class ZonzaController:
|
||||
self.recording = True
|
||||
self.pulse.show()
|
||||
self.pulse.set_status("Je vous écoute…")
|
||||
play_sound("start")
|
||||
self.systeme.jouer_son("start")
|
||||
self.on_state("recording")
|
||||
self._arm_safety_timer()
|
||||
self._armer_veille_silence()
|
||||
@@ -88,7 +89,7 @@ class ZonzaController:
|
||||
if not entree_audio_muette(self._blocs_recus, self.recording):
|
||||
return
|
||||
print("[micro] aucun son reçu — le micro est probablement pris par une autre application")
|
||||
play_sound("error")
|
||||
self.systeme.jouer_son("error")
|
||||
self.run_on_main(lambda: self.pulse.set_status("Aucun son — micro pris ailleurs ?"))
|
||||
|
||||
def _ouvrir_flux(self):
|
||||
@@ -97,7 +98,7 @@ class ZonzaController:
|
||||
self.recorder.start()
|
||||
except Exception as e:
|
||||
print(f"[erreur] démarrage enregistrement : {e}")
|
||||
play_sound("error")
|
||||
self.systeme.jouer_son("error")
|
||||
self.recording = False
|
||||
self._cancel_safety_timer()
|
||||
self.run_on_main(self.pulse.hide)
|
||||
@@ -143,22 +144,22 @@ class ZonzaController:
|
||||
principal (2026-08-21)."""
|
||||
try:
|
||||
audio = self.recorder.stop()
|
||||
play_sound("done")
|
||||
self.systeme.jouer_son("done")
|
||||
if not is_long_enough(len(audio), self.config["sample_rate"],
|
||||
self.config["min_duration_s"]):
|
||||
return
|
||||
text = self.transcriber.transcribe(audio)
|
||||
text = self.transcriber.transcrire(audio)
|
||||
if not text:
|
||||
return
|
||||
print(f"[texte] {text}")
|
||||
try:
|
||||
inject_text(text)
|
||||
inject_text(text, self.systeme)
|
||||
except Exception as e:
|
||||
print(f"[erreur] collage échoué ({e}) — texte dans le presse-papier, fais Cmd+V")
|
||||
play_sound("error")
|
||||
self.systeme.jouer_son("error")
|
||||
except Exception as e:
|
||||
print(f"[erreur] arrêt ou transcription : {e}")
|
||||
play_sound("error")
|
||||
self.systeme.jouer_son("error")
|
||||
finally:
|
||||
self.run_on_main(self.pulse.hide)
|
||||
self.on_state("idle")
|
||||
|
||||
Reference in New Issue
Block a user