2017-04-02 18 views
0

私は現在これを初めて知っているので、親切に理解してください。javaを使用してpcmバイト配列.wavファイルから周波数とピッチを取得するには?

私は、声を良い、悪い、または中立的なものとして分類しなければならないプロジェクトがあります。私の計画は、サンプルデータセットのすべての周波数とピッチを取得し、SVMを使用してトレーニングすることです。

すべての.wavファイルのピッチと周波数を取得するためです。私はオーディオファイルからPCMデータを見つけるまでコードを実行しました。ここで、これらのデータを周波数を得るための高速フーリエ変換アルゴリズムにどのように適用する必要がありますか? FFTアルゴリズムにバイト配列を適用する前に、さらに検討すべきことはありますか?ここで

は、PCMバイト配列へのwavファイルのconvertionのための私のコードです:

int totalFramesRead = 0; 
File fileIn = new File(inputFile); 
try { 
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(fileIn); 
    int bytesPerFrame = audioInputStream.getFormat().getFrameSize(); 
    if (bytesPerFrame == AudioSystem.NOT_SPECIFIED) { 
     // some audio formats may have unspecified frame size 
     // in that case we may read any amount of bytes 
     bytesPerFrame = 1; 
    } 
    // Set an arbitrary buffer size of 1024 frames. 
    int numBytes = 1024 * bytesPerFrame; 
    byte[] audioBytes = new byte[numBytes]; 
    try { 
     int numBytesRead = 0; 
     int numFramesRead = 0; 
     // Try to read numBytes bytes from the file. 


     while ((numBytesRead = audioInputStream.read(audioBytes)) != -1) { 
      // Calculate the number of frames actually read. 
      numFramesRead = numBytesRead/bytesPerFrame; 
      totalFramesRead += numFramesRead; 
     } 
     return audioBytes[]; 
    } 
+1

私はあなたがオーディオの単一のサンプルを表すバイト数を考慮する必要があると思う。最近のほとんどのオーディオファイルは、サンプルあたり16ビットになります。 – john16384

+0

StackOverflowには既によく似た質問がありますが、良い答えがあります。[jtransforms + audioの検索](http://stackoverflow.com/search?q=Jtransforms+audio)。 –

+0

あなたのFFTライブラリはおそらく、入力要件をフロート・ルックにし、それに応じてウェーブ・データを変換する必要があります。 –

答えて

0

FFTの周波数ピークは必ずしもピッチ周波数ではないので、後また​​はFFT以外に考慮すべきたくさんあります。裸のFFTマグニチュードを使用するのではなく、ピッチ検出/推定アルゴリズムを調べます。

関連する問題