Galaxy Nexus上的OGG解码非常慢

时间:2012-02-12 08:12:11

标签: android soundpool

我在Galaxy Nexus上遇到了一个非常奇怪的问题。我想要做的是在我的服务开始时(音乐相关应用程序)将48个OGG样本加载到SoundPool中。文件分别为11-15K。加载代码很简单:

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给出了相同的图片。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

问题在于SoundPool实施。音频硬件在未压缩数据前工作 - PCM,因此当SoundPool保持所有声音加载时,它会将OGG或MP3文件解压缩为WAV。为了改进UX,您可以在应用程序启动时运行从OGG解码为WAV文件的线程。如果声音被转换,当运行播放器时 - 使用WAV文件,否则使用OGG。这是一个很好的OGG解码器的链接:libvorbis-libogg-android。请记住,OGG解码器解码为原始PCM,因此您必须添加WAV标头。

在Android L上,AwesomePlayer也存在问题,将任何文件加载到SoundPool需要很长时间。在Developer选项中切换到NuPlayer会有所帮助,但Android团队应该以某种方式修复它。