Как я могу получить надежное время для моего аудио приложения?

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

Я закодировал специальный секвенсор в swift, который контролирует запуск / остановку воспроизведения нескольких последовательностей, воспроизводимых синтезаторами в чистых данных.

До сих пор я полностью избегал использования Core Audio или AVFoundation для любого аспекта моего приложения, потому что я ничего о них не знаю, и им обоим, похоже, требуется кодирование на C или Objective C, о котором я почти ничего не знаю.

Однако, как я уже говорил из предыдущих вопросов здесь, мне нужно использовать Core Audio или AVFoundation, чтобы получить точную синхронизацию. Без этого я попробовал все остальное, и время полностью испорчено (медлительный, нервный).

Все учебники и книги по Core Audio кажутся мне чрезвычайно широкими и глубокими. Если все, что мне нужно от одной из этих платформ, - это точная синхронизация для моего секвенсора, как вы предлагаете мне добиться этого как человека, который является новичком в Core Audio и Objective-C, но в остальном имеет готовое аудио приложение на 95%?

1 ответ

Если ваш секвенсор имеет код Swift, который зависит от того, вызывается ли он как раз вовремя для передачи звука, он не будет работать с хорошей точностью синхронизации. Например, вы не можете получить нужное время.

Core Audio использует пул-модель в реальном времени (исключая код Swift любой интересной сложности). AVFoundation, вероятно, требует от вас создания аудио заранее и планирования буферов. Приложение iOS должно быть разработано практически с нуля для одного из этих двух решений.

Добавлено: если ваш существующий код может генерировать аудиосэмплы немного раньше времени, этого достаточно для статистического покрытия с использованием дрожащего таймера ОС, вы можете запланировать этот предварительно сгенерированный вывод для воспроизведения через несколько миллисекунд (например, при извлечении в правильное время семплирования).

AudioKit - это аудиофрейм с открытым исходным кодом, который предоставляет Swift доступ к службам Core Audio. Он включает в себя секвенсор на основе Core Audio, и имеется множество примеров кода, доступных в виде Swift Playgrounds.

Класс AudioKit AKSequencer имеет необходимые средства управления транспортом. Вы можете добавлять события MIDI в ваш экземпляр секвенсора программно или читать их из файла. Затем вы можете подключить ваш секвенсор к AKCallbackInstrument, который может выполнять код при получении MIDI-команд noteOn и noteOff, что может быть одним из способов запуска сгенерированного аудио.

Другие вопросы по тегам