2013-03-04 105 views
3

我想用AudioTrack从SD卡播放音频文件。我试过这段代码:用AudioTrack从SD卡播放音频(mp3,ogg)

int minBufferSize = AudioTrack.getMinBufferSize(8000, 
       AudioFormat.CHANNEL_CONFIGURATION_MONO, 
       AudioFormat.ENCODING_PCM_16BIT); 
     int bufferSize = 512; 
     AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, 
       AudioFormat.CHANNEL_CONFIGURATION_MONO, 
       AudioFormat.ENCODING_PCM_16BIT, minBufferSize, 
       AudioTrack.MODE_STREAM); 

     int i = 0; 
     byte[] s = new byte[bufferSize]; 

     FileInputStream fin = new FileInputStream(path); 
     DataInputStream dis = new DataInputStream(fin); 

     at.play(); 
     while ((i = dis.read(s, 0, bufferSize)) > -1) 
     { 
      at.write(s, 0, i); 

     } 
     at.stop(); 
     at.release(); 
     dis.close(); 
     fin.close(); 

但它不能正常播放音频文件。它不是原始音频,而是播放某种噪音。

回答

2

AudioTrack类仅支持PCM音频数据,这就是您听到噪音的原因。

使用MediaPlayerSoundPool如果您想播放压缩音频文件,如.mp3和.ogg。
或者,您可以解码应用程序中的压缩音频,并将生成的PCM数据写入AudioTrack,但这是一个更大的任务。