前提・実現したいこと
C#でマイク入力波形から音階を調べるプログラムを作ろうとしています。
声や音を拾い、たとえば440HzだったらA4と表示するようなものです。
音声や数学の知識が乏しいため、ググって見つけたサンプルを参考に見よう見まねでプログラムを書きました。
波形からFFT変換するところまでは分かったのですが、フーリエ変換関数Fourier.Forwardの結果で返ってきたComplex配列を調べて周波数に変換する式が分からないといった状況です。
数学から分からない状態で作っていることを恥じている状態です。初めての質問なので不備があるかと思いますがよろしくお願いいたします。
該当のソースコード
C#
1 // wave[]に入っている波形をComplex型に変換 2 Complex[] fftBuff = new Complex[wave.Count]; 3 for (int i = 0; i < wave.Count; i++) 4 { 5 fftBuff[i] = new Complex((double)wave[i], 0); 6 } 7 Fourier.Forward(fftBuff, FourierOptions.Matlab); // FFT 8 double max = 0; 9 int hz = 0; 10 // 最大振幅を調べる 11 for (int i = 0; i < fftBuff.Length; i++) 12 { 13 var m = Mathf.Sqrt((float)(fftBuff[i].Real * fftBuff[i].Real + fftBuff[i].Imaginary * fftBuff[i].Imaginary)); 14 if (m > max) 15 { 16 max = m; 17 hz = i; 18 } 19 } 20 // TODO: hzから周波数を求める
参考にしたもの
あなたの回答
tips
プレビュー