Xcode: несколько аудиофайлов, одна кнопка

#ios #audio #uibutton

#iOS #Аудио #uibutton

Вопрос:

В Xcode 3.2.5 я хотел бы последовательно воспроизводить несколько аудиофайлов (более 50) с помощью одной кнопки пользовательского интерфейса. Я пробовал несколько кодов, но из-за них происходит утечка памяти. Есть предложения? Я все еще учусь, поэтому, пожалуйста, включите коды файлов заголовка и имплиментации. Заранее благодарю.

Ответ №1:

Используйте интерфейсы в службах очереди аудио (AudioToolbox / AudioQueue.h). Создайте один объект звуковой очереди для каждого звука, который вы хотите воспроизвести. Затем укажите время одновременного запуска для первого аудиобуфера в каждой очереди аудио, используя функцию AudioQueueEnqueueBufferWithParameters.

Следующие ограничения относятся к одновременному воспроизведению звуков в iPhone OS, в зависимости от формата аудиоданных:

Аудио AAC, MP3 и ALAC (Apple Lossless): Вы можете воспроизводить несколько звуков в форматах AAC, MP3 и ALAC одновременно; воспроизведение нескольких звуков в этих форматах потребует ресурсов процессора для декодирования. Линейный PCM и IMA / ADPCM (аудио IMA4): Вы можете воспроизводить несколько звуков в формате linear PCM или IMA4 одновременно, не беспокоясь о ресурсах процессора.
Взято из одновременного воспроизведения нескольких звуков

Комментарии:

1. Спасибо, но это не совсем то, что я имел в виду. Я хочу воспроизвести последовательность звуков нажатием одной кнопки.

Ответ №2:

Это просто концептуально, но как насчет (а) создания массива названий звуков, которые вы хотите воспроизвести (это может быть во время выполнения), в правильном порядке, затем (б) написания функции, в которой каждый объект типа soundHandler проверяет, где он находится в массиве; если он не последний, он создает SoundPlayer, загружает звук, воспроизводит, а затем вызывает следующий soundHandler в массиве. (Если это последнее, оно просто создает / загружает / воспроизводит и, возможно, уведомляет родителя о том, что это сделано.) Каждый обработчик звука (я это просто придумываю, вам придется его написать) может освободить себя после завершения.

Если у вас возникнут проблемы с задержкой / загрузкой, вы всегда можете использовать каждый вызов soundHandler n 2 в массиве и, конечно, затем проверить, является ли он предпоследним, а не конечным.

Это больше того, что вы имели в виду?