目次
1.はじめに
2.概要
3.詳細
4.結果
5.やってみての感想
はじめに
Youtubeで音の錯覚がバズっていたのを見かけたので、自分でも作ってみたいなと思い実行に至った。
※音の錯覚とは、
MIDIだけで相当数の音を組み合わせることで、元の音声を再現するもの。
概要
フーリエ変換をすることで、元の波形を周波数とその位相に変換することができます。その原理を利用して、MIDIで設定する楽器を正弦波にし、MIDIだけで人のボーカルも含めた曲を再生できるようにしました。(フーリエ逆変換相当の部分をMIDIで行う。)
原理としては、Mp3に近いと思います。
詳細
Windows標準搭載のMIDI音源であるMicrosoft GS Wavetable SW Synthは、楽器として矩形波があるのですが、正弦波はなぜか対応していなかったため、別のMIDI音源(SGM-V2.01)に変更することで対応させました。
1.フーリエ変換する周期の設定
2.連続で変化する周波数成分の対応
3.音階に相当する周波数のみのフーリエ変換で十分なのか
4.位相はどうするか
1.については、ある周波数fでフーリエ変換するとき、その3周期分の区間ごとに設定しました。周期ごとにしておくことで窓関数の設定が必須でなくなりました。
2.については、MIDIの音量の段階が127段階あり、閾値を設定しないとノートの数が非常に多くなってしまい処理落ちしてしまうため、10段階分以上変化したときノートの音量を変更する処理にしています。
3.については、音階相当の周波数のみのフーリエで十分人の声などは聴くことができましたが、音質で言うとラジオ相当です。もう少し精度を上げたいと考えたので、Pitch Bend機能を使用し、微分音(6分音)を導入しました。
※微分音は、半音よりさらに細かく分けられた音程を指す。
4.については、MIDIの分解能およびテンポを最大に設定しても高周波の位相を再現できないため、断念しました。
結果
このMIDIデータは約70MBであり、Dominoで読み込むのに約2分かかりました。
やってみての感想
想定外なレベルで精度よく再現できたと思います。ある楽曲のボーカルを分離しそれだけMIDIファイル化し、他のMIDIファイルとマージするという応用もあると思うので、可能性は感じています。