Le diagnostic eprouve le micro au debit reel de l'application
16000 etait code en dur dans trois endroits de diagnostic.py alors que CONFIG["sample_rate"] existe. La valeur coincide aujourd'hui, donc rien ne cassait — mais si ce reglage changeait, le diagnostic aurait teste le micro et la synthese a un debit different de celui du pipeline reel, et aurait cesse SILENCIEUSEMENT d'etre representatif. Un diagnostic qui ne mesure pas ce qu'on croit est pire qu'aucun diagnostic. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
205424f68a
commit
3e269dfb5e
@ -91,13 +91,19 @@ def epreuve_moteur(detecter_moteur=None, resoudre_modele=None, creer_transcripte
|
||||
|
||||
# --- épreuve 3 : micro -------------------------------------------------------
|
||||
|
||||
def epreuve_micro(ouvrir_flux=None, sample_rate=16000, duree_s=1.0, dormir=None):
|
||||
def epreuve_micro(ouvrir_flux=None, sample_rate=None, duree_s=1.0, dormir=None):
|
||||
"""Ouvre VRAIMENT le micro pendant `duree_s` et compte les blocs reçus.
|
||||
|
||||
`ouvrir_flux` suit le même contrat que `Recorder._ouvrir_flux` dans
|
||||
`capture.py` : injectable, pour que les tests ne touchent à aucun
|
||||
périphérique réel.
|
||||
|
||||
Le débit vient de CONFIG et n'est pas codé en dur : le diagnostic doit
|
||||
éprouver le micro AU DÉBIT QUE L'APPLICATION UTILISE VRAIMENT, sinon il
|
||||
cesserait silencieusement d'être représentatif si ce réglage changeait.
|
||||
"""
|
||||
from core import CONFIG
|
||||
sample_rate = sample_rate or CONFIG["sample_rate"]
|
||||
dormir = dormir or time.sleep
|
||||
if ouvrir_flux is None:
|
||||
try:
|
||||
@ -133,7 +139,7 @@ def epreuve_micro(ouvrir_flux=None, sample_rate=16000, duree_s=1.0, dormir=None)
|
||||
# --- épreuve 4 : transcription -----------------------------------------------
|
||||
|
||||
def _generer_echantillon_parole(texte="Bonjour, ceci est un test de dictée Zonza.",
|
||||
sample_rate=16000):
|
||||
sample_rate=None):
|
||||
"""Synthétise un court échantillon de parole via la commande `say` de macOS.
|
||||
|
||||
LÈVE si `say` est absent, échoue, ou si le WAV produit est illisible —
|
||||
@ -141,6 +147,8 @@ def _generer_echantillon_parole(texte="Bonjour, ceci est un test de dictée Zonz
|
||||
d'inventer un résultat. Sur une machine sans `say` (Windows, Linux),
|
||||
c'est TOUJOURS ce chemin qui est emprunté.
|
||||
"""
|
||||
from core import CONFIG
|
||||
sample_rate = sample_rate or CONFIG["sample_rate"]
|
||||
if shutil.which("say") is None:
|
||||
raise RuntimeError("commande `say` absente (probablement pas macOS)")
|
||||
chemin = tempfile.NamedTemporaryFile(suffix=".wav", delete=False).name
|
||||
@ -168,7 +176,8 @@ def epreuve_transcription(transcripteur, generer_parole=None, horloge=None):
|
||||
audio = generer_parole()
|
||||
source = "parole synthétisée"
|
||||
except Exception as e:
|
||||
audio = np.zeros(16000, dtype="float32")
|
||||
from core import CONFIG
|
||||
audio = np.zeros(CONFIG["sample_rate"], dtype="float32") # une seconde
|
||||
source = f"silence (synthèse vocale indisponible : {e})"
|
||||
debut = horloge()
|
||||
try:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user