- MakeNoise01 - 声音是什么?
- MakeNoise02 - 频率和音高
- MakeNoise03 - 振幅/响度/音量/增益 大乱斗
- MakeNoise04 - 波形和相位
- MakeNoise05 - Envelope 包络(ADSR)
- MakeNoise06 - 音色和均衡器(EQ)
- MakeNoise07 - 音频的分辨率 Sample rate/Bit depth
- MakeNoise08 - 振荡器和滤波器
在音频处理中,压缩可以指数据压缩格式(如 mp3 格式),如何压缩可以减少文件大小。本文学习的则是动态范围(Dynamic range)的压缩。

EQ(均衡器) 和 Compressor(压缩器)是 Sound engineering 里面最基础最常用的效果器。压缩器是动态处理器的一种。动态处理器最简单的形式就像一个自动的音量控制器(gain control),当音量太大时减低音量,当音量太小时调高音量。
想象一下,你家的电视有两个不同的频道。一个频道总是很小声,需要用遥控器调整到 20 才听得清楚。另外一个频道却很大声,必需用遥控器调到 12 才不会吵到邻居。
Compressor 的作用,就相当于每次切换这两个频道的时候,自动帮你调整声音大小,使之保持在合适的范围。

在音频处理中,压缩的目的是让乐器、人声或录音的动态范围保持在我们想要的范围:
- 控制动态性能
- 填补漏洞
- 声音包络控制/塑形
- 调控音色
- 调整峰值和失真
- Sidechain compression(ducking/dipping/pumping)

更直观来说,压缩处理可以:
- 使音频的动态范围更平整(even out)
- 融合两种乐器的声音(如bass 和底鼓),听起来更为整体
- 提亮音量比较小的声音
- 控制太响的声音
- 使声音获得特定的音色效果
- 创造特别的声音
所有的动态处理器基本上都是指定一个开始工作的信号电平,然后对信号做出某种形式动态变化。
不同压缩方法对 dynamic range 的影响:

在 MakeNoise 06 中我们学习了均衡器(EQ)。那么在处理音频时,应该是先调 EQ 还是先调 Compressor 呢?
Placing an EQ before a compressor can have the effect of exaggerating the applied EQ. Placing an EQ after a compressor you can often attain more audible results with less EQ, producing results that often do not “sound EQ’s EQ” – Chuck Zwicky
一般来说,EQ 在 Compressor 之前,主要为了调整 Compressor 的反应;EQ 在 Compressor 之后,是为了调整波形达到更好的混音效果。当然也要取决于声音素材和想要的效果。
在 Ableton Live 里压缩不同的音轨
进入 Ableton Live,在效果库里面找到 Compressor,拖到音轨上,就看到 Compressor 面板中调整压缩的参数:

- Threshold/Input:控制何时触发压缩
- Gain reduction (GR):有多少 dynamic range 被去掉
- Output/Makeup gain:补偿因压缩导致的音量减小,设定输出的最高电平
- Attack:当信号达到阈值时,压缩器在多少时间内开始处理。Fast attcak 0.01~10 ms, slow attack > 50 ms
- Release:当压缩时,原始信号被保留多久。通常以音频的 tempo 为基准
- Ratio:以输入为基础,按比例设定输出值
- Link:连接双声道/单声道压缩器到另外一个单声道,形成立体效果
- Side chain:使用信号而不是主输入来控制压缩
- Bypass:压缩过滤
如何调整不同乐器音轨的压缩器,请看下面视频里的详细讲解:
Compressor in Ableton Live_腾讯视频
用 Max/MSP 实现 Compressor
更进一步,我们到 MSP 里拆解 Compressor 是如何实现的。
官方文档里提供了详细的说明和例子。00 调整和补充了一些注释:
压缩器主要有三部分构成:参数、压缩流程和处理算法。下面分别看看每一部分的实现。
可控制的参数主要有 Input gain, Threshold, Ratio, Attack time, Release time,之前我们在 Ableton Live 的 Compressor 面板里都看到了:
压缩处理的主流程:先实时监测 input level,把信号从 amplitude 转换为 dB,然后跟阈值参数比较,判断是否进行压缩:
如果达到阈值后开始压缩,需要降低的 gain 由以下部分计算。公式是 (Threshold - Level) * (1 - 1/ratio)
:
然后将计算值再换算为 amplitude,输出到 compression 的主流程中,最后再加一道 rampsmooth~
来平滑 gain 的变化。