Я разрабатываю архитектуру для цифровой звуковой рабочей станции, которая работает на 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 наивысшего уровня, насколько это возможно, но настолько низкого, насколько это необходимо для достижения целей. Также приветствуются ссылки на образцы кода.
Большое спасибо за вашу помощь.