хороший способ предварительно загрузить аудио файлы с помощью openAL в iOS - PullRequest
2 голосов
/ 16 декабря 2011

Я делаю игру для платформы iOS и хочу использовать openAL для воспроизведения звуковых эффектов в игре (кроме фоновой музыки). Я хочу, например, 20-30 звуков продолжительностью 1-3 секунды каждый. Поскольку я хочу, чтобы эти звуки воспроизводились без задержки, я должен загрузить их из файла, распаковать и сохранить в памяти. Но распакованный звук (как я понимаю) использует много памяти. Так я на правильном пути? Или есть другой способ? Спасибо

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Загрузка звуков вызывает задержку и может вызвать дрожание остальной части приложения. Для наилучшего исполнения вы определенно хотите предварительно загрузить звуковые эффекты.

Использование памяти является проблемой, но если вы не загружаете в память слишком много аудиоданных за раз, все будет в порядке.

44 кГц монофонические аудиоданные будут занимать 88 000 байт в секунду в несжатом виде. Стерео вдвое больше, но обычно для звуковых эффектов вам все равно не нужна стерео. Таким образом, если бы у вас было загружено 30 звуков длительностью 3 секунды, у вас было бы 90 секунд звука с использованием 7,5 МБ памяти. Конечно, вы можете вдвое сократить использование памяти, используя источник 22050 Гц, прежде чем сжимать его в AAC (что сохраняет частоту дискретизации источника).

Что я делаю, так это поддерживаю кэш аудио-буферов, который я могу сбросить, когда приложение начинает использовать слишком много памяти, например: https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OALSimpleAudio.m#L441

1 голос
/ 16 декабря 2011

Для звуковых эффектов с наименьшей задержкой вы захотите воспроизвести несжатый звук, уже находящийся в памяти. 2 или 3 МБ не так много памяти, чтобы выделить для звуковых эффектов с низкой задержкой.

...