Android SoundPool堆限制

问题描述 投票:2回答:2

我正在使用SoundPool将多个声音片段加载到其中并进行播放。

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

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

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

大小:114kb

磁盘大小:128kb

我是否正在限制SoundPool可以容纳的极限?是否应该更改一些设置以避免这种溢出?非常感谢您提供有关如何设置音频控件的指南。

android audio heap overflow soundpool
2个回答
3
投票

SoundPool将把加载的音频解压缩为PCM数据,因此可以立即播放,而没有解码延迟。如果您正在加载的音频被大量压缩(例如MP3),则可能会被炸毁。如果不需要立体声,则尝试将音频编码为单声道(通常不需要短音效)。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.