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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
奈々氏

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

#1

投稿記事 by 奈々氏 » 12年前

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ファイルに対応させることが出来るのでしょうか?
小さなことでもいいので、アドバイスをください!

アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

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

#2

投稿記事 by usao » 12年前

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

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 12年前

周波数を取り出すとありますが、周波数スペクトラムが取り出されるだけですので各周波数成分の強さが分かる事になります。
普通の音は複数の周波数が混じった音ですので、単音の音源以外では周波数を特定する事はかなり困難です。
※ スペクトラム中での一番大きな音を、この音の周波数をすることは可能は可能ですが、和音なら2つ以上の同じような強さの周波数の違う音が発生します。
そういう知識面は大丈夫ですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る