2

私の質問の短いバージョン:

オーディオ サンプルの配列 (Int16 など) から、AForge などの一般的な FFT ライブラリで使用される複雑な構造体に変換するにはどうすればよいですか?

私の質問の長いバージョン:

私はオーディオ処理が初めてで、音楽のオーディオを分析したいと考えています (ビート、テンポなどの検索)。これを読んで数日後、高速フーリエ変換(FFT)アルゴリズムは正しい方向への一歩のようです.

アルゴリズムをゼロから実装する必要がないように、いくつかのオープン ソース ライブラリ、Exocortex と AForge.net をダウンロードしました。

オーディオをメモリ バッファにデコードしています。16 ビット 48kHz オーディオ ステレオ トラックの各サイクルで、48000 バイトまたは 24000 サンプルを取得します。これらは現在、short の配列 (Int16) にコピーされています。ここで、配列を複雑な構造体に変換する必要があります (AForge の場合)。これは、「実数」と「虚数」の double 値で順番に初期化されます。しかし、これらは正確には何であり、配列からこれら 2 つの double 値に移動するにはどうすればよいでしょうか? また、渡す前に左右のチャンネルを分割する必要がありますか?

残念ながら、コードとして提示されていない限り、数式を読むのは苦手です。私がこれまでに訪れたほぼすべてのサイトで、アルゴリズムを説明するのに役立つギリシャ記号と複雑な数式がすぐに出てきます。その結果、すぐに翻訳に迷います。私を信じてください、私は「ダミーのためのFFTアルゴリズム」を見つけるのに苦労しました。;)

モデレーターへの注意: これは、「オーディオ サンプルをバイトから複素数に変換する」の複製ではありませんか? 質問は似ていますが。

4

1 に答える 1

3

チャンネルを分割して別々に処理するか、単一のモノ チャンネルに平均化する必要があります。これは、最終的に何を達成しようとしているかによって異なります。

データ型の変換に関しては、すべての実数は 0 の「虚数」部分を持つ複素数でもあるため、変換は基本的に、サンプルを使用して複素数の配列を作成することです (できれば正規化 - この場合は 32768 で除算するため、実部の範囲 [-1,+1]) に値があり、虚部の値がゼロです。

于 2012-08-01T16:04:35.207 に答える