2013-03-04 110 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,但這是一個更大的任務。