У меня есть приложение для упорядочивания музыки для iOS, которое использует AUSamplers и звуковые модули эффектов.Запланированные события параметров блока аудиозаписей задерживаются
Основная петля воспроизведения реализована с использованием обратного вызова уведомления о визуализации для отправки заметки на & событиям, связанным с пробоотборниками. У меня есть заметки, успешно играющие в такт, вычисляя смещения буфера и передавая их на вызовы MusicDeviceMIDIEvent
.
Теперь я пытаюсь реализовать функцию автоматизации, которая позволяет с течением времени определять изменения параметров эффекта. Для первоначального теста я неоднократно наращиваю громкость мастер-микшера от 0 до 1 каждый бар (т. Е. Каждые 2 с при 120 уд/мин).
Я использую AudioUnitScheduleParameters
, чтобы запланировать немедленные события, после обратного вызова рендеринга. Однако фактическое изменение объема, по-видимому, немного задерживается. Это очень очевидно в начале полосы, когда объем падает от 1 до 0; любые заметки, запланированные в начале этого бара, кратковременно воспроизводятся при полном объеме до того, как они упадут до 0 и увеличатся, как ожидалось. Я проверил, что событие параметра было запланировано со смещением буфера перед записью о событии.
Мое текущее обходное решение - запустить автоматизацию «впереди» звука, где я добавляю некоторое смещение к счетчику отсчетов, используемому для вычисления текущего уровня громкости. Однако я определил смещение, просто экспериментируя, и я не уверен в решении.
Есть ли какая-то причина, по которой я отсутствую, что задерживает запланированные события параметров?
Каков ваш размер буфера аудиоустройств (в образцах или миллисекундах)? – hotpaw2
Буфер длиной 512 пробы – Jayson
Это около 11,6 миллисекунды. Является ли ваше обходное решение смещением в несколько раз задержка в этом буфере? – hotpaw2