【发布时间】:2012-01-13 08:31:18
【问题描述】:
我在使用 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)
【问题讨论】:
-
也许你需要实现 SoundPool.OnLoadCompleteListener ?
-
为每个 AudioTrack 调用 release() ?
-
确保没有启用循环模式,没有设置暂停的曲目,并且每个 mp3 真的像你想象的那么短(最后没有沉默)。由于可用的音轨数量有限,因此您必须将正在运行的音轨数量保持在较低水平。也许可用的曲目少于 32 首,因此您无法同时播放那么多声音。还有一些实现是错误的,并且可能会挂在某些轨道上(可能取决于坏的 mp3 文件或其他东西),因此可用的轨道很快就用完了。如果应用程序崩溃,有时轨道没有被释放,所以没有声音。
标签: android soundpool audiotrack