Я делаю проект, в котором я буду декодировать данные из mp3-файла напрямую и хранить полученные данные PCM во временной папке temp.pcm на SD-карте для последующего анализа. У меня проблемы с расшифровкой данных....
//a short array to store raw pcm data
short[] buffer = new short[bufferSize];
ByteArrayOutputStream outStream = new ByteArrayOutputStream(1024);
File filep = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/onenineoone.mp3");
InputStream inputStream = new BufferedInputStream(new FileInputStream(filep), 8 * 1024);
short[] pcm=null;
try
{
Bitstream bitstream = new Bitstream(inputStream);
boolean done = false;
while (!done)
{
javazoom.jl.decoder.Header frameHeader = bitstream.readFrame();
javazoom.jl.decoder.Decoder decoder = new javazoom.jl.decoder.Decoder;
SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);
****Log.i("decoder", "error in the samplebuffer??");****
if (output.getSampleFrequency() != 44100 || output.getChannelCount() != 1) throw new DecoderException("Stereo or non-44100 sampling rate .mp3 not supported", null);
pcm = output.getBuffer();
for (short s:pcm) {
outStream.write(s);
}
buffer=pcm;
}
done = true;
bitstream.closeFrame();
} catch (BitstreamException e) {
throw new IOException("Bitstream error: " + e);
} catch (DecoderException e) {
Log.w("error is:", "Decoder error", e);
}
**РЕШЕНО
Я объявил частный декодер javazoom.jl.decoder.Decoder глобальным ключом, но кажется, что ошибка, из-за которой он не войдет в SampleBuffer, что мне пришлось объявить его как javazoom.jl.decoder.Decoder decoder = new javazoom.jl.decoder.Decoder.