语音与对话
处理回声、插话与播放取消
分清 AEC、有效插话、取消生成和清空旧音频各自的职责。
先做什么
有效插话要同时解决三件事:识别用户真的在说话、尽快停止旧播放、避免旧结果重新进入对话。单独调整 VAD 解决不了整个问题。
理解这条链路
麦克风与播放参考回声处理有效插话判断提升 generation停播与丢弃旧块重新提交话轮
先找到播放参考
扬声器播放的音频会经房间和设备回到麦克风,AEC 通常需要与采集时轴对应的播放参考。服务器拿到混音不一定拿到客户端真实参考。标明回声处理在浏览器、设备、媒体服务器还是旁路,避免多层处理破坏近端人声。
双讲和低声是必测场景
测试仅远端播放、仅用户说话、双方同时说、用户低声、播放参考缺失与队列积压。回声下降并不一定好,可能也压掉了用户。分别看误打断、漏打断、近端可懂度和停播耗时,保存试听证据。
按这个顺序操作
- 确定音频在哪一端采集和播放,检查可用的 echoCancellation 设置与参考流。
- 先测仅播放时是否触发用户发言,再测双讲时真实用户能否保留。
- 打断发生时记录取消发出、服务端停止、队列清空与实际停播时间。
- 用延迟到达的旧 generation 音频做回归,确认恢复后不会复播。
配套本地工具
以下工具位于 AI 学习工作区。先阅读对应说明,确认所需数据与依赖;本轮未重新运行这些实验。
- duplex-aec-bench/README.md
可直接复用的记录模板
场景:远端独播 / 近端独播 / 双讲 / 低声 / 无参考 回声处理位置与设备: 参考延迟与丢失: 误打断 / 漏打断 / 人声可懂度: interrupt_at → cancel_sent → buffer_cleared → playout_stopped 过期块数量 / 被丢弃数量:
做到什么程度才算通过
- 仅有回声不会被当作有效用户操作。
- 双讲测试不会吞掉用户关键词。
- 停止生成和停止播放均有证据。
- 测试明确音频是否为合成。
当前证据的限制
本轮没有对设备或 FreeSWITCH 音频做 AEC 实测;具体延迟与误触发率仍需现场数据。
本轮确认的事实与来源
以下为公开资料支持的具体结论;操作流程和验收建议属于工程推导。仓库说明或厂商效果表述不等于独立实测。
[1] W3C · Media Capture and Streams
W3C 媒体采集规范定义 echoCancellation 约束及相关设置;请求约束不等于已经测得某一设备上的回声消除效果。
资料日期:2025-10-09 · 复核:2026-09-08
阅读原始来源 ↗[2] LiveKit · 话轮与打断
LiveKit 话轮文档单独处理打断与附和,表明“检测到声音”和“应当取消助手”需要不同决策。
资料日期:页面未统一标注;以复核日期为准 · 复核:2026-09-08
阅读原始来源 ↗这次更新了什么
保留原故障注入设计,移除用合成信号结果证明真实 AEC 效果的可能误读。
合并前的内容入口
以下旧地址仍可访问,并会带你来到本篇。完整重构前材料已留存本地备份。
- research-hub/full-duplex-aec-barge-in.html