2012-10-17 103 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(); 

應該以正常速度

相關問題