というビデオをYouTubeで見かけたので視聴してみました。少し前にピッチシフタを実装しましたし、最近はピッチシフタとは似て非なる「周波数シフタ」に興味を惹かれたりもしていたましたので、他にも方法があるのかなと気になりました。
山下シンセの山下さんの新方式「周波数」シフタ、飛び道具的エフェクタとして面白そう。 https://t.co/1PizBLt2Ex
— boochowp (@boochowp) May 12, 2024
ピッチシフタを作る方法ですが、ちょっと考えると
・先日実装したようなバッファを利用するタイムストレッチ/タイムラプス
・FFTして周波数をずらして逆FFT
はすぐ思いつきますね。あとは、FFTの代わりにボコーダを応用するくらいかな・・・と調べてみると、ピッチシフトの方式はすでにいろいろ整理されていて、Wikipediaもだいぶ参考になりました。
また、ライブラリとしてはSoundTouchというOSSの実装が割と広く使われているようです。これを利用しているソフトウェアにはAudacityやFirefoxなどの名前も挙がっています。
表題のビデオですが、これはADC(Audio Developer Conference)というカンファレンスでの講演のようです。(このカンファレンスはFocusriteやAvid、Arturiaなどおなじみのベンダが協賛しており、他にもいろいろ面白そうな講演があります。)
また、コードがこちらで公開されています。
前半はグレインを使う手法やFFTを使う手法の話なのですが、後半30分を過ぎたあたりからだんだん難しくなってきます。基本的にはフェイズ・ボコーダを使う手法で、短時間の音声信号に窓関数を掛けてFFTし、周波数をシフトして逆FFTするものです。
FFT→逆FFTするとき、異なる周波数帯で位相が異なると、意図しないキャンセリングが起こるので、どうやって位相を合わせるか?といった話をしているようです。FFT系の方式だと、パーカッションのようなノイズ系の音を解析・合成するのはちょっとハードル高そうですし、周波数によって位相がずれてしまうとアタック成分が崩れてしまいそうな感じはしますね。
上のリンク先のコードをダウンロードして1.5倍のピッチ変換をさせてみましたが、結果はなかなかのもので、ノイズの音色は微妙に変化するものの楽器音はクリアですしアタック成分も失われていません。
以下は変換後のファイルです。(元の曲はHoward Jonesの”Equality”という曲です。)
ちなみにPitchyで同じピッチ変換をすると以下のような感じです。グレイン(2048サンプルに設定)の影響が出てしまっていますし、エイリアシングの影響か、S/Nが良くないですね。もともと、こういった楽曲の変換というよりは、単音の変換に向いた方式だと思います。
コメント