comparison dictation/audio_test.py @ 275:78699f810817

Add Qwen3-VL and WebRTC dictation services Add Bazel targets for the CUDA-backed Qwen3-VL server and a local WebRTC faster-whisper dictation service. Co-authored-by: Copilot <[email protected]> Copilot-Session: e3d8cb06-6c95-4ae0-9757-651d3796ab00
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 10:58:47 -0700
parents
children
comparison
equal deleted inserted replaced
274:c9be578316a6 275:78699f810817
1 import unittest
2
3 import numpy as np
4
5 from dictation.audio import AudioEventKind, AudioSegmenter
6
7
8 class AudioSegmenterTest(unittest.TestCase):
9 def test_emits_partial_and_final_events(self):
10 segmenter = AudioSegmenter(
11 sample_rate=1000,
12 speech_threshold=0.01,
13 silence_ms=200,
14 partial_interval_ms=500,
15 max_utterance_seconds=5,
16 pre_roll_ms=100,
17 )
18 silence = np.zeros(100, dtype=np.float32)
19 speech = np.full(250, 0.2, dtype=np.float32)
20
21 self.assertEqual(segmenter.feed(silence), [])
22 events = segmenter.feed(speech)
23 self.assertEqual(events[0].kind, AudioEventKind.SPEECH_STARTED)
24 events = segmenter.feed(speech)
25 self.assertIn(AudioEventKind.PARTIAL_READY, [event.kind for event in events])
26 events = segmenter.feed(np.zeros(200, dtype=np.float32))
27 self.assertEqual(events[-1].kind, AudioEventKind.FINAL_READY)
28 self.assertFalse(segmenter.speaking)
29
30 def test_max_duration_bounds_utterance(self):
31 segmenter = AudioSegmenter(
32 sample_rate=100,
33 speech_threshold=0.01,
34 silence_ms=500,
35 partial_interval_ms=10000,
36 max_utterance_seconds=3,
37 pre_roll_ms=0,
38 )
39 events = []
40 for _ in range(3):
41 events.extend(
42 segmenter.feed(np.full(100, 0.2, dtype=np.float32))
43 )
44 final = [event for event in events if event.kind == AudioEventKind.FINAL_READY]
45 self.assertEqual(len(final), 1)
46 self.assertLessEqual(final[0].samples.size, 300)
47
48
49 if __name__ == "__main__":
50 unittest.main()