Медленное декодирование MP3 на Android с использованием jlayer

Для декодирования 10 секунд требуется 1 минута, как я могу быстрее декодировать MP3?

public static byte[] decode(String path, int startMs, int maxMs) throws FileNotFoundException 
{
    float totalMs = 0;
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    File file = new File(path);
    InputStream inputStream = new BufferedInputStream(new FileInputStream(file), 8 * 1024);
    try {
        Bitstream bitstream = new Bitstream(inputStream);
        Decoder decoder = new Decoder();
        boolean done = false;
        while (! done) {
            Header frameHeader = bitstream.readFrame();
            totalMs += frameHeader.ms_per_frame();
            SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);  
            short[] pcm = output.getBuffer();   

            for (short s : pcm) {
                os.write(s & 0xff);
                os.write((s >> 8 ) & 0xff);
              }
            if (totalMs >= (startMs + maxMs)) {
                done = true;
            }
            bitstream.closeFrame();
        } 
        return os.toByteArray();
    }catch(Exception e){
          e.printStackTrace();
    }
    return null;    
}

person LK Yeung    schedule 01.02.2013    source источник


Ответы (1)


Метод decode, который вы перечислили выше, является просто примером кода. Вы не должны использовать его в производстве, а именно, вы проходите путь и повторно открываете один и тот же файл, что является дорогостоящей операцией.

Вместо этого вы должны открыть файл вне этого метода, в InputStream, а затем передать InputStream в метод. См. пример этого вопроса: Проблема с сетевым носителем Android JellyBean

person ajacian81    schedule 03.03.2013