fixes silence detected but never reported by silero

This commit is contained in:
Quentin Fuxa 2025-11-23 11:20:00 +01:00
parent 6206fff118
commit a175d1a327
8 changed files with 12 additions and 10 deletions

View file

@ -61,10 +61,10 @@ packages = [
"whisperlivekit.whisper.normalizers", "whisperlivekit.whisper.normalizers",
"whisperlivekit.web", "whisperlivekit.web",
"whisperlivekit.local_agreement", "whisperlivekit.local_agreement",
"whisperlivekit.vad_models" "whisperlivekit.silero_vad_models"
] ]
[tool.setuptools.package-data] [tool.setuptools.package-data]
whisperlivekit = ["web/*.html", "web/*.css", "web/*.js", "web/src/*.svg"] whisperlivekit = ["web/*.html", "web/*.css", "web/*.js", "web/src/*.svg"]
"whisperlivekit.whisper.assets" = ["*.tiktoken", "*.npz"] "whisperlivekit.whisper.assets" = ["*.tiktoken", "*.npz"]
"whisperlivekit.vad_models" = ["*.jit", "*.onnx"] "whisperlivekit.silero_vad_models" = ["*.jit", "*.onnx"]

View file

@ -603,16 +603,16 @@ class AudioProcessor:
res = self.vac(pcm_array) res = self.vac(pcm_array)
if res is not None: if res is not None:
silence_detected = res.get("end", 0) > res.get("start", 0) if "start" in res and self.current_silence:
if silence_detected and not self.current_silence: await self._end_silence()
if "end" in res and not self.current_silence:
pre_silence_chunk = self._slice_before_silence( pre_silence_chunk = self._slice_before_silence(
pcm_array, chunk_sample_start, res.get("end") pcm_array, chunk_sample_start, res.get("end")
) )
if pre_silence_chunk is not None and pre_silence_chunk.size > 0: if pre_silence_chunk is not None and pre_silence_chunk.size > 0:
await self._enqueue_active_audio(pre_silence_chunk) await self._enqueue_active_audio(pre_silence_chunk)
await self._begin_silence() await self._begin_silence()
elif self.current_silence:
await self._end_silence()
if not self.current_silence: if not self.current_silence:
await self._enqueue_active_audio(pcm_array) await self._enqueue_active_audio(pcm_array)

View file

@ -123,7 +123,7 @@ def load_silero_vad(model_path: str = None, onnx: bool = False, opset_version: i
raise Exception(f'Available ONNX opset_version: {available_ops}') raise Exception(f'Available ONNX opset_version: {available_ops}')
if model_path is None: if model_path is None:
current_dir = Path(__file__).parent current_dir = Path(__file__).parent
data_dir = current_dir / 'vad_models' data_dir = current_dir / 'silero_vad_models'
if onnx: if onnx:
if opset_version == 16: if opset_version == 16:
@ -138,7 +138,7 @@ def load_silero_vad(model_path: str = None, onnx: bool = False, opset_version: i
if not model_path.exists(): if not model_path.exists():
raise FileNotFoundError( raise FileNotFoundError(
f"Model file not found: {model_path}\n" f"Model file not found: {model_path}\n"
f"Please ensure the whisperlivekit/vad_models/ directory contains the model files." f"Please ensure the whisperlivekit/silero_vad_models/ directory contains the model files."
) )
else: else:
model_path = Path(model_path) model_path = Path(model_path)
@ -276,8 +276,10 @@ class FixedVADIterator(VADIterator):
elif r is not None: elif r is not None:
if "end" in r: if "end" in r:
ret["end"] = r["end"] ret["end"] = r["end"]
if "start" in r and "end" in ret: if "start" in r:
del ret["end"] ret["start"] = r["start"]
if "end" in ret:
del ret["end"]
return ret if ret != {} else None return ret if ret != {} else None