4

まず第一に、私はいくつかの音からのスペクトルを見るために小さなプロジェクトに取り組んでいます。

私はこれをマイクで動作させました: 代替テキストhttp://img25.imageshack.us/img25/4271/spectrumanalyzerfourier.png

上の画像は、マイクを使って数秒間話したり叫んだりしているだけです。これは私には良さそうです。

しかし、MP3ファイルを読み取ってそのスペクトログラム画像を作成しようとすると、少し異なって見えます。Aphex Twin-Windowlickerを試してみました。通常、スペクトログラム画像に顔が表示されるか、少なくともいくつかの暗い色が表示されます。しかし、見た目はそれほど良くありません: alt text http://img10.imageshack.us/img10/3475/aphextwinhmm.png

これが私がマイクでしたことです:

byte tempBuffer[] = new byte[10000];
ByteArrayOutputStream out = new ByteArrayOutputStream();
counter = 20;

// Microphone
while (counter != 0) {
 int count = line.read(tempBuffer, 0, tempBuffer.length);
 if (count > 0) {
  out.write(tempBuffer, 0, count);
 }
 counter--;
}
out.close();

// FFT code below ...
byte audio[] = out.toByteArray();
// ...

そして、これは私がMP3でそれを行う方法です:

同じコードを使用して変換と視覚化を行いましたが、オーディオキャプチャ部分のみが異なります(描画方法の高さを調整して違いがあるかどうかを確認しただけですが、違いはありませんでした)。

byte tempBuffer[] = new byte[10000];
ByteArrayOutputStream out = new ByteArrayOutputStream();
FileInputStream input = null;

File mp3 = new File("Aphex Twin - Widowlicker.mp3");
input = new FileInputStream(mp3);
int len;
while((len = input.read(tempBuffer)) > 0) {
 out.write(tempBuffer, 0, len);
}

out.close();
input.close();

// FFT code below ...
byte audio[] = out.toByteArray();
// ...

誰かが私がMP3ファイルで間違っていることを指摘してくれるといいですね。

これらは私の設定です:

  • サンプルレート:44100
  • サンプルあたりのビット数:8
  • チャンネル:1(モノラル)
  • 署名済み:true
  • ビッグエンディアン:true (JavaでAudioFormatを使用しています)
  • オーディオを読み取るtempBuffer:10000(byte tempBuffer [] = new byte [10000];)
  • FFTの場合、オーディオを4096のチャンクに分割します(2の累乗である必要があります)

ちなみに、これらの設定は大丈夫ですか、それとも16bpsまたはステレオを使用する必要がありますか、それともバッファに10000が多すぎるか、または4096から小/大ですか?

前もって感謝します

4

1 に答える 1

3

MP3は圧縮オーディオ形式です。マイクからのデータに匹敵するオーディオストリームとして使用する前に、まずデータを解凍する必要があります。生のMP3データは最大エントロピーを持ち、スペクトログラムで行われるホワイトノイズのように見えるはずです。

于 2010-06-30T10:18:23.090 に答える