39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
"""Tests for webrtcvad voice command segmenter."""
|
|
from unittest.mock import patch
|
|
|
|
from homeassistant.components.assist_pipeline.vad import VoiceCommandSegmenter
|
|
|
|
_ONE_SECOND = 16000 * 2 # 16Khz 16-bit
|
|
|
|
|
|
def test_silence() -> None:
|
|
"""Test that 3 seconds of silence does not trigger a voice command."""
|
|
segmenter = VoiceCommandSegmenter()
|
|
|
|
# True return value indicates voice command has not finished
|
|
assert segmenter.process(bytes(_ONE_SECOND * 3))
|
|
|
|
|
|
def test_speech() -> None:
|
|
"""Test that silence + speech + silence triggers a voice command."""
|
|
|
|
def is_speech(self, chunk, sample_rate):
|
|
"""Anything non-zero is speech."""
|
|
return sum(chunk) > 0
|
|
|
|
with patch(
|
|
"webrtcvad.Vad.is_speech",
|
|
new=is_speech,
|
|
):
|
|
segmenter = VoiceCommandSegmenter()
|
|
|
|
# silence
|
|
assert segmenter.process(bytes(_ONE_SECOND))
|
|
|
|
# "speech"
|
|
assert segmenter.process(bytes([255] * _ONE_SECOND))
|
|
|
|
# silence
|
|
# False return value indicates voice command is finished
|
|
assert not segmenter.process(bytes(_ONE_SECOND))
|