Подтвердить что ты не робот

С чего начать на аудио синтезаторе iOS?

Я знаю, что это очень широкая тема, но я неловко обходился с демками и моими собственными тестами, и я не уверен, правильно ли я атакую ​​проблему. Поэтому любые выводы о том, с чего я должен начать, будут оценены.

Цель состоит в том, чтобы приложение создавало синтезированные звуки в соответствии с пользовательскими настройками. (Это не единственная функция приложения, я не воссоздаю Korg здесь, но synth является ее частью.) Пользователь установил бы типичные настройки синтезатора, такие как волна, реверберация и т.д., Затем выбирал бы, когда будет играть нота, вероятно, с модификатором высоты тона и скорости.

Я немного поиграл с аудиоустройством и RemoteIO, но едва понял, что делаю. Прежде чем я уйду в глубь кроличьей дыры, я хотел бы знать, действительно ли я нахожусь в правильном футбольном поле. Я знаю, что аудио-синтезатор будет на низком уровне, но я надеюсь, что, возможно, есть некоторые библиотеки более высокого уровня, которые я могу использовать.

Если у вас есть указатели на то, с чего начать, и какую технологию iOS я должен читать больше, сообщите мне.

Спасибо!

EDIT: позвольте мне лучше подвести итоги.

Существуют ли какие-либо синтезаторные библиотеки, уже созданные для iOS? (коммерческий или с открытым исходным кодом - я не нашел ни одного с многочисленными поисками, но, возможно, мне его не хватает.)

Существуют ли какие-либо API более высокого уровня, которые могут облегчить создание буферов?

Предполагая, что я уже могу создавать буферы, есть ли лучший/более простой способ отправить эти буферы на аудиоустройство iOS, чем AudioIO Audio Unit?

4b9b3361

Ответ 1

Это действительно хороший вопрос. Я иногда задаю себе те же самые вещи, и я всегда в конечном итоге использую MoMu Toolkit от парней в Стэнфорде. Эта библиотека обеспечивает приятную функцию обратного вызова, которая подключается к AudioUnits/AudioToolbox (не уверен), так что все, о чем вы заботитесь, это установить частоту дискретизации, размер буфера и глубину бита аудиокассет, и вы можете легко синтезировать/обрабатывать все, что вам нравится, внутри функции обратного вызова.

Я также рекомендую Synthesis ToolKit (STK) для iOS, который также был выпущен Ge Wang в Stanford. Действительно классный материал для синтеза/обработки аудио.

Каждый раз, когда Apple выпускает новую версию iOS, я проверяю новую документацию, чтобы найти лучший (или более простой) способ синтеза аудио, но всегда без везения.

EDIT: я хочу добавить ссылку на исходный код AudioGraph: https://github.com/tkzic/audiograph Это действительно интересное приложение, чтобы показать потенциал AudioUnits, сделанные Томом Зикарелли. Кодексу очень легко следовать, и отличный способ узнать об этом - как бы можно было сказать - запутанном процессе работы с низкоуровневым аудио в iOS.

Ответ 2

Swift и Object C

Там большой проект с открытым исходным кодом, который хорошо документирован с видео и учебными пособиями как для Objective-C, так и для Swift.

AudioKit.io

Ответ 3

Для этого есть две части: во-первых, вам нужно генерировать буферы синтезированного звука - это в значительной степени платформо-агностик, и для написания этой части вам нужно хорошее понимание синтеза звука. Вторая часть передает эти буферы в соответствующий OS-специфический API, чтобы звук воспроизводился. Большинство API для воспроизведения звука поддерживают двойную буферизацию или даже несколько буферов, так что вы можете синтезировать будущие буферы во время воспроизведения текущего буфера. Что касается использования API iOS, это, вероятно, будет зависеть от того, какая общая архитектура у вас есть для вашего приложения, но это действительно легкая часть. Часть синтеза - это то, где вам нужно будет выполнить большую часть работы.

Ответ 4

Самый низкий уровень доступа к буферам звуковой карты - через audiounit api и, в частности, remoteIO audiounit. Это кучка тарабарщины, но есть несколько примеров, разбросанных по всему Интернету. http://atastypixel.com/blog/using-remoteio-audio-unit/ - это один.

Я предполагаю, что есть другие способы заполнения буферов, либо с использованием структуры AVFoundation, но я никогда не делал их.

Другой способ сделать это - использовать openframework для всех ваших аудиофайлов, но это также предполагает, что вы хотите сделать свой рисунок в openGL. Вызывание реализации audiounit не должно быть слишком большой проблемой, если вы хотите сделать свой рисунок по-другому. Эта конкретная реализация хороша, потому что она бросает все на -1..1 поплавки, чтобы вы могли заполнить.

Наконец, если вы хотите начать скачок на связке осцилляторов/фильтров/линий задержки, которые вы можете подключить к аудиосистеме openframeworks (или к любой системе, использующей массивы с платами -1..1), вы можете проверить out http://www.maximilian.strangeloop.co.uk.

Ответ 5

Я знаю, что это немного старо, но это похоже на неправильный подход ко мне. Вероятно, вам нужно найти синтезатор аудиоустройств, который моделирует те изменения, которые вы хотите сделать. Их много, некоторые из них с открытым исходным кодом, другие, возможно, лицензируемые - и размещают аудиоустройства от вашего кода. Механизмы, описанные выше, выглядят так, как будто они будут работать отлично, но они не будут оптимизированы для платформы ios.

Ответ 6

Я знаю, что эта тема старая, и я поражен тем, что ситуация в iOS по-прежнему не улучшилась, когда дело доходит до аудио.

Однако на горизонте есть серебряная линия: iOS 6 поддерживает API WebAudio. У меня успешно получилось приятный синтезатор полифонов с едва ли несколькими строками в JavaScript. По крайней мере, есть основные вещи, такие как Осцилляторы, доступные из коробки:

https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html

и (просто выберите один из многих из них)

Ответ 7

Я знаю, что это старый пост, но посмотрите Amazing Audio Engine.

Amazing Audio Engine - это сложная инфраструктура для аудио-приложений iOS, построенная таким образом, что вам не нужно. Она разработана, чтобы работать с ней очень легко, и обрабатывает все тонкости аудио iOS от вашего имени.

Это стало разработчиком AudioBus для iOS.

Ответ 8

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

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

поэтому вам нужно закодировать smart внутри этого обратного вызова. существует несколько подводных камней, например, использование NSLog и доступ к свойствам другого объекта, которые были объявлены без неатомных (т.е. они будут неявно создавать блокировки).

Это основная причина, по которой Apple построила платформу более высокого уровня (AQ), чтобы вывести этот низкоуровневый сложный бизнес. AQ позволяет получать процесс и выплеснуть звуковые буферы в потоке, где не имеет значения, если вы вызываете латентность.

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

На самом деле, просто пойдите с аудио-единицами - начните с той ссылки, которую дал вам jonbro. даже несмотря на то, что AQ представляет собой платформу более высокого уровня, для нее больше головной боли, а аудиоустройство RemoteIO является правильным инструментом для этого задания.

Ответ 9

Я использовал пример вывода звука из открытых фреймворков и библиотеки синтеза stanford stk для работы с моим iOS-синтаксическим приложением.

Ответ 10

Я экспериментировал с Tonic Audio synth library. Чистый и понятный код с готовностью компилировать примеры macOS и iOS.

В какой-то момент я начал генерировать собственные буферы с простым кодом C с нуля, чтобы делать базовые вещи, такие как синусоидальные генераторы, ADSR и задержки, что было очень приятно экспериментировать.

Я подтолкнул свои массивы с плавающей точкой к динамикам с помощью Tonic-аналога, Novocaine.

Например 256k использовать их для всей создаваемой музыки.

Совсем недавно я нашел AVAudioUnitSampler, супер-простой способ воспроизведения аудио сэмпла на разных этапах с низкой задержкой.