Архитектура цифровой звуковой рабочей станции на iOS

Я разрабатываю архитектуру для цифровой звуковой рабочей станции, которая работает на iOS (в основном, но также пытаюсь поддерживать OS X). Я медленно просматриваю мили документации Apple и ссылки на их фреймворки.

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

Цели архитектуры:

  • Sound track sample access (access samples in files)
    • iPod library songs
    • песни из локального файла
    • песни на удаленном сервере
    • радиостанции (песни бесконечной длины)
  • Цепочка эффектов (несколько эквалайзеров или изменение высоты тона и темпа одновременно)
  • Несколько каналов и микширование (даже с объемным звучанием)
  • Portability
    • Mac OS X at least
    • Поддержка iOS 6+ (iOS 5 или ниже не требуется)
    • Пример доступа в 32-битных числах с плавающей запятой, а не целых числах со знаком.
  • Easy Objective-C API (конечно, DSP и обработка на C ++)
  • Recording, playing
    • Record to file (codec by choice), or send over network (VoIP)
    • Воспроизведение на разных выходах (на Mac) или на колонках / наушниках на iOS
    • Изменение громкости / отключения звука
    • Поддержка фонового звука
  • Real-time sample processing
    • Equalizer on any song that is currently played
    • Обработка образцов в реальном времени
  • Многопоточность

Надеюсь, я ничего не упустил, но это самые важные цели.

Мое исследование

Я просмотрел большинство фреймворков (хотя и не так подробно), и вот что я выяснил. Apple перечисляет следующие платформы для использования аудио на iOS:

  • Платформа Media Player
  • Платформа AV Foundation
  • Платформа Audio Toolbox
  • Структура аудиоустройства
  • Платформа OpenAL

Media Player и AV Foundation - это API-интерфейсы слишком высокого уровня, которые не допускают прямого доступа к образцам. OpenAL с другой стороны не может записывать звук. Таким образом, остаются рамки Audio Toolbox и Audio Unit. Здесь объясняются многие различия: В чем разница между всеми этими аудиофреймами ?

Насколько я понимаю, лучше всего подойдет Audio Toolbox, поскольку MIDI в настоящее время не требуется. Но на Audio Toolbox очень мало информации и руководств по более профессиональному управлению, например записи, воспроизведению и т. Д. Однако об Audio Units гораздо больше.

Мой первый вопрос: Что такое службы очереди аудио и к какой структуре они принадлежат?

И последний вопрос:

Какую структуру следует использовать для достижения большинства желаемых целей?

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

Большое спасибо за вашу помощь.


person Legoless    schedule 18.06.2013    source источник


Ответы (1)


Audio Units - это аудио API нижнего уровня iOS и API, на котором построены аудио очереди. А Audio Units предоставит приложение с наименьшей задержкой и, следовательно, максимально приближенным к возможной обработке в реальном времени. Это API C, поэтому приложению, возможно, придется самостоятельно управлять аудиопамятью.

Платформа AVFoundation может предоставить приложению более легкий доступ к активам музыкальной библиотеки.

Приложение может обрабатывать звук только из других приложений, которые явно публикуют свои аудиоданные, что не включает приложение Музыкальный проигрыватель, но включает некоторые приложения, использующие Apple Inter-App Audio API и сторонний Audiobus API.

person hotpaw2    schedule 18.06.2013
comment
Итак, можно ли получить доступ к файлам с помощью приложения «Музыкальный проигрыватель»? - person Legoless; 19.06.2013