エフェクターの簡単な実装例 – オーバードライブ・ディストーション

オーバードライブ・ディストーションの実装例

オーバードライブ・ディストーションとは不要な低音域をカットしたうえで入力信号を増幅し、振幅の最大値を超えたものをクリッピングすることで音を歪ませるエフェクターです。
一般的にオーバードライブ・ディストーションの区別は増幅量の大小だけですので、ここでは一緒に扱います。
※ファズやオーバードライブ、ディストーションは本やサイトによって説明が変わるようですが、ここでは入力信号にフィルタを掛け増幅し、クリッピングしたものをオーバードライブ・ディストーションとします。

パラメーターとして下記がよく利用されます。

パラメーター 意味 だいたいの範囲
ゲイン 入力信号の増幅量 10~300倍程度(dB換算で20dB~50dB程度)
ボリューム 出力信号の音量 0~1の範囲

実装は入力信号にフィルタを掛け、ゲインで増幅(乗算)したあと振幅の最大値・最小値を超えたものをそれぞれ最大値・最小値に合わせます。
フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】

上記はあくまで実装例です。
クリッピングする値を非対称(例:-1.0~0.5 等)にしたり、上記if文の代わりに飽和関数(tanh関数など)を適用しても面白いかもしれません。

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp

エフェクターの簡単な実装例 – ファズ

ファズの実装例

ファズとは入力信号を増幅し、振幅の最大値を超えたものをクリッピングすることで音を歪ませるエフェクターです。
※ファズやオーバードライブ、ディストーションは本やサイトによって説明が変わるようですが、ここでは単純に入力信号を増幅し、クリッピングしたものをファズとします。

パラメーターとして下記がよく利用されます。

パラメーター 意味 だいたいの範囲
ゲイン 入力信号の増幅量 10~300倍程度(dB換算で20dB~50dB程度)
ボリューム 出力信号の音量 0~1の範囲

実装は入力信号にゲインを掛け、振幅の最大値・最小値を超えたものをそれぞれ最大値・最小値に合わせます。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】

上記はあくまで実装例です。
クリッピングする値を非対称(例:-1.0~0.5 等)にしたり、上記if文の代わりに飽和関数(tanh関数など)を適用しても面白いかもしれません。

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp

エフェクターの簡単な実装例 – 3バンドイコライザー

3バンドイコライザーの実装例

3バンドイコライザーとは入力音声の低音域、中音域、高音域を増幅するエフェクターです。

パラメーターとして下記がよく利用されます。

パラメーター 意味 だいたいの範囲
低音周波数 増幅する低音域の周波数 50Hz~1kHz程度
低音ゲイン 低音域の増幅量 -15~15dB
中周波数 増幅する中音域の周波数 500Hz~4kHz程度
中音ゲイン 中音域の増幅量 -15~15dB
高周波数 増幅する高音域の周波数 1kHz~15kHz程度
高音ゲイン 高音域の増幅量 -15~15dB

実装は入力信号をローシェルフフィルタ、ピーキングフィルタ、ハイシェルフフィルタの順に通すだけです。

フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp

エフェクターの簡単な実装例 – オートワウ

オートワウの実装例

オートワウとはテンポに合わせてカットオフ周波数を変化させたフィルターを入力信号に適用するエフェクターです。
※オートワウは本やサイトによって説明が変わるようですが、ここではテンポに合わせてかかるワウをオートワウとすることとします。

パラメーターとして下記がよく利用されます。

パラメーター 意味 だいたいの範囲
テンポ ワウの周期 25~300BPM程度
深さ ワウの深さ(周波数変化量) 0~5程度
カットオフ周波数 ワウで使用するフィルターのカットオフ周波数 200~5kHz程度

実装はカットオフ周波数をテンポに合わせて変化させたバンドパスフィルターを入力信号にかけます。

フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】

上記はあくまで実装例です。
バンドパスフィルタをローパスフィルタに変えたり、cos関数をノコギリ状の波形など 他の周期関数にすることでかかり方が変わってきます。
また、フィルタをかける前やかけた後に増幅したり飽和関数(tanh関数など)を適用してブーストしてみても面白いかもしれません。

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp

エフェクターの簡単な実装例 – フェイザー

フェイザーの実装例

フェイザーとはオールパスフィルターを使って音を揺らすエフェクターです。

パラメーターとして下記がよく利用されます。

パラメーター 意味 だいたいの範囲
干渉 フェイザーのかかり具合 0.0~1.0の間
レート 揺らぎの間隔・周期 0Hz~16Hz程度
深さ 揺らぎの深さ 0~5程度
周波数 オールパスフィルターの周波数 200~1kHz程度

実装はまず、カットオフ周波数を一定周期で揺らしたオールパスフィルターを入力信号にかけます。
次に元の入力信号とオールパスフィルタをかけた入力信号を混ぜ合わせて出力します。

フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】

上記はあくまで実装例ですので、オールパスフィルタの数や揺らし方等を工夫する余地があります。
また、フィードバックとしてtmpL/RやoutL/Rを次の入力信号に加算させることで音も変わります。

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp

エフェクターの簡単な実装例 – 2バンドイコライザー

2バンドイコライザーの実装例

2バンドイコライザーとは入力音声の低音域と高音域を増幅するエフェクターです。

パラメーターとして下記がよく利用されます。

パラメーター 意味 だいたいの範囲
低音周波数 増幅する低音域の周波数 50Hz~1kHz程度
低音ゲイン 低音域の増幅量 -15~15dB
高周波数 増幅する高音域の周波数 50Hz~1kHz程度
高音ゲイン 高音域の増幅量 -15~15dB

実装は入力信号をローシェルフフィルタとハイシェルフフィルタに通すだけです。

フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp