В настоящее время я работаю над декодированием mp3 с помощью javalayer 1.1.
Итак, я хочу получать необработанные данные PCM от моих 44100 Гц, 16 бит, Mp3. Он отлично работает со стерео 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
Итак ... Проблема в том. Если я создам моноканальный 16-битный волновой файл с частотой 44100 Гц и помещаю его в Audacity, чтобы увидеть волны. Звук периодически 0, например: (200 мс звук) ... (200 мс без звука) ... (200 мс звук) ... (200 мс без звука)
Это касается и данных ПКМ перед записью в .wav ... (Да уж, syso, все такое)
Таким образом, можно подумать, что там должны быть нулевые кадры или что-то в этом роде. там ... Итак, я вырезал все кадры, в которых было только 0 значений. Это приводит к несколько более коротким нулевым разрывам в файле wav. Значит, по мне, должны быть частичные нулевые кадры. Поэтому я вырезал ВСЕ нулевые значения из данных ПКМ ... И, как ни странно, это сработало. Файл звучит нормально.
Но это не может быть решением. Я до сих пор не знаю, почему есть эти ложные нулевые значения. И в mp3 мне тоже нужна тишина.
Буду признателен за каждый намек в объяснении. Спасибо