エフェクターの簡単な実装例 – ピッチシフター

ピッチシフターの実装例

ピッチシフターは入力信号に音程を高くしたり、低くしたりするエフェクターです。

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

パラメーター 意味 だいたいの範囲
ミックスレベル ピッチシフターのかかり具合 0~1の間
ピッチ どれだけ音を高く(低く)するか -12~12半音(-1~1オクターブ)程度

実装は読み込み速度を速めたディレイ信号を入力信号に加えて出力します。
ディレイ信号の読み込み速度を速めることで音程が変わります。

ディレイ信号はリングバッファを使用して保存します。リングバッファは「リングバッファについて」で作成したものを使用しています。
また、読み込み速度を変更した際、整数値にならない場合があるためサンプルとサンプルの間の位置の値を線形補間などを用いて割り出す必要があります。
線形補間の詳細は省略いたします。

あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】
■線形補間の実装

■エフェクターの実装

上記はあくまで実装例です。
読み込み位置(上記の変数pos)が0になる時(42行目)に音声信号が不連続となりノイズが入ります。
クロスフェード等を利用して音声信号を滑らかにつなぐことでノイズは改善することができます。

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

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


コメントを残す