语音交互总流程
客户端(ESP32) 服务器
| |
| 本地唤醒词检测"小智" |
| |
| 打开音频通道 |
|------------------------>|
| |
| 发送唤醒词音频 |
|------------------------>|
| |
| 发送唤醒事件 |
|------------------------>|
| {"type":"listen", |
| "state":"detect", |
| "text":"小智"} |
| |
| 开始持续音频传输 |
|------------------------>|
| (Opus编码的音频数据) |
| |
| ASR文本结果 |
|<------------------------|
| {"type":"stt", |
| "text":"天气怎么样"} |
芯片侧
系统层调用
codec调用



语音前端AFE
唤醒词检测


VAD检测
音频输入 -> AFE处理 -> VAD检测 -> 状态回调
| | | |
| | | +-> LED显示
| | | +-> 设备状态更新
| | |
| | +-> AFE_VAD_SPEECH/AFE_VAD_SILENCE
| |
| +-> 回声消除(AEC)
| +-> 语音增强(SE)
|
+-> 16kHz采样率
+-> 单声道/双声道


VAD模式的选择影响:
- 检测灵敏度:
- 更高的模式 = 更高的检测门限
- 更低的模式 = 更容易触发
- 环境适应:
- 嘈杂环境选择高模式
- 安静环境可以用低模式
- 功耗影响:
- 高模式需要更多处理
- 低模式处理负担较轻
- 用户体验:
- 高模式可能需要更大声说话
- 低模式说话音量要求低
在这个项目中选择VAD_MODE_3的原因:
- 提高准确性
- 减少误触发
- 适应各种环境
- 与唤醒词检测配合
你可以根据实际使用环境和需求调整VAD模式:
- 家庭安静环境:可以考虑MODE_1或MODE_2
- 公共场所:建议使用MODE_3
- 开发测试:可以用MODE_1方便调试
唤醒词Oneshot
“你好小智,天气”,连读发音




idf从系统环境变量获取sdk路径。
端云通道



客户端 服务器
| |
|------ 唤醒词检测 ------>|
| |
|------ 开始监听 -------->|
| |
|------ 音频数据 -------->|
| |
|<----- ASR结果 ---------|
| |
|<----- TTS音频 ---------|
| |
|------ 停止监听 -------->|
通信类型

获取ASR文本

TTS接收播放
MQTT服务器 ESP32设备
| |
|--- TTS音频数据(Opus) ---->|
| |
| | 1. 加入解码队列
| |
| | 2. OutputAudio线程处理
| |
| | 3. Opus解码为PCM
| |
| | 4. 重采样(如需要)
| |
| | 5. 输出到DAC

总结
当前采用面板板Wi-Fi方案
单麦克风,没有AEC没有全双工
wakeup-speaking-listening-speaking-listening
Server服务
虾哥的服务没有开源
但是提供了一个使用后台

烧录后,管理设备填入mac地址;


tts引擎使用的是字节跳动,火山引擎



最低0.47元/天 解锁文章
3494





