SoundPool错误:没有更多可用的曲目名称

Car*_*les 15 android soundpool audiotrack

我在使用soundpool课程时遇到了麻烦.在这里:

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

private SoundPool sp;
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0);
Run Code Online (Sandbox Code Playgroud)

之后我加载了所需的所有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
Run Code Online (Sandbox Code Playgroud)

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

(我正在测试三星Galaxy S I9000,2.3.3操作系统.该应用程序是2.1)

小智 6

看到这个(在android组中)

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


Dav*_*ean 1

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