主题
第 5 章 设备端适配
跑通第 3 章后,你手里有了一台能对话的设备。本章解决两件事:① 我的硬件能不能接、要配什么声学算法、选哪种交互模式;② 设备端音频怎么处理——采集、前处理、切包、上行。
读完你能:选定交互模式与声学算法、确定芯片型号、把麦克风收到的声音处理成符合协议要求、能被云端 ASR 正确识别的上行音频流。
5.1 硬件能力准入基线
设备要与 JoyInside 云端稳定连接并实时上传语音,需具备以下底层能力:
| 能力 | 要求 |
|---|---|
| 网络接入 | 支持 Wi-Fi 或 4G |
| 全双工长连接 | 基于 WebSocket 协议(暂不支持 webrtc/mqtt) |
| 安全加密 | HTTPS + HTTP 安全证书,设备端实现证书上传与验证 |
| 音频采集 | 麦克风 + 扬声器,16k 采样率 / 16 位深 / 单声道 |
| 音频播放 | 能解码 PCM/Opus/mp3 并播放 |
⚠ 暂不支持 webrtc/mqtt,语音对话必须走 WebSocket 长连接。这是 JoyInside 接入的唯一入口。
5.2 三种交互模式选型(声学要求对照)
根据产品形态选择交互模式,不同模式对设备端声学算法的要求不同。三种模式与设备端声学算法的对应关系如下图:
模式一:全双工免唤醒(推荐,体验最佳)
交互方式:设备在"播放云端语音"的同时持续"收听用户指令",支持用户随时打断(Barge-in)。一次唤醒或触发后,无需反复呼叫唤醒词,Agent 可结合上下文多轮深度对话。
设备端必须具备的声学能力:
| 算法 | 要求 | 作用 |
|---|---|---|
| AEC(声学回声消除) | 必选,硬件级或算法级 | 精准过滤设备自身扬声器播放的声音,防止云端听到回音 |
| ANS(背景降噪) | 必选 | 抑制平稳噪声与非平稳突发噪声 |
| AGC(自动增益) | 必选 | 自动调节拾音音量,确保远场/近场信噪比达标 |
| 打断处理 | 必选 | 处理云端下发的 CALL_AGENT_INTERRUPTED 事件,停止当前播放,无缝衔接下一轮 |
适合:需要自然拟人交互的场景(陪伴玩具、音箱)。技术门槛最高,但体验最佳。
模式二:按键对讲机
交互方式:类似"对讲机"的强控交互。用户按住实体或虚拟按键时设备开始收音,松开按键则结束收录,随后等待云端处理并播放回复。
设备端必须具备的声学能力:
| 算法 | 要求 | 作用 |
|---|---|---|
| ANS(背景降噪) | 必选 | 抑制背景环境噪音 |
| AGC(自动增益) | 必选 | 自动调节收音音量,确保声音清晰平稳 |
| 按键状态联动 | 必选 | 按键"按下/松开"状态精准转化为音频流上传的"开始/截断"信号,与云端时序同步 |
适合:强隐私场景,或环境噪声复杂的工业/商业设备。技术门槛最低。
模式三:半双工 VAD
交互方式:经典的"一问一答"轮流交谈。设备播放云端语音时麦克风关闭或忽略;播放完全结束,或通过特定唤醒词激活后,才开启短暂收音窗口听取用户指令。不支持播报中途打断。
设备端必须具备的声学能力:
| 算法 | 要求 | 作用 |
|---|---|---|
| ANS(背景降噪) | 必选 | 抑制背景环境噪音 |
| AGC(自动增益) | 必选 | 自动调节收音音量 |
| VAD(语音活动检测) 或 唤醒模型 | 必选 | 灵敏的静音检测算法判断用户何时开始说话;或唤醒模型唤醒后再收音 |
适合:信息查询、家电控制等指令明确、无需频繁探讨的场景。无需手动按键,技术门槛适中,降低了对复杂声学算法的依赖。
三模式速查对照
| 维度 | 全双工免唤醒 | 按键对讲机 | 半双工 VAD |
|---|---|---|---|
| AEC | 必选 | 不要求 | 不要求 |
| ANS | 必选 | 必选 | 必选 |
| AGC | 必选 | 必选 | 必选 |
| VAD/唤醒 | 云端 VAD | 不要求 | 端侧 VAD 或唤醒模型 |
| 打断(Barge-in) | ✅ 支持 | ✅(松键即断) | ❌ 不支持 |
| 隐私 | 一般 | 最强 | 一般 |
| 技术门槛 | 高 | 低 | 中 |
| 典型场景 | 陪伴玩具/音箱 | 强隐私/工业设备 | 家电控制/信息查询 |
算法定义详见 附录 C 术语表(VAD/AEC/AGC/ANS/OTA)。打断事件
CALL_AGENT_INTERRUPTED的处理见 4.4 WebSocket语音通道。
5.3 设备端音频处理链路
选好交互模式(5.2)后,本节讲设备端音频从采集到上行的完整处理链路。5.2 讲「要哪些算法」,本节讲「这些算法在链路里怎么协同,音频怎么切包上传」。
5.3.1 音频处理链路总览
5.3.2 采集与前处理(AEC/ANS/AGC 协同)
前处理是音频质量的第一道关卡,直接决定云端 ASR 能不能听清。三个算法在链路中的顺序见 5.3.1 总览图(AEC → ANS → AGC)。
| 算法 | 协同要点 |
|---|---|
| AEC | 消除设备自身扬声器的回声。全双工模式下扬声器的声音会被麦克风重新收到,必须用 AEC 抵消,否则云端听到"回音"。硬件级 AEC 效果优于算法级 |
| ANS | 抑制稳态噪声(风扇、空调)与突发噪声(关门、敲击)。ANS 过度会损伤语音,需调参平衡 |
| AGC | 自动调节增益。远场说话音量小就放大,近场大就压低,保证信噪比稳定 |
协同要点:前处理在端侧完成,上行的是已处理的干净音频。云端不再做回声消除/降噪(云端只做 ASR 识别),所以端侧前处理质量直接决定识别率。
5.3.3 PCM 上行切包(硬约束)
PCM 是原始音频,切包规则简单但必须遵守时长上限。PCM 切包只受单包帧时长这一条硬约束。
| 规则 | 要求 |
|---|---|
| 单包帧时长 | ≤300ms(硬上限) |
| 单包字节数 | 时长 × 采样率 × 2bytes(16bit) × 1声道(如 16k/16bit 下 120ms = 16000×2×0.12 = 3840 字节) |
| 发送节奏 | 间隔 = 音频时长,均匀发送(实时流式,不批量发) |
⚠ 单包超 300ms 的后果:云端 ASR 是流式处理的,单包太长会导致首字延迟增大、打断响应变慢。300ms 是硬上限,建议实际取 120ms 左右平衡延迟与开销。不均匀发送(攒一批一次发)会导致回复延时异常。
5.3.4 Opus 上行:单包与拼包(⭐单包推荐)
Opus 是压缩格式(体积约 PCM 的 1/8,省流量),支持 CBR/VBR。上行有两种模式:单包(1 个 opus 音频包 = 1 个数据包,推荐)与拼包(多个 opus 音频包裸拼接成 1 个数据包,不推荐)。三层概念(数据包 / opus 音频包 / opus 帧)与数据包构成图见 4.5 音频格式与分片。
单包与拼包怎么选
| 模式 | 何时用 | opus 音频包格式 | frameSize |
|---|---|---|---|
| 单包(推荐) | 默认场景 | 0 号包或 3 号包均可(opus 标准都支持) | 不传 |
| 拼包(不推荐) | 仅 CPU 不足、需减少上传次数时 | 3 号包 + CBR | 传(=单个 opus 音频包字节数) |
0/1/2/3 号包、CBR/VBR 的原理见 附录D · Opus 包结构与拼包原理;本节只讲怎么选、不讲为什么。
标准场景字节参考
标准场景参考:16k 采样率、8:1 压缩比、60ms 帧长 → 单个 opus 音频包约 240 字节(供拼包场景估算 frameSize 用;单包字节数随码率可变,无需关注)。
易踩坑点
audio.input.frameSize= 单个 opus 音频包字节数,仅拼包时传(单包不传);原理详见 附录D- 设了
frameSize且小于实际 opus 音频包字节数 → 服务端按 frameSize 切错 → 解码失败 - 单个 opus 音频包字节超 480(默认上限)时,需显式设 frameSize
- 数据包总时长建议 ≤300ms(软建议,与 PCM 单包对齐);opus 音频包时长 ≤120ms 是 opus 标准硬上限
5.3.5 上行时序与抖动控制
| 要点 | 说明 |
|---|---|
| 间隔 = 音频时长 | 实时流式发送,间隔等于单包音频时长。120ms 的包每 120ms 发一个 |
| 不批量发送 | 不能攒一批一次发,不均匀会导致回复延时异常 |
| 抖动容忍 | 网络抖动会影响 ASR 首字延迟,弱网下抖动大时首字会更慢 |
| 二进制传输 | audio.binary=true 启用后,上行用 ws.send(bytes)(替代 base64),省带宽 |
端侧 VAD 的开启与建联时
audio.vad配置开关是两件事:本节讲端侧实现(怎么采集、怎么切包、怎么发),建联时是否在协议层开启端侧 VAD 由audio.vad字段控制(true开启 /false关闭,默认false),字段定义见 4.5 语音基础协议参考手册 · CLIENT_VOICE_CHAT_UPDATE。协议层格式(PCM/Opus/mp3 参数、二进制配置)见 4.5 音频格式与分片:§4.5 是格式字典,§5.3 是设备端落地。
5.4 芯片支持与 Demo 下载
芯片 SDK 支持矩阵(ESP32S3 / BK7258 / Linux / 杰里)、ESP32S3 快速接入教程、多语言 Demo(Java / Python / C++ / Android)下载地址统一见 附录 G. 下载 Demo。
下一步
读完本章,你已经知道硬件要配什么声学算法、音频怎么处理切包、用什么芯片。接下来:
- 跑通真实硬件:基于本章选定的芯片 Demo,在真实开发板上跑通语音对话(回 第3章 用真实凭证)
- 扩展业务场景:读 第6章 业务场景接入 —— IOT/有声书/魔法打印/视觉对话
- 理解协议细节:4.4 WebSocket语音通道 打断事件、4.5 音频格式与分片、附录 B.3.2 配置更新
- 查术语与排障:附录 C 术语表(VAD/AEC/AGC/ANS)、附录 D Opus 包结构与拼包原理、第9章 故障排查