在安卓系统中,SoundPool的大小限制是多少?

3
在安卓系统中,SoundPool 有大小限制吗?在这篇文章中指出,使用 SoundPool 播放的声音应不超过1MB
我需要同时播放多个声音,但有时可能会超出1MB的限制。我可以依赖 SoundPool 来完成吗?由于找不到深入的 SoundPool 指南,所以非常感激提供明确答案。

2
如果您有这些顾虑,为什么不使用MediaPlayer呢? - Blackbelt
好的,类似问题的解决方案指向使用SoundPool,而且SoundPool的一些方法似乎非常方便。 - OBX
1 MB 的限制是指单个文件,还是累计的呢? - Phantômaxx
是的,这也是我需要澄清的一件事 :)。 - OBX
1个回答

1

SoundPool非常有限,它有硬编码的缓冲区大小限制,如果超过了限制,你会在logcat中收到静音和错误。此外,它是用本地cpp编写的,很难调试出发生了什么。不同版本的Android存在特定问题。

我编写了SoundPoolCompat,它在底层使用AudioTrack。您可以传递自定义bufferSize,所有在该缓冲区内的数据将被加载到内存中,并像SoundPool一样以小延迟播放。超过bufferSize的所有数据都将按需加载(这会增加延迟,类似于MediaPlayer)。 API与SoundPool非常相似,还添加了从Uri(例如gdrive)加载声音的功能。还有playOnce方法,在文件播放后将卸载所有资源。 我在我的应用程序中使用它,代替了SoundPool和MediaPlayer。

implementation 'com.olekdia:sound-pool:3.0.2'

https://gitlab.com/olekdia/common/libraries/sound-pool


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接