2013-11-23 66 views
1

中發出任何聲音我試圖在將它們加載到soundPool後同時播放3個midi文件(每個200Kb)。 播放命令後,我卸載每個流,並釋放soundPool.I設置音量爲1,手機不沉默(對不起,語言)。 沒有任何壓抑或麻煩。SoundPool沒有在android

我該怎麼辦? THX提前

soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); 
soundPool.play(sound_id1, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id2, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id3, leftVolume, rightVolume, 1, 0, rate); 
soundPool.unload(stream_id1); 
soundPool.unload(stream_id2); 
soundPool.unload(stream_id3); 
soundPool.release(); 

編輯: 當林在調試模式,並且在播放命令它的偉大工程。 試圖添加一個OnLoadCompleteListener仍然沒有。

+0

確保您有足夠的時間來加載音頻,並確實加載正確。使用SoundPool.setOnLoadCompleteListener完成此操作。 –

+0

@MikeM。請參閱我的編輯註釋 –

+0

註釋掉卸載和發佈聲明並嘗試使用。 –

回答

0

不是在播放後立即卸載聲音資源並釋放SoundPool對象,而是創建一個Runnable來執行這些任務,並將其延遲發送到Handler。聲明如下:

final Handler handler = new Handler(); 
Runnable delayedUnload = new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     soundPool.unload(sound_id1); 
     soundPool.unload(sound_id2); 
     soundPool.unload(sound_id3); 
     soundPool.release(); 
    } 
}; 

然後張貼了Runnable你已經播放的聲音資源後:

soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); 
soundPool.play(sound_id1, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id2, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id3, leftVolume, rightVolume, 1, 0, rate); 

handler.postDelayed(delayedUnload, 5 * 1000); 

postDelayed()第二個參數是毫秒的延遲;在這種情況下,延遲是5秒。 SoundPool不提供確定聲音何時播放的方法,因此您需要相應地調整延遲。

+0

thx我會試試:) –

+0

很酷。讓我知道它是否適用於你,@LeonNicetomeetya。 –

+0

你會在哪裏放置處理程序? –