android - Android SoundPool 有多糟糕?使用什么替代品?

标签 android audio soundpool

我将 Android 的 SoundPool 视为一种在我的通用游戏开发库中实现音效的机制。它似乎很理想。

但一点点研究表明,all kinds of bugsSoundPool 中。 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 .就我而言,我发现如果您将 setRaterate > 1.0f 一起使用,SoundPool 会开始引发异常,直到您的应用退出(并消耗大量电池)过程中)。

TL;DR;我不再认为调试 SoundPool 的危险/麻烦是值得的

关于android - Android SoundPool 有多糟糕?使用什么替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484574/

相关文章:

java - 更新循环更新对象而不是删除它

flash - Flash As3静音按钮问题

android - 声音 fragment 的堆大小溢出问题

Android SoundPool 在播放另一种声音之前不会第二次播放相同的声音

java - 当使用 soundPool 时,我的第一个声音循环,其余的抛出状态 12

java - 使用 Ruby 生成 Java 项目

android - 是否可以在 Android 上以编程方式关闭蓝牙可发现性?

android - 对于 JetpackCompose,我们可以在另一个库中创建可组合函数吗?

c# - Unity:带有PlayScheduled()的准确节拍器不起作用

audio - 如何知道 mp3 文件的位深?