現在、javalayer 1.1 を使用して mp3 のデコードに取り組んでいます。
44100 Hz、16 ビット、MP3 から生の PCM データを受信したいと考えています。ステレオ mp3 では問題なく動作しますが、モノラル mp3 では奇妙な問題が発生します。
ここにいくつかのコードがあります。
InputStream data = c.getResources().openRawResource(resId);
Bitstream bitstream = new Bitstream(data);
Decoder decoder = new Decoder();
while(thereIsData) {
Head frameHeader = bitstream.readFrame();
SampleBuffer buffer = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);
short[] pcmBuffer = buffer.getBuffer();
// Do some stuff with pcm (For example creating a wav file )
bitstream.closeFrame();
}
buffer.getChannelCount() == 1、buffer.getFrequency() == 41000
だから... 問題は。44100 Hz、モノチャンネル、16 ビットの WaveFile を作成し、それを Audacity に入れて波を表示するとします。(200ms サウンド)...(200ms サウンドなし)...(200ms サウンド)...(200ms サウンドなし)
これは、.wav に書き込む前の pcm データにも当てはまります... (Yeahi syso すべてのもの)
したがって、ゼロフレームまたは sth が必要であると考える人もいるかもしれません。そこに...だから、値が0だけのすべてのフレームを切り落としました。これにより、wav ファイルのゼロ ブレークがわずかに短くなります。つまり、部分的なゼロ フレームが存在する必要があります。だから私はpcmデータからすべてのゼロ値を切り取りました...そして奇妙に思えますが、これはうまくいきました。ファイルは正常に聞こえます。
しかし、これは解決策にはなりません。これらの偽のゼロ値がある理由はまだわかりません。また、mp3 にも沈黙が必要です。
すべての説明のヒントをいただければ幸いです。ありがとう