Refactored VAD analyzer to process multiple audio frames in a single iteration if needed.
This commit is contained in:
@@ -183,36 +183,37 @@ class VADAnalyzer(ABC):
|
|||||||
if len(self._vad_buffer) < num_required_bytes:
|
if len(self._vad_buffer) < num_required_bytes:
|
||||||
return self._vad_state
|
return self._vad_state
|
||||||
|
|
||||||
audio_frames = self._vad_buffer[:num_required_bytes]
|
while len(self._vad_buffer) >= num_required_bytes:
|
||||||
self._vad_buffer = self._vad_buffer[num_required_bytes:]
|
audio_frames = self._vad_buffer[:num_required_bytes]
|
||||||
|
self._vad_buffer = self._vad_buffer[num_required_bytes:]
|
||||||
|
|
||||||
confidence = self.voice_confidence(audio_frames)
|
confidence = self.voice_confidence(audio_frames)
|
||||||
|
|
||||||
volume = self._get_smoothed_volume(audio_frames)
|
volume = self._get_smoothed_volume(audio_frames)
|
||||||
self._prev_volume = volume
|
self._prev_volume = volume
|
||||||
|
|
||||||
speaking = confidence >= self._params.confidence and volume >= self._params.min_volume
|
speaking = confidence >= self._params.confidence and volume >= self._params.min_volume
|
||||||
|
|
||||||
if speaking:
|
if speaking:
|
||||||
match self._vad_state:
|
match self._vad_state:
|
||||||
case VADState.QUIET:
|
case VADState.QUIET:
|
||||||
self._vad_state = VADState.STARTING
|
self._vad_state = VADState.STARTING
|
||||||
self._vad_starting_count = 1
|
self._vad_starting_count = 1
|
||||||
case VADState.STARTING:
|
case VADState.STARTING:
|
||||||
self._vad_starting_count += 1
|
self._vad_starting_count += 1
|
||||||
case VADState.STOPPING:
|
case VADState.STOPPING:
|
||||||
self._vad_state = VADState.SPEAKING
|
self._vad_state = VADState.SPEAKING
|
||||||
self._vad_stopping_count = 0
|
self._vad_stopping_count = 0
|
||||||
else:
|
else:
|
||||||
match self._vad_state:
|
match self._vad_state:
|
||||||
case VADState.STARTING:
|
case VADState.STARTING:
|
||||||
self._vad_state = VADState.QUIET
|
self._vad_state = VADState.QUIET
|
||||||
self._vad_starting_count = 0
|
self._vad_starting_count = 0
|
||||||
case VADState.SPEAKING:
|
case VADState.SPEAKING:
|
||||||
self._vad_state = VADState.STOPPING
|
self._vad_state = VADState.STOPPING
|
||||||
self._vad_stopping_count = 1
|
self._vad_stopping_count = 1
|
||||||
case VADState.STOPPING:
|
case VADState.STOPPING:
|
||||||
self._vad_stopping_count += 1
|
self._vad_stopping_count += 1
|
||||||
|
|
||||||
if (
|
if (
|
||||||
self._vad_state == VADState.STARTING
|
self._vad_state == VADState.STARTING
|
||||||
|
|||||||
Reference in New Issue
Block a user