オーバードライブ・ディストーションの実装例
オーバードライブ・ディストーションとは不要な低音域をカットしたうえで入力信号を増幅し、振幅の最大値を超えたものをクリッピングすることで音を歪ませるエフェクターです。
一般的にオーバードライブ・ディストーションの区別は増幅量の大小だけですので、ここでは一緒に扱います。
※ファズやオーバードライブ、ディストーションは本やサイトによって説明が変わるようですが、ここでは入力信号にフィルタを掛け増幅し、クリッピングしたものをオーバードライブ・ディストーションとします。
パラメーターとして下記がよく利用されます。
パラメーター | 意味 | だいたいの範囲 |
---|---|---|
ゲイン | 入力信号の増幅量 | 10~300倍程度(dB換算で20dB~50dB程度) |
ボリューム | 出力信号の音量 | 0~1の範囲 |
実装は入力信号にフィルタを掛け、ゲインで増幅(乗算)したあと振幅の最大値・最小値を超えたものをそれぞれ最大値・最小値に合わせます。
フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。
【実装イメージ】
上記はあくまで実装例です。
クリッピングする値を非対称(例:-1.0~0.5 等)にしたり、上記if文の代わりに飽和関数(tanh関数など)を適用しても面白いかもしれません。
質問はコメント欄や掲示板、Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp