どれどれ。Javaクラスや信号処理に対するJavaクラスのサポートについては知りませんが、いくつかガイドラインを示します。言語での実装の特定の詳細は、あなたが理解する必要があります。
オーディオファイルに対して何らかの処理を行うには、「生」のデータが必要です。つまり、オーディオファイルに圧縮されていないオーディオサンプルが含まれています。たとえば、WAV形式は、通常、16ビットの符号付き2の補数でサンプルを持っています。
コンピューターを使用してオフライン処理を行う場合は、その値をdoubleにキャストすることをお勧めします(今日のほとんどのプロセッサーでは64ビット浮動小数点数を意味します)。
したがって、ファイルからの連続した二重の数値のストリームが得られます。次に、連続データを処理する方法を定義する必要があります。標準的で非常に広く使用されている方法は、循環バッファーを使用することです(オフラインであっても、コードを効率的にしたいと思い、配列としてファイル全体をメモリにロードすることは最善の解決策ではありません)。それか、通常のバッファのどちらかを選択できます。バッファーの長さは2の累乗でなければなりません(Cooley-Tukey radix-2アルゴリズムの効率を高めてください)。
次に、実際のFFTを実行する必要があります。これは、FFT行列によるバッファーの乗算(数学的にはベクトルです)にすぎません。この操作が実際にJavaでどのように実行されるかはわかりません。Cでは、配列へのポインタと長さをFFTルーチンに渡すだけで、動的に割り当てられたメモリへのポインタを返すか、結果を配列に残して配列に渡します。
最後に、M個の複素数の配列に到達します(信号を含む配列/バッファー/ベクトルの長さがMであると想定)。そして、あなたはそれであなたがやりたいことを何でもします。
たとえば、基本周波数がどこにあるかを検出するために、複素数のそれぞれの大きさを取り、最大値を見つけることができます(ただし、非常に近似しています)。
その他:処理するより高度な手法には、漏れを回避するための事前ウィンドウ処理、ウィンドウパディングされたスペクトルでより高い解像度を得るためのゼロパディングの実行などがあります。
それが役に立てば幸い。