云端音频3A最佳实践
更新时间:2025-12-12
1. 概览
本文主要介绍:
- 云端音频3A各功能的启用、禁用方法
- 参数含义 & 参数的配置建议值
2. 需求场景
音频3A功能即:回声消除——AEC、噪声抑制——ANS、自动增益——AGC。
回声消除应对场景:设备的麦克风会采集大模型的播放内容(对话回答、播放的音乐、故事等),导致后续ASR识别、打断对话。
噪声抑制应对场景:环境嘈杂噪声干扰,影响ASR的识别准确度。
自动增益应对场景:麦克风采集能力较弱,采集音频的音量很低,影响ASR的识别准确度。
3. 云端3A各功能的启用、禁用方法
创建智能体时,(请求头域见创建大模型互动实例) config字段携带如下参数
JSON
1{
2 "cloud_3A_url": {
3 "AEC": {
4 "enable": true
5 },
6 "ANS": {
7 "enable": true
8 },
9 "AGC": {
10 "enable": true
11 }
12 }
13}
3.1. 不做传参配置、服务端的默认值是:
- 回声消除——AEC:false
- 噪声抑制——ANS:true
- 自动增益——AGC:false
3.2. 单独配置一个功能
cloud_3A_url的任何一个参数都可以缺省配置,只要保证json格式正确即可:
关闭ANS:
JSON
1{
2 "cloud_3A_url": {
3 "ANS": {
4 "enable": false
5 }
6 }
7}
开启AEC和ANS:
JSON
1{
2 "cloud_3A_url": {
3 "AEC": {
4 "enable": true
5 },
6 "ANS": {
7 "enable": true
8 }
9 }
10}
4. 完整参数、含义、参考值、取值范围
完整的cloud_3A_url:
JSON
1{
2 "cloud_3A_url": {
3 "AEC": {
4 "enable": false,
5 "maxEchoDelayMs": 500,
6 "eHeadESMs": 3000,
7 "delayThreshold": 0.2,
8 "initDuration": 2.5,
9 "dtThreshold": 0.25
10 },
11 "ANS": {
12 "enable": true
13 },
14 "AGC": {
15 "enable": false,
16 "maxVolume": 60,
17 "extraGain": 0
18 }
19 }
20}
| 3A功能 | 功能参数 | 类型 | 描述 | 参考值 | 取值范围 |
|---|---|---|---|---|---|
| AEC | enable | bool | 是否启用回声消除 | false | true/false |
| AEC | maxEchoDelayMs | int | 当前设备的最大云端回声时延(ms)。『云端回声时延』 = 『云端编码下发音频 -> 网络传输 -> 端侧解码播放音频 -> 麦克风采集 > 编码上传音频 -> 网络传输 -> 云端解码音频』的耗时。回声消除能够处理的时延范围为[maxEchoDelayMs-500,maxEchoDelayMs],即上限与下限不超过500ms。如果您的应用确实需要处理超过 500 毫秒的时延波动范围,则我们需要对指定设备做参数迭代、发布一个针对该设备的专有 AEC 算法参数版本 | 600 | [200,3000] |
| AEC | eHeadESMs | int | 回声消除算法需要一段初始化和学习的时间(即本表中的initDuration),为避免这段时间内的回声消除不稳定,需要短暂启用更加严厉的消除模式(这段时间内会对端侧说话语音有损伤,因此不能设置得太长,只需保证比initDuration的时间略长即可)。单位是ms | 3000 | [0, 10000] |
| AEC | delayThreshold | Double | 回声路径时延估计阈值。由于网络等原因,回声延迟不可能是定值。在网络不稳定的场景下,为了回声延迟平滑过度,此值可以略微调大一些 | 0.2 | [0.2, 0.5] |
| AEC | initDuration | Double | 回声消除的初始状态(学习状态)持续时间(秒)。一般不做调整。 | 2.5 | [2.5, 10] |
| AEC | dtThreshold | Double | 双讲切换阈值。值大 = 保留近端声音优先 (回声风险高);值小 = 消除回声优先 (麦克风声音失真风险高) | 0.25 | [0.2, 1.0] |
| ANS | enable | bool | 是否启用噪声抑制 | true | true/false |
| AGC | enable | boo | 是否启用自动增益 | false | true/false |
| AGC | maxVolume | int | 自动增益后的峰值音量上限。 | 60 | [1,100) |
| AGC | extraGain | Double | 在自动增益后施加额外的固定增益。单位是db | 0 | [0,3) |
5. 场景与参数配置示例
5.1. 回声消除 (正在上线)
『云端回声时延』 = 『云端编码下发音频 -> 网络传输 -> 端侧解码播放音频 -> 麦克风采集 > 编码上传音频 -> 网络传输 -> 云端解码音频』的耗时。
这个过程可以划分为两大部分:端侧音频时延 + 非端侧音频时延。非端侧主要是网络传输。
由于maxEchoDelayMs是一个上限值,我们估计时可以估得偏大一些。比如网络传输的上行+下行一般是200ms左右,因此:在正常稳定的网络场景下,我们假定非端侧(网络传输)的时间=300ms。
此时,只需自行估算端侧的音频时延(从网络收到音频流、处理、播放、采集、处理、准备上传到云端)即可。
例如:
- 某设备上,端侧的音频时延为200~300ms波动,加上网络传输就是500~600ms,再留一些冗余,假设波动上下100ms。最终估算得到『云端回声时延』=400~700ms波动。此时,设置maxEchoDelayMs=700。云端即可处理回声时延不超出[200,700]ms范围的回声时延,覆盖了我们留足了波动余量估计的时延范围。传参如下即可:
JSON
1{
2 "cloud_3A_url": {
3 "AEC": {
4 "enable": false,
5 "maxEchoDelayMs": 700,
6 "eHeadESMs": 3000,
7 "initDuration": 2.5
8 }
9 }
10}
- 某设备上,端侧音频传输流程较复杂、甚至有跨设备的蓝牙传输等,端侧的音频时延达到700~900ms波动,加上网络传输就是1000~1200ms,再留一些冗余,假设波动上下100ms。最终估算得到『云端回声时延』=900~1300ms波动。此时,设置maxEchoDelayMs=1300。云端即可处理回声时延不超出[800,1300]ms范围的回声时延,覆盖了我们留足了波动余量估计的时延范围。此外,由于流程复杂的原因,回声消除算法可能需要更长的初始化和学习时间,传参如下即可:
JSON
1{
2 "cloud_3A_url": {
3 "AEC": {
4 "enable": false,
5 "maxEchoDelayMs": 1300,
6 "eHeadESMs": 7000,
7 "initDuration": 5.0
8 }
9 }
10}
再次强调:如果您的应用场景特殊、端侧处理链路复杂、确实需要处理超过 500 毫秒的时延波动范围,则我们需要对指定设备做参数迭代、进而发布一个针对该设备的专有 AEC 算法参数版本。
5.2. 噪声抑制
建议开启
5.3. 自动增益
注意:
- 如果环境嘈杂,则很难实现中远距离对话的自动增益(因为人声比环境噪音还小,已经在降噪过程中会抹掉了)
- 建议自动增益和噪声抑制搭配使用,即不要单独开启自动增益。
下面是常见场景和建议值:
- 近距离对话(1m内)、麦克风收音效果较差:
JSON
1{
2 "cloud_3A_url": {
3 "ANS": {
4 "enable": true
5 },
6 "AGC": {
7 "enable": true,
8 "maxVolume": 60,
9 "extraGain": 0
10 }
11 }
12}
- 中距离对话(1-2m):
JSON
1{
2 "cloud_3A_url": {
3 "ANS": {
4 "enable": true
5 },
6 "AGC": {
7 "enable": true,
8 "maxVolume": 90
9 "extraGain": 0
10 }
11 }
12}
3 远距离对话(2m外):
JSON
1{
2 "cloud_3A_url": {
3 "ANS": {
4 "enable": true
5 },
6 "AGC": {
7 "enable": true,
8 "maxVolume": 90
9 "extraGain": 1
10 }
11 }
12}
6. 处理结果示例图

6. 注意事项
- 当前版本的回声消除功能只支持16k的TTS音频,待适配。近期上线
- 当前版本的回声消除功能必须设置
dfda=false。 - 回声消除的参数中,对消除效果影响最大的是maxEchoDelayMs,如对上述内容有理解模糊的地方,或者不清楚自己设备、网络等环节的实际音频流耗时,可联系开发人员查看云端日志,迭代给出最合适的值。
- 在自动增益中,为避免过度增益、削峰失真,建议maxVolume不超过90、非必要不启用extraGain。
