init
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class VADService:
|
||||
def __init__(self) -> None:
|
||||
self._model = None
|
||||
self._iterator = None
|
||||
self._ready = False
|
||||
self._attempted = False
|
||||
self._error: Optional[str] = None
|
||||
|
||||
def _ensure_loaded(self) -> None:
|
||||
if self._ready or self._attempted:
|
||||
return
|
||||
self._attempted = True
|
||||
try:
|
||||
from silero_vad import VADIterator, load_silero_vad
|
||||
|
||||
self._model = load_silero_vad()
|
||||
self._iterator = VADIterator(
|
||||
self._model,
|
||||
threshold=0.5,
|
||||
sampling_rate=16000,
|
||||
min_silence_duration_ms=300,
|
||||
speech_pad_ms=30,
|
||||
)
|
||||
self._ready = True
|
||||
except Exception as exc: # pragma: no cover
|
||||
self._error = str(exc)
|
||||
|
||||
def push_chunk(self, pcm_chunk):
|
||||
self._ensure_loaded()
|
||||
if self._ready and self._iterator is not None:
|
||||
return self._iterator(pcm_chunk)
|
||||
return None
|
||||
|
||||
@property
|
||||
def health(self) -> dict:
|
||||
return {"ready": self._ready, "attempted": self._attempted, "error": self._error}
|
||||
Reference in New Issue
Block a user