[低延迟端点]:完成首句保留和快速结束修正,包含ACK缓冲策略、批量读帧和主说话人端点回归测试
This commit is contained in:
+16
-2
@@ -82,6 +82,15 @@ class TransportTests(unittest.TestCase):
|
||||
self.assertEqual(frames[0].pcm, b"\x01\x00\x02\x00")
|
||||
self.assertEqual(frames[0].sample_rate, 16000)
|
||||
|
||||
def test_sounddevice_transport_returns_queued_frame_batch(self) -> None:
|
||||
fake = FakeSoundDevice(callback_payloads=[b"\x01\x00", b"\x02\x00", b"\x03\x00"])
|
||||
transport = SoundDeviceAudioTransport(sounddevice_module=fake)
|
||||
transport.start_input(sample_rate=16000, channels=1)
|
||||
frames = transport.read_frames(10)
|
||||
transport.stop()
|
||||
|
||||
self.assertEqual([item.frame_id for item in frames], [0, 1, 2])
|
||||
|
||||
def test_sounddevice_transport_flushes_queued_input(self) -> None:
|
||||
fake = FakeSoundDevice()
|
||||
transport = SoundDeviceAudioTransport(sounddevice_module=fake)
|
||||
@@ -115,7 +124,9 @@ class FakeInputStream:
|
||||
|
||||
def start(self) -> None:
|
||||
self.started = True
|
||||
self.callback(b"\x01\x00\x02\x00", 2, None, "")
|
||||
payloads = self.kwargs.get("callback_payloads") or [b"\x01\x00\x02\x00"]
|
||||
for payload in payloads:
|
||||
self.callback(payload, max(1, len(payload) // 2), None, "")
|
||||
|
||||
def stop(self) -> None:
|
||||
self.started = False
|
||||
@@ -140,10 +151,13 @@ class FakeOutputStream:
|
||||
|
||||
|
||||
class FakeSoundDevice:
|
||||
def __init__(self) -> None:
|
||||
def __init__(self, callback_payloads: list[bytes] | None = None) -> None:
|
||||
self.callback_payloads = callback_payloads
|
||||
self.output_writes: list[bytes] = []
|
||||
|
||||
def RawInputStream(self, **kwargs):
|
||||
if self.callback_payloads is not None:
|
||||
kwargs["callback_payloads"] = self.callback_payloads
|
||||
return FakeInputStream(**kwargs)
|
||||
|
||||
def RawOutputStream(self, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user