2013-03-04 4 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 오디오 데이터 만 지원하므로 잡음이 들립니다.

.mp3 및 .ogg와 같은 압축 오디오 파일을 재생하려면 MediaPlayer 또는 SoundPool을 사용하십시오.
또는 앱에서 압축 된 오디오를 디코딩하여 결과로 나온 PCM 데이터를 AudioTrack에 쓸 수도 있지만 훨씬 더 큰 작업입니다. 내가 AudioTrack는 PCM 오디오를 재생 것으로 나타났습니다 다음 링크에서