コンプレッサーの実装例
コンプレッサーとは入力音声の音圧に応じて音量を調整するエフェクターです。
パラメーターとして下記がよく利用されます。
パラメーター | 意味 | だいたいの範囲 |
---|---|---|
スレッショルド | 圧縮が始まる音圧 | 0.1~1.0程度(dBで計算する場合もある) |
レシオ | 圧縮する割合 | 2.0~10.0程度(例えば2.0の場合、圧縮比率2:1でスレッショルドを超えた分が1/2になる。)/td> |
音量 | 最終的な音量 | 1.0~3.0倍程度(dBで計算する場合もある) |
実装では下記のような処理を行います。
- 入力信号に応じた音圧を検知。
- 検知した音圧に応じて音量(ゲイン)を計算。
- 入力信号に計算した音量(ゲイン)を
音圧を検知は「入力信号の絶対値をとったものにローパスフィルタを通す」ことでできます。
(他の方法もありますが、ここではこの方法を利用しています。)
フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。
【実装イメージ】
上記はあくまで実装例です。
今回は急激に音量(ゲイン)が変化しないようにローパスフィルタを使用していますが、アタックやリリースを持ったエンベロープを使用することもあります。
また、音圧検知にRMS(二乗平均平方根)を使用することもあります。
質問はコメント欄や掲示板、Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp