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

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

- 作者：David（道雾轩）
- 专栏：音视频与 WebRTC 详解（https://daiw.org/manual/webrtc.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/webrtc/agc
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

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

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

## 目标：稳定的响度

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

  难点在“**快慢的拿捏**”：调得太快，会把每个字的自然强弱都抹平（听着不自然、像机器人）；调得太慢，音量骤变时来不及反应（先震一下 / 先没声）。所以 AGC 对“骤增”反应快（防削顶），对“缓变”反应慢（保自然）——又是一个[快慢不对称](https://daiw.org/manual/webrtc/delay-based-bwe)的权衡。
</Callout>

## 两级：模拟增益 + 数字增益

WebRTC 的 AGC 分两级（对应 AGC1 与 AGC2 的演进）：

<Callout type="info">
  **模拟增益调“麦克风的采集音量”（在数字化之前），数字增益调“已采集音频的数值”（在数字化之后）——两级配合，既充分利用硬件动态范围，又精细控制。**

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

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

## 别把噪声也放大

AGC 有个要小心的副作用，和[链条顺序](https://daiw.org/manual/webrtc/apm-overview)有关：

<Callout type="warn">
  **AGC 放大音量时，会连**噪声一起放大**——所以它通常放在[降噪（NS）](https://daiw.org/manual/webrtc/ns-vad)之后，先把噪声去掉，再放大干净的人声。** 想象：你在安静环境小声说话，AGC 要放大你的声音——但如果这时还有背景噪声没除，放大人声的同时噪声也被放大了，对方听到的是“放大的人声 + 放大的噪声”，反而更吵。所以处理链[顺序讲究](https://daiw.org/manual/webrtc/apm-overview)：[AEC 消回声](https://daiw.org/manual/webrtc/aec3-internals) → [NS 降噪](https://daiw.org/manual/webrtc/ns-vad) → **AGC 增益**——先把回声、噪声都清干净，最后才放大**已经干净**的信号。这个顺序不是随意的，而是“别放大你不想要的东西”这个朴素原则的体现。

  AGC 还常用[VAD](https://daiw.org/manual/webrtc/ns-vad)辅助：只在**有人说话**时调增益（别在静音期把背景噪声当信号放大）。所以 [VAD](https://daiw.org/manual/webrtc/ns-vad) 是 AGC 的好帮手。
</Callout>

## 小结与下一章

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

链条还剩降噪和语音检测。下一章一起讲。👉 [降噪与语音检测](https://daiw.org/manual/webrtc/ns-vad)。

## 参考资料

- [1] libwebrtc 源码.`modules/audio_processing/agc/`、`agc2/`（`adaptive_agc.h`、`gain_controller2.h`）。
- [2] 自动增益控制 —— 音频动态范围处理。
- [3] 关联[APM 处理链顺序](https://daiw.org/manual/webrtc/apm-overview)。
