2012-10-17 92 views
1

我正在尝试使用AudioTrack流式传输音乐。 曲目播放,但音频以一半的速度播放。就像这首歌变成慢动作一样。Android AudioTrack慢速播放

try{ 
    AudioTrack track= new AudioTrack(AudioManager.STREAM_MUSIC, 
     44100, 
     android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO, 
     android.media.AudioFormat.ENCODING_PCM_16BIT, 

     android.media.AudioTrack.getMinBufferSize(44100, 
       android.media.AudioFormat.CHANNEL_CONFIGURATION_STEREO, 
       android.media.AudioFormat.ENCODING_PCM_16BIT), 
     AudioTrack.MODE_STREAM); 

System.out.println("Min buffer: " + android.media.AudioTrack.getMinBufferSize(44100, 
       android.media.AudioFormat.CHANNEL_CONFIGURATION_STEREO, 
       android.media.AudioFormat.ENCODING_PCM_16BIT)); 


    int cnt; 
    int totalWrite = 0; 
    boolean play = true; 
    byte buff[]=new byte[16384]; 
    while((cnt=CircularByteBuffer.getInstance().getInputStream().read(buff))>0){ 

     totalWrite += cnt; 
     System.out.println("Writing: " + cnt); 
     track.write(buff, 0, cnt); 

     if (totalWrite > 60000 && play){ 

      track.play(); 
      play = false; 
     } 
    } 



     }catch (Exception e) 
     { 
}//end catch  

在CircularByteBuffer中,这些字节正在写入另一个线程并在此线程上读取。这首歌持续不间断地播放,但播放速度很慢。我不知道它会是什么。有任何想法吗?

+0

什么是你的输入源玩?它也是44khz立体声吗? – Tim

+0

你确定44100是正确的采样率吗? –

+0

是的,我抓住流头信息,当我打印速度,它打印“44100” – cmakthat

回答

1

假设这实际上是一个立体声流,为什么要用CHANNEL_CONFIGURATION_MONO创建AudioTrack

+0

老实说,我不知道。我在线使用示例,我只是尝试不同的组合设置。当我使用“CHANNEL_CONFIGURATION_STEREO”时,它播放速度更快,听起来不像慢动作,但最终变得更加分散。 – cmakthat

+0

您可能需要检查所有代码,以确保所有内容(包括写入缓冲区的其他线程)与音频格式的实际内容相匹配,而不是假设您的所有流都是相同的硬编码格式。 – Geobits

0

所以事实证明,所有的设置都很好。我结束了使用“CHANNEL_CONFIGURATION_STEREO”设置,但我试图在实际设备上运行应用程序。当我从设备流出时,音乐非常好。但模拟器导致了这首歌的所有问题。

我希望这是原因,模拟器只是一个记忆猪,运行效率低下。

0

尝试

track.setPlaybackRate(88200); 
track.play(); 

应该以正常速度

相关问题