feat(voice): add local VAD speech endpoint detection

This commit is contained in:
chenjintao
2026-10-23 10:59:26 +08:00
parent ee32b4d63f
commit f17ce857ff
17 changed files with 1183 additions and 141 deletions
+30
View File
@@ -0,0 +1,30 @@
# ADR 0006: 本地语音端点检测所有权
## 状态
Accepted(实现与主机/构建验证;声学阈值待实机验收)
## 决策
- `domain` 独占本地语音端点契约、VAD 实例、分帧和连续人声/静音状态,声明于
`domain.h`。不向其他 facade 复制这些契约。
- `platform` 保持通用 PCM 观察者原语,将单订阅扩为固定两个槽位,供本地命令
和端点检测共享同一份 AEC 后 PCM。回调同步执行、不可阻塞,不新增采集任务。
- `control_plane` 在真实网络拾音启动后按 PTT generation 启用检测,查询领域快照,
只结束匹配代次的活动输入;保留 8 秒兜底和现有状态机的唯一收尾路径。
- 端点检测不在回调中停止采集或发送协议。平台停止先与在途采集串行,再由原采集任务补齐
最后一个 Opus 帧、限时排空发送;失败时废弃传输,不宣告正常结束或无限重试。
- 停止端点检测先禁用订阅并等待在途回调,再释放 VAD。超时保留资源供重试,
不安排后台释放。快照按值返回,所有 VAD 状态由互斥锁保护。
## 迁移与资源
1. 先扩展通用 PCM 订阅和明确音频停止语义,维持旧调用兼容。
2. 新增领域检测器和可关闭配置,再接入现有 PTT 推进器。
3. 主机验证实际 C 的分帧、代次、失败释放、订阅隔离和尾包顺序,构建启用/关闭配置。
4. 实机检查慢语速/停顿/噪声/远场/提示音、唤醒和按键、取消/断网/OTA,记录
端点到 StopSpeech/首个下行/播放的分段延迟及内部 RAM 最低余量。
固定检测帧为 320 个 int16 样本(640 B),不新增任务、队列或 DMA 缓冲。
WebRTC VAD 的库内分配及采集任务栈峰值需日志和设备测量,不能用帧大小冒充总开销。
检测初始化失败回退原输入窗口,不影响流式上行。