2010-09-08 45 views
3

有沒有一種可靠的方法來防止在soundpool中截斷聲音?我已經在聲音之間用sleep()函數取得了一些成功,但是在開始另一個聲音之前他們有時會錯過最後一個聲音。我的應用按順序播放短音。 JerryAndroid soundpool timing

回答

3

確保您有足夠的流。在SoundPool構造函數中使用 ,第一個參數是MaxStreams。 將其設置爲你認爲合適的任何一種。 8左右應該足夠我猜...但你可能需要更多,這取決於你的聲音。

+0

謝謝。增加流量幫助。 – trinth 2010-12-02 08:09:44

5

儘管這是一個老問題,我想我會發布一些東西在這裏,因爲我無法找到一個解決這個問題的在線,但沒有拿出一個解決方案的東西...

我得到的時間每個聲音(使用MediaPlayer)時,我的應用程序啓動時,並將R.id.sound_name值和持續時間一起存儲。然後我可以使用SoundPool播放聲音。

代碼獲取時間:

private long getSoundDuration(int rawId){ 
    MediaPlayer player = MediaPlayer.create(context, rawId); 
    int duration = player.getDuration(); 
    return duration; 
} 

在我的聲級,然後我打聲像往常一樣,然後睡的持續時間。很簡單的東西。

似乎很好。爲我帶來了SoundPool低延遲的優勢,以及鏈接事物的能力。

幾件事情要注意:

  • 每次不要持續時間,與創建的MediaPlayer有開銷。
  • 持續時間取自文件元數據 - ogg的工作非常適合我,但我無法擔保其他任何事情。
+1

在獲得持續時間後,不要忘記致電player.release()。如果MediaPlayer實例事先被垃圾收集,則會出現錯誤。這可能會導致內存泄漏,但我不確定這一點。 – 2013-08-28 20:49:22