Как я могу получить надежную синхронизацию для моего аудио приложения? - PullRequest
0 голосов
/ 03 мая 2018

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

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

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

0 голосов
/ 04 мая 2018

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

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

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

...