我在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给出了相同的图片。
答案 0 :(得分:1)
这可能与此相关:Galaxy Nexus - wrong CPU ABI being selected during install time
和这个错误:http://code.google.com/p/android/issues/detail?id=25321
答案 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团队应该以某种方式修复它。