MakeNoise09 - 压缩 Compression

in #cn6 years ago

在音频处理中,压缩可以指数据压缩格式(如 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 面板中调整压缩的参数:

[Ableton]compressor.jpg

  • 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 调整和补充了一些注释:

[Max]compression.png

压缩器主要有三部分构成:参数、压缩流程和处理算法。下面分别看看每一部分的实现。

可控制的参数主要有 Input gain, Threshold, Ratio, Attack time, Release time,之前我们在 Ableton Live 的 Compressor 面板里都看到了:

[Max]compression-para.png

压缩处理的主流程:先实时监测 input level,把信号从 amplitude 转换为 dB,然后跟阈值参数比较,判断是否进行压缩:

[Max]compression-compressor.png

如果达到阈值后开始压缩,需要降低的 gain 由以下部分计算。公式是 (Threshold - Level) * (1 - 1/ratio)

[Max]compression-math.png

然后将计算值再换算为 amplitude,输出到 compression 的主流程中,最后再加一道 rampsmooth~ 来平滑 gain 的变化。

Ref

Sort:  

@kidult00, 伦家就觉得你写得不错嘛~~~ img

@kidult00, 生活,就是在平凡中变得不平凡!

对了,漂漂女生节貌似快到了,我是不是要给 @cn-cutie.pie 可可 准备一下礼物了?

你好吗?众所周知cn区两大众筹互助平台,@cnbuddy@justyy ,股东,要不要了解一下?如果不想再收到我的留言,请回复“取消”。