我在使用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操作系统。该应用程序是2.1)
答案 0 :(得分:6)
对于音频,每个设备有32个有效AudioTrack对象的硬限制(不是每个应用: 你需要与系统的其余部分共享那些32,
答案 1 :(得分:1)
这里有几点想法。一:SoundPool构造函数的第一个参数不是要加载到其中的声音数量,它是您将要播放的最大并发流数。其次,SoundPool对声音的内存有限,大约1MB。因此,如果您对可以一次加载的曲目数量达到一些未记录的限制,我将不会感到惊讶。请注意,80声音每次声音55k,肯定超过1MB。这个限制是在将mp3压缩到SoundPool内的音频数据之后。