Ошибка SoundPool: больше нет названий треков - PullRequest
15 голосов
/ 05 декабря 2011

У меня проблемы с классом Soundpool.Вот так:

В моем игровом приложении (кстати, музыкальное приложение) мне нужно воспроизвести как минимум 32 коротких звука одновременно, поэтому я объявляю свой пул звуков следующим образом:

private SoundPool sp;
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0);

После этого я загружаю все необходимые звуки MP3, около 80 звуков по 55 КБ каждый.У меня нет проблем с загрузкой всех звуков, но это медленно!Ну, это не проблема.Реальная проблема в том, что когда я играю около 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

После этого каждый звук, который я пытаюсь воспроизвести, выдает ту же ошибку, и звук не может бытьиграл.Даже не звуки другой деятельности / Soundpool.Я понятия не имею, что происходит или как это исправить!Должен ли я изменить формат звуковых файлов?Должен ли я освобождать память или что-то еще после воспроизведения звука?

(я тестирую на ОС Samsung Galaxy S I9000, 2.3.3. Приложение 2.1)

Ответы [ 2 ]

6 голосов
/ 23 ноября 2012

см. this (в группе android)

Для звука существует жесткое ограничение в 32 активных объекта AudioTrack на устройство (не на приложение: вам нужноподелитесь этими 32 с остальной частью системы)

1 голос
/ 12 августа 2012

Пара мыслей здесь.Первый: первый параметр конструктора SoundPool - это не количество звуков, которые вы хотите загрузить в него, а максимальное количество одновременных потоков, которые вы будете воспроизводить.Во-вторых, SoundPool имеет ограниченную память для звуков, около 1 МБ.Поэтому я не удивлюсь, если вы укажете недокументированный лимит на количество треков, которые вы можете загрузить за один раз.Обратите внимание, что 80 звуков раз 55k на звук, безусловно, более 1 МБ.И это ограничение действует после того, как mp3-файлы были распакованы в аудиоданные внутри SoundPool.

...