2012-02-12 88 views
1

我在Galaxy Nexus上遇到了一個非常奇怪的問題。我想要做的是在我的服務(音樂相關的應用程序)開始時將48個OGG示例加載到SoundPool中。每個文件是11-15K。加載代碼很簡單:Galaxy Nexus上極慢的OGG解碼

for (String note : sm) { // 48 iterations 
    int soundId = soundPool.load(getResources().getAssets().openFd(note), 1); 
    loadedSoundsMap.put(note, soundId); 
} 

我有分寸,關於我的Nexus One 2.3.6我的負荷在1-2秒內。但是在全新的Galaxy Nexus 4.0.2上,它會在9秒內加載!

我真的懷疑這是一個文件IO需要花費很多時間來讀取總共1mb,所以我認爲解壓縮器實現中有些東西被搞砸了。

任何人都可以提出什麼可能會導致這麼慢的工作?

P. S. Mp3給出了大致相同的圖片。

回答

0

問題在於SoundPool實施。音頻硬件在未壓縮數據前面工作 - PCM,因此SoundPool保持所有聲音加載,它將OGG或MP3文件解壓縮爲WAV。爲了改進UX,您可以在應用程序啓動時運行一個從OGG解碼爲WAV文件的線程。如果聲音轉換時運行播放器 - 使用WAV文件,否則使用OGG。這是一個很好的OGG解碼器的鏈接:libvorbis-libogg-android。請記住,OGG解碼器解碼爲原始PCM,因此您必須添加WAV標頭。

在Android L上,當將任何文件加載到SoundPool需要很長時間時,AwesomePlayer也存在問題。切換到開發人員選項中的NuPlayer有幫助,但它應該由Android團隊以某種方式修復。

相關問題