mirror of
https://github.com/R0m1k3/LiveFlow.git
synced 2026-10-15 19:29:40 +02:00
Fiabilité : la diarisation ne peut plus bloquer ni casser la transcription
- Timeout de 5 s sur l'identification du locuteur (asyncio.wait_for) : si le modèle ECAPA tarde ou se bloque sur CPU, on ignore le locuteur mais le texte est transcrit et affiché quand même - AGC du segmenteur protégé : une trame problématique renvoie l'audio brut au lieu d'interrompre le découpage Testé : texte transcrit malgré un diariseur qui se bloque indéfiniment. https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
This commit is contained in:
2 files changed
+19
-11
No files matched your search
+13
-8
@@ -48,14 +48,19 @@ class _AutoGain:
|
||||
self.gain = 1.0
|
||||
|
||||
def process(self, frame: bytes) -> bytes:
|
||||
peak = audioop.max(frame, 2)
|
||||
if peak >= AGC_NOISE_FLOOR:
|
||||
desired = min(AGC_MAX_GAIN, AGC_TARGET_PEAK / peak)
|
||||
rate = AGC_ATTACK if desired > self.gain else AGC_RELEASE
|
||||
self.gain += (desired - self.gain) * rate
|
||||
self.gain = max(1.0, min(AGC_MAX_GAIN, self.gain))
|
||||
if self.gain > 1.01:
|
||||
return audioop.mul(frame, 2, self.gain)
|
||||
# Toute erreur ici ne doit JAMAIS interrompre le découpage : on
|
||||
# renvoie la trame d'origine en cas de souci.
|
||||
try:
|
||||
peak = audioop.max(frame, 2)
|
||||
if peak >= AGC_NOISE_FLOOR:
|
||||
desired = min(AGC_MAX_GAIN, AGC_TARGET_PEAK / peak)
|
||||
rate = AGC_ATTACK if desired > self.gain else AGC_RELEASE
|
||||
self.gain += (desired - self.gain) * rate
|
||||
self.gain = max(1.0, min(AGC_MAX_GAIN, self.gain))
|
||||
if self.gain > 1.01:
|
||||
return audioop.mul(frame, 2, self.gain) # audioop sature, ne déborde pas
|
||||
except Exception:
|
||||
return frame
|
||||
return frame
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user