ページ 11

WAVファイルに高速フーリエ変換をして周波数を取り出したい

Posted: 2013年11月21日(木) 17:40
by 奈々氏
Visual C++で、WAVファイルを読み込み、フーリエ変換をしてそのファイルの音の周波数を取り出すプログラムを作っています。
このサイト( http://hp.vector.co.jp/authors/VA046927/acf/acf.html )の、このソース( http://hp.vector.co.jp/authors/VA046927 ... f_time.cpp )を参考にしながら作っています。

しかし、このソースでは、ビット/サンプルが32bit、モノラルのWAVファイルでしか対応していません。
私は8bit、もしくは16bitのWAVファイルをフーリエ変換したいと思っています。

どこをどのようにしたら8ビット、16bitのWAVファイルに対応させることが出来るのでしょうか?
小さなことでもいいので、アドバイスをください!

Re: WAVファイルに高速フーリエ変換をして周波数を取り出したい

Posted: 2013年11月21日(木) 18:05
by usao
(1)WAVファイルを読み込む部分
(2)フーリエ変換をしてどうの,という処理の部分
に分けて,
WAVファイルのフォーマットが異なることの影響が
(2)側の処理部コードにあるのか無いのかをチェックするとよいでしょう.

影響が無いのなら(1)だけを直せばOKなので
WAVファイルのフォーマットとかを調べて,(2)の処理に渡せる形のデータとして読み込むようにする.

後段の(2)のコードもそのまま使えないようなら影響範囲を調べて直さないとダメですね.
(その場合,後段の処理内容を自力でインプリメントできるのであれば
 そのコードは参考程度にとどめて,自前で新たに書いた方が楽かも?)

Re: WAVファイルに高速フーリエ変換をして周波数を取り出したい

Posted: 2013年11月21日(木) 22:08
by softya(ソフト屋)
周波数を取り出すとありますが、周波数スペクトラムが取り出されるだけですので各周波数成分の強さが分かる事になります。
普通の音は複数の周波数が混じった音ですので、単音の音源以外では周波数を特定する事はかなり困難です。
※ スペクトラム中での一番大きな音を、この音の周波数をすることは可能は可能ですが、和音なら2つ以上の同じような強さの周波数の違う音が発生します。
そういう知識面は大丈夫ですか?