2011-12-05 39 views
12

我遇到了soundpool類的麻煩。這裏有雲:SoundPool錯誤:沒有更多可用的曲目名稱

在我的遊戲應用程序(音樂應用程序的BTW),我需要在同一時間重現至少32種短的聲音,所以我宣佈我的Soundpool這樣的:

private SoundPool sp; 
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0); 

,我負載之後所有需要的MP3聲音,大約80個55KB的聲音。我沒有加載所有聲音的麻煩,但它很慢!那麼這不是問題。真正的麻煩是,當我在同一時間播放約20的聲音,有一個在我的日誌中的錯誤:在那之後每次我嘗試播放聲音拋出了同樣的錯誤,且無聲音可播放

ERROR/AudioFlinger(59): no more track names available 
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12 
ERROR/SoundPool(26349): Error creating AudioTrack 

。甚至沒有其他Activity/soundpool的聲音。我不知道發生了什麼或如何解決它!我應該改變聲音文件的格式嗎?播放聲音後我應該釋放記憶還是什麼?

(我在三星Galaxy S I9000測試,2.3.3 OS系統,該應用程序是2.1)

+0

也許你需要實現SoundPool.OnLoadCompleteListener? – Codeman

+0

爲每個音軌調用release()? – Codeman

+0

確保沒有啓用循環模式,沒有軌道設置爲暫停,並且每個mp3都如您所想的那麼短(最終沒有沉默)。由於可用的音軌數量有限,因此必須保持低音軌音量。也許有少於32首曲目可用,所以你不能同時播放這麼多的聲音。另外一些實現是越野車,並且可能會掛在一些軌道上(可能依賴於一個壞的mp3文件或者某個東西),因此可用軌道用得很快。如果應用程序崩潰,有時軌道不會釋放,所以沒有聲音。 – dronus

回答

1

一對夫婦的想法在這裏。其中一個:SoundPool構造函數的第一個參數不是要加載到其中的聲音的數量,而是您要播放的同時流的最大數量。其次,SoundPool對聲音的內存有限,大約1MB。因此,如果您一次觸及您可以加載的曲目數量的某些無證限制,我一點都不會感到驚訝。注意80個聲音每聲55k肯定超過1MB。這個限制是在SoundPool內部的MP3已經解壓縮成音頻數據之後。

4

看到this (in android group)

對於音頻,有32個活動AudioTrack對象的每設備的硬性限制(而不是每個應用程序: 你需要分享那些32與系統的其餘部分),

相關問題