Files
open-xiaoai/examples/hass/tests/test_vad.py
T

42 lines
1.1 KiB
Python
Raw Normal View History

import math
import struct
import pytest
from hass.vad import VadConfig, VadSegmenter
def _sine_frame(sample_rate: int, freq_hz: float, frame_ms: int = 20) -> bytes:
samples = int(sample_rate * frame_ms / 1000)
values = [
int(10000 * math.sin(2 * math.pi * freq_hz * i / sample_rate))
for i in range(samples)
]
return struct.pack("<" + "h" * samples, *values)
def _silence_frame(sample_rate: int, frame_ms: int = 20) -> bytes:
samples = int(sample_rate * frame_ms / 1000)
return b"\x00\x00" * samples
@pytest.mark.parametrize("min_silence_ms", [40, 60])
def test_vad_emits_utterance(min_silence_ms: int):
config = VadConfig(
aggressiveness=1,
min_silence_ms=min_silence_ms,
max_utterance_ms=2000,
sample_rate=16000,
)
seg = VadSegmenter(config)
utterances = []
for _ in range(6):
utterances.extend(seg.feed(_sine_frame(16000, 440.0)))
for _ in range(6):
utterances.extend(seg.feed(_silence_frame(16000)))
assert len(utterances) >= 1
assert len(utterances[0]) > 0