AIAI 学习 · 专题库

语音与对话

处理回声、插话与播放取消

分清 AEC、有效插话、取消生成和清空旧音频各自的职责。

资料复核:2026-09-082 份直接来源含操作步骤与记录模板
先做什么

有效插话要同时解决三件事:识别用户真的在说话、尽快停止旧播放、避免旧结果重新进入对话。单独调整 VAD 解决不了整个问题。

理解这条链路

麦克风与播放参考回声处理有效插话判断提升 generation停播与丢弃旧块重新提交话轮
参考流程:根据公开能力整理的操作顺序;分支、重试和回退以正文说明为准,不代表厂商内部实现。

先找到播放参考

扬声器播放的音频会经房间和设备回到麦克风,AEC 通常需要与采集时轴对应的播放参考。服务器拿到混音不一定拿到客户端真实参考。标明回声处理在浏览器、设备、媒体服务器还是旁路,避免多层处理破坏近端人声。

双讲和低声是必测场景

测试仅远端播放、仅用户说话、双方同时说、用户低声、播放参考缺失与队列积压。回声下降并不一定好,可能也压掉了用户。分别看误打断、漏打断、近端可懂度和停播耗时,保存试听证据。

按这个顺序操作

  1. 确定音频在哪一端采集和播放,检查可用的 echoCancellation 设置与参考流。
  2. 先测仅播放时是否触发用户发言,再测双讲时真实用户能否保留。
  3. 打断发生时记录取消发出、服务端停止、队列清空与实际停播时间。
  4. 用延迟到达的旧 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

接着解决下一个问题