1

我在 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 的总大小,所以我认为在解压缩器的实现中有些东西搞砸了。

谁能建议什么会导致工作如此缓慢?

PS Mp3 给出了大致相同的画面。

4

2 回答 2

1

这可能与此有关:Galaxy Nexus - 在安装期间选择了错误的 CPU ABI

这个错误:http ://code.google.com/p/android/issues/detail?id=25321

于 2012-02-12T10:33:19.023 回答
0

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

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

于 2014-11-27T16:25:36.720 回答