[低延迟端点]:完成首句保留和快速结束修正,包含ACK缓冲策略、批量读帧和主说话人端点回归测试

This commit is contained in:
mkbk
2026-06-17 22:04:25 +08:00
parent e74ec28e7d
commit a64bb86da4
15 changed files with 136 additions and 15 deletions
+16 -2
View File
@@ -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):