16

我在使用 soundpool 类时遇到问题。它是这样的:

在我的游戏应用程序(顺便说一句音乐应用程序)中,我需要同时重现至少 32 个短声音,所以我这样声明我的音池:

private SoundPool sp;
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0);

之后,我加载了所有需要的 MP3 声音,大约 80 个声音,每个 55KB。我加载所有声音都没有问题,但速度很慢!好吧,这不是问题。真正的麻烦是当我同时播放大约 20 个声音时,我的日志中有一个错误:

ERROR/AudioFlinger(59): no more track names available
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12
ERROR/SoundPool(26349): Error creating AudioTrack

之后,我尝试播放的每个声音都会引发相同的错误,并且无法播放任何声音。甚至没有另一个 Activity / soundpool 的声音。我不知道发生了什么或如何解决它!我应该更改声音文件的格式吗?播放声音后我应该释放内存还是什么?

(我在三星 Galaxy S I9000 上测试,2.3.3 OS 系统。应用程序是 2.1)

4

2 回答 2

7

看到这个(在 android 组中)

对于音频,每个设备有 32 个活动 AudioTrack 对象的硬性限制(不是每个应用程序:您需要与系统的其余部分共享这 32 个),

于 2012-11-23T15:17:00.107 回答
1

这里有几个想法。一:SoundPool 构造函数的第一个参数不是您要加载到其中的声音数量,而是您将要播放的同时流的最大数量。其次,SoundPool 的声音内存有限,大约 1MB。因此,如果您一次可以加载的曲目数量达到某个未记录的限制,我一点也不感到惊讶。请注意,每个声音 80 个声音乘以 55k 肯定超过 1MB。该限制适用于将 mp3 解压缩为 SoundPool 中的音频数据之后。

于 2012-08-12T00:16:44.580 回答