2010/11/15

コンプレッサーについて Javaで自作

以前HPで書いた記事を再編集してみた。


コンプレッサーの役目

音量を調整するためのエフェクトである。音量差のバラツキがある録音において、大きな音を小さく抑えて、小さな音を大きくすることで、音量差を小さくし聴きやすくする。

基本原理
仕組みとしては基本的に2段階で調整している。まず大きな音だけを小さくする。次に全体の音量を上げる。こうすることで音量差を小さくし、適正レベルにすることができる。

音量差を少なくすることは良いことか?
実は疑問だった。バンドサウンドとボーカルを考えた場合、ボーカルに音量差があったとする。そうすると小さい声の部分はバンドサウンドに埋もれてしまう可能性がある。これを解決するには、バンドサウンドが小さい声に対応するか、ボーカルの音量をある程度以上保つことになる。でも実際には、演奏で音量のコントロールが絶妙に行えるわけでない。その不足分をコンプレッサーで補うというイメージ。音量がある程度の範囲に納まってくれれば聴きやすくなる。あくまでもコンプレッサーは補正程度の扱いで、これに頼っては不自然になってしまう。


コンプレッサーの操作系 Kjaerhus Audio「Classic Compressor」

フリーのVSTプラグインのClassic Compressorを例に、コンプの標準的なつまみを紹介。これさえ理解すればコンプの基本もばっちり?

Threshold (スレッショルド 閾値) -40~0dB
ここで指定した値を基準にして、大きな音を小さく圧縮する。0dBが録音できる最大音量で、-40dBは小さい音になる。Audacityなどで波形をdB表示にして確認しながら適切なスレッショルドを決めるとよいと思う。

Ratio (レシオ) 1:1~∞:1
スレッショルド以上の大きな音を、どれぐらい小さくするかの割合。∞:1 にすればスレッショルドの以上の音をスパッと切るイメージ。 1:1なら全く変化がないことを意味する。

KNEE (ニー) HARD~SOFT
スレッショルド以上になったときに、急激に変化させるか、緩やかに変化させるかを調整する。そのカーブを「ひざ(ニー)」に例えている。

Attack Time (アタックタイム) 0.5~500msec
スレッショルド以上になってから何秒後に音を小さくするかを決定する。短くするとアタック音も圧縮対象になるが、長くすると、アタックの音はそのままになる。

Release Time (リリースタイム) 0.01~10sec
スレッショルド以下に戻った時に、何秒で圧縮解除するかを決定する。

OUTPUT (アウトプット) 0~40dB
上記で圧縮して小さくなった音を適度な音量に調整する。0だと大きな音を小さくしただけの状態なので全体の音量は下がってしまう。これを上げれば、全体の音量も上がるが、同時に存在するノイズも増幅される。

上記つまみをよく理解して使えば、それなりの効果を得ることができるが、実はコンプによって出てくる音は様々。コンプは個性が出やすいようだ。上記のClassic Compressorは、どちらかというと控えめな効き方をする。数値通りに動作するというよりは、どんな設定でもそれなりに使える音になるという印象。音を聴きながら耳で判断して使えばよいと思う。

Classicシリーズをリリースしている会社 Kjaerhus Audio のホームページがリンク切れになったようだ。クラシックシリーズは好きなので残念なことだ。


slim slow slider presents 「MonauralCompressor」

Classic Compressorが普通にダウンロードできなくなったので、国産でフリーのMonauralCompressorを試してみる。 これは設定に忠実な音が出る。 またオーソドックスな操作系を持っているので、Classic Compressorと同じように扱える。 個人的に高機能で複雑なものよりも、基本に忠実なシンプルなものが好き。 そういう意味で、このMonauralCompressorはとてもいいかもしれない。
http://www.geocities.jp/webmaster_of_sss/vst/index.html



上記2つのコンプレッサーを実際に使って確認してみる

主にRatio、Knee、AttackTime、ReleaseTimeが理解しにくいのでサンプルを見ながら確認。波形編集にはAudacityを利用している。波形はdB表示に設定。

Ratio と KNEE チェック

Ratio ∞:1 から比較。スレッショルドを超えたら音がつぶれるかどうかをオリジナルと比較しながら確認してみる。当然他のノブも適切に調整する必要があるが、極端な例なので理解できると思う。KNEEは微妙なのでHARDかSOFTに振り切って使っている。

Classic Compressor
AttackTimeは0.5で最短。ReleaseTimeも最短。OUTPUTは0(増幅してしまっては比較も出来ないので)
Ratio ∞:1 、KNEE HARD、 スレッショルド-12dB
ブルーがオリジナルで、ピンクが適用後。影響を受けたのはかなり音量が大きい部分のみで-12dBでスパッと切れるわけではないようだ。

MonauralCompressor
ピンク Ratio ∞:1、 KNEE HARD、 スレッショルドを-12dB
水色 Ratio ∞:1、 KNEE SOFT、 スレッショルドを-12dB
素直な効き。ちゃんと-12dBでぶった切ってくれる。KNEEをSOFTにすれば、カーブがなだらかになってくれる。


Attack Timeのチェック

Classic Compressor
スレッショルドを-12dB、Ratio ∞:1、 KNEE HARD、Attack Time100ms、Release Time10ms、Gain0
頭を削らない設定だが、ちょっと地味な効き。でも設定はこんなもんか・・・サンプルが悪かった。


MonauralCompressor
スレッショルドを-12dB、Ratio ∞:1、 KNEE HARD、Attack Time100ms、Release Time10ms、Gain0
スレッショルドを超えてから100ms後に圧縮することになる。横軸の7.0~8.0は秒数なので、それを目安にして下を見ると、100ms?という気がしなくもない。やっぱりサンプルが悪い。

Release Time のチェック

Classic Compressor
スレッショルドを-12dB、Ratio ∞:1、 KNEE HARD、Attack Time0.1ms、Release Time1000ms、Gain0
こんな感じ。やっぱり効き具合が地味。

MonauralCompressor
スレッショルドを-12dB、Ratio ∞:1、 KNEE HARD、Attack Time0.1ms、Release Time1000ms、Gain0
1秒間のリリースタイムを取ってみた。ちょうど1秒間ぐらいかけて元の波形に復帰しようとしているのが分かる。素直だ。


極端な例を示してみたが、設定は同じでもコンプによって出てくる音はさまざま。コンプの個性を知ってから利用しないと、戸惑うことにもなるので注意が必要。

Classic Compressorのよいところは、原音のバランスをなるべく崩さないようにしている点だ。無理な設定をしても、あまり崩れない。細かなことはあまり考えず音で判断すればいいという感じだ。スレッショルドはやや深めで使うという感じかな。原理をちゃんと理解していなくても扱いやすいと言えるかもしれない。

MonauralCompressorの素直な効き具合は魅力。設定値と実際が一致するのは重要なことだ。ただしコンプを理解していないと扱いきれないだろう。原理をしっかり理解している人向きという印象だ。

上記は2010年はじめごろに書いた記事で、その後もっと理屈通りに動作してほしいと思って、自らコンプを作ってみた。通常コンプって原理的にAttack Timeを0にすることが出来なくて、短い鋭いピーク(ノイズ)を処理することが困難。普通は違うエフェクトで処理するのだが、あえてAttack Time 0を利用できる非リアルタイムコンプを作ったのが2010年6月。詳細はJavaのコーナーに書いてあるので、興味がある人はこっちのページを読んでみて。