0
MP3ファイルでFFTを実行したい。このために、私はこのファイル形式からデコードされたバイトストリームを抽出したいと思う(私はそれが生のPCMデータと信じていると信じている)。この作業のために、私はjLayer 1.0.1ライブラリを使用している。ここでは、各フレームのためのPCMデータを抽出する必要がありコード:MP3ファイルからデコードされたバイトストリームを取得する
short[] pcmOut = {};
Bitstream bitStream = new Bitstream(new FileInputStream(path_to_mp3_file));
boolean done = false;
while (!done) {
Header frameHeader = bitStream.readFrame();
if (frameHeader == null) {
done = true;
} else {
Decoder decoder = new Decoder();
SampleBuffer output = (SampleBuffer) decoder.decodeFrame(bitStream.readFrame(), bitStream); //returns the next 2304 samples
short[] next = output.getBuffer();
pcmOut = concatArrays(pcmOut, next);
//do whatever with your samples
}
bitStream.closeFrame();
}
for (int i = 0; i < pcmOut.length; i++) {
if (pcmOut[i] != 0) {
System.out.println(pcmOut[i]);
}
}
問題は、変数short[] pcmOut
が唯一の有効なMP3ファイルのためにゼロで満たされているということです。このような問題の根本原因は何ですか?
多くのフレームをチェックするか、最初のフレームだけをチェックしますか?フレームは1秒の小さな部分を表しているので、実際のサウンドが再生され始めていないセグメントをチェックしている可能性があります... 200フレームのうち、199フレームのpcmOUTをチェックします。 –