2015-12-03 4 views
0

У меня есть приложение для упорядочивания музыки для iOS, которое использует AUSamplers и звуковые модули эффектов.Запланированные события параметров блока аудиозаписей задерживаются

Основная петля воспроизведения реализована с использованием обратного вызова уведомления о визуализации для отправки заметки на & событиям, связанным с пробоотборниками. У меня есть заметки, успешно играющие в такт, вычисляя смещения буфера и передавая их на вызовы MusicDeviceMIDIEvent.

Теперь я пытаюсь реализовать функцию автоматизации, которая позволяет с течением времени определять изменения параметров эффекта. Для первоначального теста я неоднократно наращиваю громкость мастер-микшера от 0 до 1 каждый бар (т. Е. Каждые 2 с при 120 уд/мин).

Я использую AudioUnitScheduleParameters, чтобы запланировать немедленные события, после обратного вызова рендеринга. Однако фактическое изменение объема, по-видимому, немного задерживается. Это очень очевидно в начале полосы, когда объем падает от 1 до 0; любые заметки, запланированные в начале этого бара, кратковременно воспроизводятся при полном объеме до того, как они упадут до 0 и увеличатся, как ожидалось. Я проверил, что событие параметра было запланировано со смещением буфера перед записью о событии.

Мое текущее обходное решение - запустить автоматизацию «впереди» звука, где я добавляю некоторое смещение к счетчику отсчетов, используемому для вычисления текущего уровня громкости. Однако я определил смещение, просто экспериментируя, и я не уверен в решении.

Есть ли какая-то причина, по которой я отсутствую, что задерживает запланированные события параметров?

+0

Каков ваш размер буфера аудиоустройств (в образцах или миллисекундах)? – hotpaw2

+0

Буфер длиной 512 пробы – Jayson

+0

Это около 11,6 миллисекунды. Является ли ваше обходное решение смещением в несколько раз задержка в этом буфере? – hotpaw2

ответ

0

2 задержки буфера может быть время, необходимое для передачи сообщения об обновлении параметра из нисходящего аудио блока обратного вызова к потоку обратного вызова, которая уже была вызвана, и в настоящее время работает (уже в середине процесса смешивания входящих звуковых буферов)

+0

Хм, может быть, но я делаю все это на этапе PreRender, и я запускаю сэмплер одновременно. Вы говорите, что единицы эффекта имеют разную задержку, чем пробоотборник? Есть ли способ рассчитать эту задержку, а не просто догадываться и надеяться, что она работает на разных процессорах? – Jayson

+0

К тому времени, когда вы запускаете сэмплер, микшер может уже смешивать буфер с использованием более старых параметров. Попробуйте изменить размеры буфера аудиоустройств и посмотрите, меняется ли смещение с ним. Обратите внимание, что ОС иногда изменяет размеры буфера аудиоустройства, отличного от запрошенного. – hotpaw2

+0

Я сбросил размер буфера до 256 и увидел те же результаты; Затем мне пришлось задержать 4 буфера, чтобы заставить их синхронизировать, все еще 1024 кадра. – Jayson

Смежные вопросы