[低延迟端点]:完成首句保留和快速结束修正,包含ACK缓冲策略、批量读帧和主说话人端点回归测试
This commit is contained in:
@@ -116,9 +116,10 @@ class WakeVadSttTests(unittest.TestCase):
|
||||
provider.load()
|
||||
recorder = PrimarySpeakerVadRecorder(
|
||||
provider,
|
||||
min_duration_ms=40,
|
||||
min_duration_ms=250,
|
||||
end_silence_ms=1000,
|
||||
speaker_profile_ms=40,
|
||||
speaker_profile_min_ms=40,
|
||||
speaker_absent_ms=40,
|
||||
)
|
||||
frames = [
|
||||
@@ -142,6 +143,35 @@ class WakeVadSttTests(unittest.TestCase):
|
||||
self.assertEqual(consumed, 4)
|
||||
self.assertEqual(segment.metadata["transcript"], "你是谁")
|
||||
|
||||
def test_primary_speaker_endpoint_does_not_wait_for_vad_min_duration(self) -> None:
|
||||
provider = EnergyVadProvider()
|
||||
provider.load()
|
||||
recorder = PrimarySpeakerVadRecorder(
|
||||
provider,
|
||||
min_duration_ms=1000,
|
||||
end_silence_ms=1000,
|
||||
speaker_profile_ms=120,
|
||||
speaker_profile_min_ms=40,
|
||||
speaker_absent_ms=40,
|
||||
)
|
||||
frames = [
|
||||
make_frame(1, 0, speech=True, metadata={"speaker_id": "owner", "transcript": "你在做什么"}),
|
||||
make_frame(2, 20, speech=True, metadata={"speaker_id": "owner"}),
|
||||
make_frame(3, 40, speech=True, metadata={"speaker_id": "background"}),
|
||||
make_frame(4, 60, speech=True, metadata={"speaker_id": "background"}),
|
||||
make_frame(5, 80, speech=True, metadata={"speaker_id": "owner", "transcript": "第二次重复"}),
|
||||
]
|
||||
segment = None
|
||||
for item in frames:
|
||||
result = recorder.feed(item)
|
||||
if isinstance(result, AudioSegment):
|
||||
segment = result
|
||||
break
|
||||
self.assertIsNotNone(segment)
|
||||
assert segment is not None
|
||||
self.assertEqual(segment.metadata["end_reason"], "primary_speaker_absent")
|
||||
self.assertEqual(segment.metadata["transcript"], "你在做什么")
|
||||
|
||||
def test_primary_speaker_endpoint_allows_short_pause(self) -> None:
|
||||
provider = EnergyVadProvider()
|
||||
provider.load()
|
||||
@@ -150,6 +180,7 @@ class WakeVadSttTests(unittest.TestCase):
|
||||
min_duration_ms=40,
|
||||
end_silence_ms=1000,
|
||||
speaker_profile_ms=40,
|
||||
speaker_profile_min_ms=40,
|
||||
speaker_absent_ms=60,
|
||||
)
|
||||
frames = [
|
||||
|
||||
Reference in New Issue
Block a user