2013-02-01 2 views
1

10 초를 디코딩하는 데 1 분이 필요합니다. 어떻게하면 MP3를 더 빨리 디코딩 할 수 있습니까?jlayer를 사용하는 Android의 느린 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;  
} 

답변

1

위에서 입력 한 decode 방법은 샘플 코드 일뿐입니다. 프로덕션 환경에서 사용해서는 안됩니다. 즉, 경로를 전달하고 같은 파일을 반복해서 다시 열면 값 비싼 작업이 수행됩니다.

대신이 메서드 외부의 파일을 InputStream에 열고 InputStream을 메서드에 전달해야합니다. 예를 들어이 질문을 참조하십시오 : Android JellyBean network media issue