[実行前に使い方を見てください] このプログラムはリアルタイムで音声を解析し、sin波を組み合わせて再合成した音声を再生するものです。 【使い方】 1. 以下のURLに行く(自作サイト) https://1a291109a6.github.io/sound-to-text-converter/ 2. 読み込みたい音声ファイル(.mp3)を選択して待つ 3. テキストファイル(.txt)がダウンロードされる 4. TurboWarpでこのプログラムを開く https://turbowarp.org/1202752464/ 5. 「FFT: wavedata」リストを右クリックして「読み込み」を押す 6. ダウンロードしたテキストファイル(.txt)を選択 7. 旗を押して再生 【パラメータの調整方法】 ・speedで再生速度を変更 ・pitchで音の高さを変更 ・tで再生位置の変更 ・20Hz, 200Hz, 2000Hzで各周波数域の音の大きさを変更(EQ) 【特殊パラメータの調整方法】 特殊パラメータは調整後、旗を押してから適用されます。 大雑把に ・Q_Valueで周波数と時間の正確さのバランスを変更 ・FFT_sizeで正確さを変更 詳細に ・Q_ValueでCQTにおけるQ値を変更(小さいと不協和音、大きいと音が遠くなる) ・FFT_sizeでFFTの窓のサイズ2^nのnを変更(大きくするほど計算量が多い)
実質的に音の錯覚のピアノで声を再現するやつと同じです。 【技術的詳細】 CQT(Constant-Q transform)を実装しました。高速化のためにFFT(fast Fourier transform)も実装しています。音の波形からどんな高さの音が含まれているか(周波数)を解析するにはフーリエ変換を使います。フーリエ変換にはDFT、FFTとありますが、高速なのでよくFFTが使われます。しかし、FFTで解析すると問題があります。それは、人間の耳と相性が悪いという問題です。FFTだと等間隔に周波数を解析しますが、人間の耳は対数スケールで音を解析する仕組みになっています。例えば、ドの音より一つ高いドの音は周波数が2倍ですが、同じドの音に聞こえます。(倍の高さの音に聞こえません)そこでこの問題を解消するのがCQTです。CQTでは、人間の耳のように対数スケールで周波数を解析します。しかし、CQTはそのまま計算すると非常に時間がかかります。そこで、FFTを利用してCQTを高速化する手法があります。分析したい信号とCQT用のフィルター(窓関数)をそれぞれFFTで周波数領域のデータに変換し、それらを掛け合わせた後、逆FFTで時間領域に戻すことで、効率的にCQTの結果が得られます。 【参考】 https://www.wizard-notes.com/entry/music-analysis/constant-q-transform