Я знаю, что SoundPool был предназначен для обработки небольших эффектов, таких как звуки, и я убедился, что мои 4 звуковых клипа, которые я хочу воспроизвести один за другим в некоторой последовательности, достаточно малы.
Я использовал качество ogg 0 и клипы размером 35 КБ, 14 КБ, 21 КБ и 23 КБ, всего 92 КБ сжатого звука. Я понятия не имею, как оценить размер несжатого файла, но его не должно быть много, верно?
Поэтому, когда я воспроизвожу 4 звука подряд, он хорошо работает первые 9 раз (9 последовательностей x 4 звука), но начинает вызывать проблемы с памятью в последовательности девяток для одного из звуков. Это всегда последовательность 9, когда я начинаю видеть ошибку.
Каков наилучший способ справиться с этим? У меня есть несколько идей:
1) ещё сильнее сжать звуки (качество ogg -1 и моно вместо стерео)
2) постоянно выгружать и загружать звуки с помощью SoundPool.load и SoundPool.unload
3) время от времени выпускать и воссоздавать экземпляр soundPool
Есть ли что-нибудь еще, что я могу сделать? Смущает, что android api не справляется с такими маленькими роликами. Интересно, как люди создают игры с большим количеством звуковых эффектов...
Ошибки выглядят так:
ОШИБКА/AudioFlinger(35): недостаточно памяти для AudioTrack size=1048640 DEBUG/MemoryDealer(35): AudioTrack (0x25018, size=1048576)