2016-05-03 8 views
1

私は各オーディオ入力の時間 - 周波数データを得るためにFFTの入力を探しています。私はいくつかのウェブサイトを通過し、入力はtargetDataLineから取得する必要があることを知っています。私はオーディオデータをキャプチャするためのプログラムを作ったし、それは動作します。ここでFFTアルゴリズムを使用してオーディオを周波数データに変換するために、targetDataLineのどの部分を使用する必要がありますか?

は(オーディオ・データを収集した後)targetDataLine

System.out.println 
("TargetDataLine buffer size is " + targetDataLine.getBufferSize() 
             + "\n" + "TargetDataLine format is " 
             + targetDataLine.getFormat().toString() + "\n" 
             + "TargetDataLine info is " 
             + targetDataLine.getLineInfo().toString()); 

を印刷し、ここにあるの私のコードで、システムの出力です:

TargetDataLine buffer size is 8000 
TargetDataLine format is PCM_SIGNED 8000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian 
TargetDataLine info is interface TargetDataLine supporting 14 audio formats, and buffers of at least 32 bytes 

私は、この出力の一部が可能かについて混乱していますFFTアルゴリズムに使用されます。または、targetDataLineの代わりにelseから入力を取得する必要がありますか?

アイデアの助けがありがとうございます:)ありがとう!

答えて

1

Read()メソッドは、TargetDataLineからデータを取得するために使用されます。これは、オーディオデータをバッファに入れ、fft分析に直接送ることができるかもしれません。 fftが必要とする仕様を知らない場合は、最初にファイル/フォーマット変換を行う必要があります。たとえば、オーディオバイトを正規化された浮動小数点数に変換する必要があるかもしれません。 Using Files and Format Convertersは、このプロセスの一部をカバーするOracleチュートリアルです。最初のコード例では、コメント内に「//ここでは、現在audioBytes配列にあるオーディオデータに役立つものを実行する」というセクションがあります。これは、オーディオストリームの個々のバイト(AudioInputLineまたはTargetDataLine)は公開されており、FFT分析に出荷する前に操作することができます。

関連する問題