自动增益控制 · 音量忽大忽小怎么办

你离麦克风远近、说话大小声,音量忽高忽低——AGC 自动把它拉到稳定水平。这一章讲清 AGC 的目标电平、模拟增益(调麦克风)与数字增益(AGC2)的两级、以及它如何在「够响」和「不削顶」之间平衡。

作者 David更新于 第 74 篇(共 112 篇)

自动增益控制 · 音量忽大忽小怎么办

回声消掉了,但还有个问题:音量不稳。你凑近麦克风声音就大、往后一靠就小,不同人音量差异也大。对方一会儿要调大音量、一会儿被震到——体验糟糕。AGC(Automatic Gain Control,自动增益控制) 就是把音量自动拉到一个稳定、舒适的水平。这一章看它。

目标:稳定的响度

AGC 持续监测音频的响度,自动施加增益(放大或衰减),把它拉向一个目标电平**——太小就放大,太大就压低,让对方听到的音量始终稳定舒适。** 目标是让“不管你离麦克风远近、说话大小声,对方听到的响度都差不多”。这需要自适应:AGC 追踪你当前的音量,和目标比较,动态调整增益。你突然大声,它快速压一下(别削顶失真);你压低嗓子,它慢慢放大(让对方听清)。

难点在“快慢的拿捏”:调得太快,会把每个字的自然强弱都抹平(听着不自然、像机器人);调得太慢,音量骤变时来不及反应(先震一下 / 先没声)。所以 AGC 对“骤增”反应快(防削顶),对“缓变”反应慢(保自然)——又是一个快慢不对称的权衡。

两级:模拟增益 + 数字增益

WebRTC 的 AGC 分两级(对应 AGC1 与 AGC2 的演进):

模拟增益调“麦克风的采集音量”(在数字化之前),数字增益调“已采集音频的数值”(在数字化之后)——两级配合,既充分利用硬件动态范围,又精细控制。

  • 模拟增益(analog) —— 直接调麦克风 / 声卡的硬件增益(采集音量旋钮)。好处:在信号数字化之前放大,能更好地利用麦克风的动态范围、信噪比更优。但它粗、慢(调硬件有延迟),且有上下限。
  • 数字增益(AGC2,digital) —— 在音频已经是数字之后,直接乘一个增益系数。好处:快、精细、可做复杂处理(如限幅器防削顶)。AGC2 是现代的数字增益实现,算法更精细。

两级搭配:模拟增益负责“大方向”(把硬件采集调到合适档位),数字增益负责“精修”(在数字域精细拉平)。这利用了两者各自的优势——模拟的信噪比 + 数字的精度。先在源头(硬件)调对大概,再在数字域精调,是信号处理的常见分工。

别把噪声也放大

AGC 有个要小心的副作用,和链条顺序有关:

AGC 放大音量时,会连噪声一起放大**——所以它通常放在降噪(NS)之后,先把噪声去掉,再放大干净的人声。** 想象:你在安静环境小声说话,AGC 要放大你的声音——但如果这时还有背景噪声没除,放大人声的同时噪声也被放大了,对方听到的是“放大的人声 + 放大的噪声”,反而更吵。所以处理链顺序讲究:AEC 消回声 → NS 降噪 → AGC 增益——先把回声、噪声都清干净,最后才放大已经干净的信号。这个顺序不是随意的,而是“别放大你不想要的东西”这个朴素原则的体现。

AGC 还常用VAD辅助:只在有人说话时调增益(别在静音期把背景噪声当信号放大)。所以 VAD 是 AGC 的好帮手。

小结与下一章

AGC 把忽大忽小的音量拉到稳定的目标电平(远近、大小声都听着一致),自适应调整,对骤增快反应(防削顶)、缓变慢反应(保自然)。两级:模拟增益(调麦克风硬件采集音量,信噪比优)+ 数字增益(AGC2)(数字域精细拉平、限幅)。它放在NS 降噪之后(别把噪声一起放大),常配 VAD(只在说话时调)。

链条还剩降噪和语音检测。下一章一起讲。👉 降噪与语音检测。

参考资料

  • [1] libwebrtc 源码.modules/audio_processing/agc/、agc2/(adaptive_agc.h、gain_controller2.h)。
  • [2] 自动增益控制 —— 音频动态范围处理。
  • [3] 关联APM 处理链顺序。

本页目录