我在Android上播放Ogg Vorbis聲音時遇到了一個奇怪的問題,我很難糾正。我使用SoundPool類播放聲音。除了暫停後播放的第一個聲音外,它非常有效。爲什麼我的SoundPool聲音不能在Android上首次播放?
下面是我遇到的問題:我有一個菜單上有幾個按鈕。如果我按了一個按鈕,我會打嘀嗒聲。但是,我第一次嘗試演奏一個,它不會發出聲音。然後,如果我再次點擊相同的菜單按鈕,它就會起作用。如果我再延遲下一次按幾秒鐘,問題就會重新出現。具體來說,我看到以下行爲:
- 等待幾秒鐘
- 觸摸UI按鈕,這應該發出聲音......它不
- 日誌貓報告「AudioFlinger:寫阻塞165毫秒, AudioHardware PCM播放進入待機‘
- 觸摸UI按鈕,SH:66個延遲寫入,線程0xec40" AudioHardwareQSD
- 等待幾秒鐘
- 日誌貓報告(當我觸摸UI按鈕立即發生)’會發出聲音......它不會。
- logcat的報告「AudioFlinger:寫阻塞166毫秒,67個延遲寫入,螺紋0xec40」(當我觸摸UI按鈕立即發生),再次
- 觸摸UI按鈕,但前 AudioHardwareQSD顯示待機信息...聲音工作!
我在幾個不同的設備上看到過這種現象:HTC Incredible,根深蒂固的Nook Color和HTC Thunderbolt,所以我不認爲它是特定設備。
我在猜測這是AudioHardwareQSD進入待機狀態的功能。一旦它處於待機狀態,滑道中的第一個聲音就會被忽略,而隨後的聲音會一直工作,直到它再次進入待機狀態。 HTC Incredible的'寫封鎖'消息和AudioHardwareQSD消息之間大約有3秒的延遲。
這裏有一個關於使用WakeLock來防止這種情況發生的StackOverflow的答案。我嘗試了這個解決方案,但並沒有解決我的問題。
這是怎麼發生的?有沒有辦法阻止AudioHardwareQSD進入待機狀態?有沒有人有任何提示解決這個問題?
謝謝!
更新:我已經能夠實施一個相當粗略的解決方法,可以解決此問題。在我的應用程序(遊戲)中,我有一個更加健全的渲染類。我添加了一個由遊戲邏輯定期執行的新方法present()。該方法使用1.5秒超時定時器。當計時器落到底時,聲音渲染器將播放由50ms靜音組成的音頻文件,然後重置計時器。
這已糾正我的問題......遠離最佳,但它的工作原理。
我有同樣的問題!我不明白你的解決方案可以幫助我嗎? – user1163234
我使用長度爲50ms的Audacity生成了一個聲音文件,並且只包含沉默。每1.5秒,我只是播放這個聲音文件。這解決了上述問題。 – MutantXenu
謝謝!找到了解決方案也check.out它。 http://stackoverflow.com/questions/12261867/soundpool-not-playing-after-3-second-of-opening-my-activity – user1163234