SoundPool sample 1 not ready的解決

自從上次發了篇博客說從新浪blog轉移過來之後,就沒什麼聲了,今天突然想起來,又正好搞定了一個小問題,所以就上來更新一記~


最近準備寫一個小Android程序,一邊學一邊想一邊寫,感覺在程序啓動的時候除了歡迎界面,還需要一小段音樂來助助幸。之前看過SoundPool和MediaPlayer的東西,所以三下五除二就在WelcomeActivity中加入了SoundPool的代碼,然後一跑發現根本沒有出聲。


在DDMS中看了一下,看到一條sample 1 not ready的message。第一感覺是難道是音樂文件有問題?於是又在網上下了段小背景音樂(SoundPool對音樂文件大小上限有要求),一放進去跑還是這條message。沒法,看API...翻看了一遍SoundPool相關的API,稍微調整了一些代碼,滿懷信心地又跑了一次,還還是sample 1 not ready...


然後就問度娘,發現百度知道、soso、eoe上都有人在問這個問題,但是幾乎沒有一條回答的。在論壇裏看了一圈也沒發現什麼解決方法。

再次看API,發現SoundPool的一個方法:

public void setOnLoadCompleteListener (SoundPool.OnLoadCompleteListener listener)
Since: API Level 8
Sets the callback hook for the OnLoadCompleteListener.

既然報的是sample not ready的問題,那就是說可能是在load音樂片段的時候沒有完成,導致在play的時候報not ready,而SoundPool中又有setOnLoadCompleteListener方法用來判斷音樂加載是否完成,那可能問題就真的是出在音樂加載這裏了,於是就試了下,bingo,搞定~



在搜索解決方法的過程中,看到有些人的代碼中有Thread.sleep的代碼,所以想既然是音樂加載未完成導致的問題,那給它一段時間來加載是否就能正常了?於是就在初始化SoundPool的過程中,load後面加了100ms的sleep,程序跑了一下,嗯,也能發聲~


所以,總結一下關於SoundPool中出現sample not ready類似問題的解決方法:

問題產生的原因:

因爲音樂未加載完成,所以導致無法播放。


解決方法:

一、較好的推薦方法:調用setOnLoadCompleteListener方法來確保音樂加載完成。這裏需要注意的是SoundPool.OnLoadCompleteListener listener需要實現SoundPool.OnLoadCompleteListener接口。

二、土鱉的簡單方法:直接在load後面加一定的sleep,睡好了問題也就解決了:)但是這裏sleep的時長是個比較人品的事情,跟加載的文件的多少大小都有關,當然要麼試,要麼有方法一。


今天就到這裏,也算解決了一點小問題,加油加油~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章