2

我正在使用 SoundPool 加载几个声音片段并播放它们。

据我所知,它的运行 100% 正确。但是在 .load() 调用期间,我的日志被垃圾邮件发送:

06-09 11:30:26.110: ERROR/AudioCache(23363): Heap size overflow! req size: 1050624, max size: 1048576

我正在加载 11 个声音文件,其中 2 个非常小 ~ 3kb,其余的在 10kb - 15kb 之间。Windows 正在报告

大小:114kb

磁盘大小:128kb

我是否突破了 SoundPool 能够容纳的极限?是否有一些设置我应该改变以避免这种溢出?任何关于我应该如何设置我的音频控制的指导将不胜感激。

4

2 回答 2

3

SoundPool 会将加载的音频解压缩为 PCM 数据,以便立即播放,无需解码延迟。如果您正在加载的音频被大量压缩,例如 MP3,那么它可能会被放大很多。如果不需要立体声,请尝试将音频编码为单声道(通常不适用于短音效)。

于 2012-10-11T03:30:41.343 回答
0

SoundPool每个轨道有 1Mb 的缓冲区大小限制。但此限制不适用于文件大小,而是适用于解压缩的原始 PCM 数据。

我建议SoundPoolCompat从 3d 派对库中使用。它具有与 类似的 api SoundPool,但具有自定义缓冲区大小,该缓冲区内的所有数据都将被加载到内存中并以较小的延迟播放SoundPool。所有超过该缓冲区大小的数据都将按需加载(这会增加延迟,类似于MediaPlayer)。但它不会崩溃,也不会播放仅适合 SoundPool 等缓冲区大小的数据。缓冲区大小也以文件大小表示,而不是以解压缩数据大小表示。哪个对api用户更方便。

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

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

于 2019-11-12T11:11:02.767 回答