我知道SoundPool用于处理类似声音的小型fx,并且确保要按顺序逐个播放的4个声音 fragment 足够小。

我使用了ogg quality 0, fragment 分别为35kb,14kb,21kb和23kb,总共92kb的压缩音频。我不知道如何估算未压缩的大小,但是应该不很多,对吧?

因此,当我依次播放4个声音时,它在前9次(9个序列x 4个声音)中效果很好,但开始在其中一个声音的9个序列上引起存储问题。当我开始看到错误时,它始终是序列9。

处理该问题的最佳方法是什么?我有一些想法:

1)进一步压缩声音(Ogg质量-1和单声道而不是立体声)

2)使用SoundPool.load和SoundPool.unload不断地卸载和加载声音

3)释放并重新创建soundPool实例的时间

我还能做些什么吗?令人尴尬的是,Android api无法处理如此小的 fragment 。我想知道人们如何创造出具有很多音效的游戏...

错误看起来像这样:

错误/AudioFlinger(35):没有足够的内存用于AudioTrack大小= 1048640
DEBUG/MemoryDe​​aler(35):音轨(0x25018,大小= 1048576)

最佳答案

看来我能够解决以下问题:

1)将我的声音 fragment 从44降采样到22khz。未压缩的大小减少了一半(我想出了如何估算未压缩的声音大小-将剪辑导出到未压缩的WAV中)。我使用了不错的开源工具Audacity

2)更多地修剪声音以减少持续时间

3)将try/catch放在play()周围,以防万一(尝试播放声音时确实捕获错误,但不能)

关于android - 以及有关SoundPool的内存问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4098138/

10-14 12:40