我将 Android 的 SoundPool
视为一种在我的通用游戏开发库中实现音效的机制。它似乎很理想。
但一点点研究表明,all kinds of bugs在 SoundPool
中。 SoundPool
中的错误是否仍然相关?
因为我正在开发一个库,所以 SoundPool
中的任何错误都会成为我库中的错误,我希望我的用户不会受到影响。
所以我的问题基本上是:我应该为音频使用什么 API?
使用 AudioTrack
并编写自己的混音器并非不可能。但显然最好避免这样做。是否有任何 API 可以为我提供解码?
我需要能够同时播放合理数量的音效(假设至少 16 个),并且需要更多的开放性。声音需要以低延迟开始播放。 WAV
文件需要被支持(MP3/Ogg 不重要)。音效需要支持无缝循环和动态的、单独的音量调节。 Android 应用生命周期需要得到适当的支持。
我听说 SoundPool
有 1MB 的限制,这对于每个单独的声音效果可能是可以接受的,但对于所有缓冲区/声音不是。谁能告诉我确切的限制是多少?
最后,我还需要能够以低 CPU 负载播放压缩格式的背景音乐。我认为 MediaPlayer
是理想的选择。是否可以与其他 API 并行使用?
我知道有些人一直在使用 MediaPlayer
来填充 SoundPool
。但它是否支持我需要的功能?
还有其他我错过的音频 API 吗?
最佳答案
只是添加一些关于此问题的最新反馈。一段时间以来,我一直在一个应用程序中使用 SoundPool,该应用程序具有相当大的按键声音用户群。我们的用例:
- 必须立即播放
- 多达 3 个以上的并行声音
- 我们在整个范围内使用
setRate
[0.5f-2.0f]
我现在遇到了两个主要的设备特定问题,并决定减少损失并放弃 SoundPool
- 大量 4.4 LG 设备(主要是 LG G2/G3 系列)在实现 SoundPool 时发生了原生崩溃。这已在更新中得到修复(最终),但我们仍有很多用户使用未升级的设备
- Sony Xperia 设备目前在 SoundPool 方面存在各种问题,如 reported by others .就我而言,我发现如果您将
setRate
与rate > 1.0f
一起使用,SoundPool 会开始引发异常,直到您的应用退出(并消耗大量电池)过程中)。
TL;DR;我不再认为调试 SoundPool 的危险/麻烦是值得的
关于android - Android SoundPool 有多糟糕?使用什么替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484574/