Основные принципы разработки аудиоустройства

Когда Вы намереваетесь для создания аудиоустройства, питание и гибкость платформы Аудиоустройства Core Audio предоставляют Вам возможность пойти примерно куда угодно со звуком. Однако это питание и гибкость также означают, что существует много, чтобы учиться начинать на правой ноге. В этой главе Вы получаете вид с высоты птичьего полета на эту передовую технологию, для обслуживания Вас, поскольку Вы делаете первые шаги к становлению разработчиком аудиоустройства.

Вы начинаете здесь с беглого взгляда на цикл разработки аудиоустройства. Затем Вы фокусируетесь в на том, что аудиоустройства и обнаруживают важную роль Core Audio SDK в разработке аудиоустройства. Вы изучаете, как аудиоустройства функционируют как плагины в OS X и совместно с приложениями, использующими их. Наконец, Вы представлены Спецификации Аудиоустройства, и как она определяет сменный API что разработчики аудиоустройства и разработчики приложений обе записи к.

После чтения этой главы Вы будете готовы закопать к архитектурным подробным данным и подробным данным разработки, представленным в Аудиоустройстве.

Если Вы хотите достать создание аудиоустройства сразу же, можно пропустить эту главу на данный момент и перейти прямо к Учебному руководству: Создание Простого Модуля Эффекта с Универсальным Представлением. Поскольку Вы создаете аудиоустройство, можно вернуться к этой главе, и к другим разделам в этом документе, для концептуальной информации, связанной с тем, что Вы делаете.

Цикл разработки аудиоустройства

Разработка аудиоустройства обычно выполняет эти шаги:

  1. Разработайте аудиоустройство: укажите действие аудиоустройства, программируемое и пользовательский интерфейс, и свяжите конфигурационную информацию.

  2. Создайте и сконфигурируйте надлежащий проект XCode.

  3. Реализуйте аудиоустройство включая параметры, предварительные установки фабрики и свойства — все описанные в следующей главе; защита от копирования реализации, при желании; реализуйте синтез, DSP или код преобразования формата данных.

  4. Реализуйте графический интерфейс пользователя — известный как пользовательское представление — при желании. Поддержка автоматизации параметра реализации, при желании.

  5. Проверьте и протестируйте аудиоустройство.

  6. Разверните пакет аудиоустройства путем упаковки его в установщике или путем обеспечения инструкций по установке.

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

Учебное руководство позже в этом документе, Учебном руководстве: Создание Простого Модуля Эффекта с Универсальным Представлением, приводит Вас через большинство этих шагов.

Что такое аудиоустройство?

Аудиоустройство (часто сокращаемый как AU в заголовочных файлах и в другом месте) является плагином OS X, улучшающим приложения цифрового аудио, такие как Логика Pro и GarageBand. Можно также использовать аудиоустройства для встраивания функций аудио в собственное приложение. Программно, аудиоустройство упаковывается как пакет и конфигурируется как компонент, как определено Менеджером компонентов OS X.

На более глубоком уровне, и в зависимости от Вашей точки зрения, аудиоустройство является одной из двух совсем других вещей.

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

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

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

Из-за этой инкапсуляции, как Вы реализуете аудиоустройство, ваше дело. Самый быстрый путем тот, подтвержденный Apple и тем, описанным в этом документе, должен разделить надлежащие суперклассы C++ на подклассы свободно загружаемого Core Audio SDK.

Аудиоустройство программируемая структура и жизненный цикл

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

Рисунок 1-1  рабочее аудиоустройство, созданное использование Core Audio SDK
A running audio unit, built using the Core Audio SDK

Данные показывают две отличных внутренних детали пакета аудиоустройства: само аудиоустройство, слева, и представление аудиоустройства, справа. Аудиоустройство выполняет работу со звуком. Представление обеспечивает графический интерфейс пользователя для аудиоустройства, и, если Вы обеспечиваете его, поддерживаете для автоматизации параметра. (См. Автоматизацию Параметра Поддержки.), Когда Вы создаете аудиоустройство, Вы обычно пакет обе части в том же пакете — как Вы учитесь делать позже — но они - логически отдельные части кода.

Аудиоустройство, его представление и хост-приложение связываются друг с другом посредством центра уведомления, установленного хост-приложением. Это позволяет всем трем объектам оставаться синхронизируемыми. Функции для центра уведомления являются частью События Аудиоустройства Core Audio API.

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

Аудиоустройство и его представление появляются, и в игру, одним из двух способов:

  • Как правило, пользователь указывает к хост-приложению, что они хотели бы использовать аудиоустройство. Например, пользователь мог попросить, чтобы узел применил эффект реверберации к каналу аудио.

  • Для аудиоустройства, которое Вы предоставляете для добавления опции к собственному приложению, приложение открывает аудиоустройство непосредственно, вероятно на запуск приложения.

Когда узел открывает аудиоустройство, он сцепляет аудиоустройство до цепочки аудиоданных узла — представленный в числе светло-желтым (аудиоданные) стрелки. Это поднимает трубку, имеет две части: обеспечение новых аудиоданных к аудиоустройству и получения обработанных аудиоданных от аудиоустройства.

  • Для обеспечения новых аудиоданных для аудиоустройства узел определяет функцию обратного вызова (чтобы быть вызванным аудиоустройством), который предоставляет аудиоданные одна часть за один раз. Часть является многими кадрами аудиоданных. Кадр является одной выборкой аудиоданных через все каналы.

  • Для получения обработанных аудиоданных от аудиоустройства узел вызывает метод рендеринга аудиоустройства.

Вот то, как аудиоданные текут доходы между хост-приложением и аудиоустройством:

  1. Узел вызывает метод рендеринга аудиоустройства, эффективно прося у аудиоустройства часть обработанных аудиоданных

  2. Аудиоустройство отвечает путем вызова функции обратного вызова узла, чтобы заставить часть выборок аудиоданных обрабатывать

  3. Аудиоустройство обрабатывает выборки аудиоданных и помещает результат в буфер вывода для узла для получения

  4. Узел получает обработанные данные и с другой стороны вызывает метод рендеринга аудиоустройства

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

Внутри, аудиоустройство содержит программируемые леса для соединения сменного API с пользовательским кодом. При использовании Core Audio SDK для создания аудиоустройства, эти леса предоставляются в форме кода связующего звена для Менеджера компонентов вместе с иерархией класса C++. Рисунок 1-1 (скорее фигурально) представляет Ваш пользовательский код как внутренний куб в аудиоустройстве и представляет классы SDK’s и код связующего звена как распорки, подключающие внутренний куб к внешнему кубу.

Можно создать аудиоустройство, не используя Core Audio, SDK, но делая так влечет за собой гораздо больше работы. Apple рекомендует использовать Core Audio SDK для всех кроме самой специализированной разработки аудиоустройства.

Для приобретения знаний о внутренней архитектуре аудиоустройства считайте Архитектуру Аудиоустройства в Аудиоустройстве.

Файловая структура аудиоустройства

Аудиоустройство похоже на это в файловой системе OS X:

Рисунок 1-2  аудиоустройство в файловой системе OS X
An audio unit in the OS X file system

При создании аудиоустройства с помощью XCode и предоставленного шаблона аудиоустройства проект XCode заботится об упаковке всех этих частей соответственно.

Как компонент, аудиоустройство имеет следующие характеристики файловой системы:

  • Это - пакет с a .component расширение файла

  • Это - пакет; пользователи рассматривают пакет как непрозрачный, когда они просматривают его в Средстве поиска

Информационный список свойств (Info.plist) файл на верхнем уровне пакета Contents папка предоставляет критическую информацию системе и хост-приложениям, хотящим использовать аудиоустройство. Например, этот файл обеспечивает:

  • Уникальная строка идентификатора пакета в форме обратного доменного имени (или универсальный идентификатор типа). Например, для аудиоустройства FilterDemo, предоставленного в Core Audio SDK, этот идентификатор com.apple.demo.audiounit.FilterDemo.

  • Имя файла, в пакете, который является надлежащим аудиоустройством. Этот файл в MacOS папка в пакете.

Пакет аудиоустройства может содержать настроенный пользовательский интерфейс, названный представлением. Стандартное расположение для представления находится в пакете аудиоустройства Resources папка. Аудиоустройство, показанное на рисунке 1-2, включает такое представление, упакованное как сам непрозрачный пакет. Взгляд в пакете представления аудиоустройства показывает, что представление связывает файловую структуру:

Рисунок 1-3  представление аудиоустройства в файловой системе OS X
An audio unit view in the OS X file system

Когда хост-приложение открывает аудиоустройство, оно может спросить аудиоустройство, если оно имеет пользовательское представление. Если существует один, аудиоустройство может ответить путем обеспечения пути к пакету представления. Можно поместить пакет представления где угодно, включая сетевое расположение. Как правило, однако, представления упаковываются как показано здесь.

Пакет аудиоустройства обычно содержит одно аудиоустройство, как описано в этом разделе. Но единственный пакет аудиоустройства может содержать любое число аудиоустройств. Например, пакеты Apple все его аудиоустройства в одном пакете, System/Library/Components/CoreAudio.component. CoreAudio.component пакет включает единственный файл исполняемого кода, содержащего все аудиоустройства Apple и другой файл, содержащий все предоставленные пользовательские представления:

Рисунок 1-4  аудиоустройства Apple в файловой системе OS X
The Apple audio units in the OS X file system

Некоторая основная терминология

Для понимания этого документа важно понять условия “аудиоустройство “, “представление аудиоустройства “, и “аудиоустройство связываются “, а также их отношения друг другу.

  • «Аудиоустройство» обычно относится к исполняемому коду в MacOS папка в пакете аудиоустройства, как показано на рисунке 1-2. Это - часть, выполняющая работу со звуком. Иногда, как в заголовке этого документа, «аудиоустройство» относится в контексте ко всему пакету аудиоустройства и его содержанию. В этом случае термин «аудиоустройство» соответствует представлению пользователем плагина в файловой системе OS X.

  • “Представление аудиоустройства” относится к графическому интерфейсу пользователя для аудиоустройства, как описано в Представлении Аудиоустройства. Как показано на рисунке 1-2, код для пользовательского представления обычно живет в его собственном пакете в Resources папка в пакете аудиоустройства. Представления являются дополнительными, потому что AudioUnit платформа позволяет хост-приложению создать универсальное представление на основе параметра и кода свойства в аудиоустройстве.

  • “Пакет аудиоустройства” относится к файловой системе, упаковывающей, который содержит аудиоустройство и, дополнительно, пользовательское представление. Когда этот документ использует “пакет аудиоустройства “, это - характеристики упаковки, такие как расширение файла и Info.plist файл, которые важны. Иногда, как в описании того, где установить аудиоустройства, “пакет аудиоустройства” относится к содержанию, а также упаковке. В этом случае это походит на разговор о папке при значении папки и ее содержания.

Аудиоустройства как плагины

В этом разделе Вы узнаете об аудиоустройствах от внешней стороны в. Сначала Вы смотрите на использование аудиоустройства в хост-приложении AU Lab Apple. Оттуда, Вы видите, как аудиоустройство играет роль как компонент в OS X.

Природа плагинов

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

OS X обеспечивает две сменных технологии: архитектура Базовой Основы CFPlugin и Менеджер компонентов. Аудиоустройства являются основанными на менеджере компонентов плагинами. Позже в этом разделе Вы узнаете о поддержке Менеджера компонентов в Ваших аудиоустройствах.

Хост-приложения могут поставить с плагинами, когда использование плагина очевидно для пользователя. В других случаях пользователь может получить плагин и явно добавить его к запущенному приложению.

То, что делает плагины особенными относительно других библиотек кода, является их возможностью внести функции динамично в выполнение хост-приложений. Вы видите это в приложении AU Lab, части установки Инструментов XCode.

Учебное руководство: Используя аудиоустройство в хост-приложении

Это миниучебное руководство иллюстрирует динамический характер плагинов:

  • Добавление аудиоустройства к рабочему хост-приложению

  • Используя аудиоустройство

  • Удаление аудиоустройства от рабочего хост-приложения

По пути это учебное руководство показывает Вам, как начать с очень полезным приложением AU Lab.

1. Запустите хост-приложение аудиоустройства AU Lab (в /Developer/Applications/Audio/) и создайте новый документ AU Lab. Если Вы не сконфигурировали AU Lab для использования стиля документа по умолчанию, Создавание Нового Окна документа открывается. Если AU Lab уже работала, выберите File> New для получения этого окна.

../Art/au_lab_new_doc_1.jpg

Гарантируйте, что конфигурация соответствует настройки, показанные в числе: встроенное Аудио для Аудиоустройства, Строки В для Входного Источника и Стерео для Каналов вывода. Оставьте вкладку Inputs окна несконфигурированной; Вы укажете ввод позже. Нажать «OK».

Новое окно AU Lab открывается, показывая канал вывода, который Вы указали.

../Art/au_lab_new_doc_2.jpg

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

(Более точно Менеджер компонентов OS X вызвал инстанцирование и закрытие аудиоустройств от имени AU Lab. Требования Менеджера компонентов для Аудиоустройств, ниже, объясняет это.)

2. В AU Lab выберите Edit> Add Audio Unit Generator. Диалоговое окно открывается из окна AU Lab, чтобы позволить Вам указать модуль генератора для служения в качестве источника аудиосигналов.

../Art/au_lab_add_generator.jpg

В диалоговом окне гарантируйте, что модуль генератора AUAudioFilePlayer выбран в раскрывающемся Генераторе. Чтобы последовать этому примеру, измените Название группы на Проигрыватель. Нажать «OK».

Можно изменить название группы в любое время путем двойного щелчка по нему в окне AU Lab.

Окно AU Lab теперь показывает дорожку стереовхода. Кроме того, окно инспектора открылось для модуля генератора. При закрытии инспектора можно вновь открыть его путем нажимания прямоугольной кнопки «AU» около вершины дорожки Проигрывателя.

../Art/au_lab_file_player_1.jpg

3. Добавьте один или несколько аудиофайлов к списку Аудиофайлов в инспекторе проигрывателя окно. Сделайте это путем перетаскивания аудиофайлов от Средства поиска, как показано в числе. Помещение некоторых аудиофайлов в инспекторе проигрывателя, которого окно позволяет Вам отправить аудио через приложение AU Lab, и через аудиоустройство, которое Вы добавляете к дорожке Проигрывателя. Примерно любой аудиофайл сделает. Для этого примера музыкальный файл работает хорошо.

../Art/au_lab_copy_sound_file.jpg

Now AU Lab сконфигурирована и готова к Вам добавить аудиоустройство.

4. Для динамичного добавления аудиоустройства к хост-приложению AU Lab щелкните по треугольной кнопке меню в первой строке раздела Effects в дорожке Проигрывателя в AU Lab, как показано в числе.

../Art/au_lab_add_effect_1.jpg

Меню открывается, перечисляя все аудиоустройства, доступные в Вашей системе, расположенной по категориям и производитель. AU Lab получает этот список от Менеджера компонентов, поддерживающего реестр установленных аудиоустройств.

../Art/au_lab_add_effect_2a.jpg

Выберите аудиоустройство из раскрывающегося. Чтобы последовать этому примеру, выберите аудиоустройство AUParametricEQ из подменю Apple. (Это аудиоустройство, предоставленное как часть OS X, является эквалайзером единственной полосы со средствами управления для центральной частоты, усиления и Q.),

AU Lab просит, чтобы Менеджер компонентов инстанцировал аудиоустройства, которое Вы выбрали. AU Lab тогда инициализирует аудиоустройство. AU Lab также открывает Какао аудиоустройства универсальное представление, появляющееся как служебное окно:

../Art/generic_view_1a.jpg

Вы теперь динамично добавили аудиоустройство AUParametricEQ к рабочему хост-приложению AU Lab.

5. Для демонстрации функций аудиоустройства в AU Lab щелкните по кнопке воспроизведения в инспекторе AUAudioFilePlayer для отправки аудио через аудиоустройство. Варьируйтесь ползунки по универсальному представлению для слушания работы аудиоустройства.

6. Для удаления аудиоустройства из хост-приложения еще раз щелкните по треугольной кнопке меню в первой строке раздела Effects в дорожке Проигрывателя, как показано в числе.

../Art/au_lab_remove_effect_1.jpg

От всплывающего меню выберите Remove AUParametricEQ.

../Art/au_lab_remove_effect_2.jpg

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

Роль Core Audio SDK

При создании аудиоустройства с помощью Core Audio SDK Вы получаете леса Менеджера компонентов бесплатно. Вы также получаете всестороннюю поддержку большей части Спецификации Аудиоустройства. Это позволяет Вам сконцентрироваться на более интересных аспектах разработки аудиоустройства: обработка аудиоданных и пользовательский интерфейс.

Вы создаете основанное на SDK аудиоустройство путем разделения на подклассы надлежащих классов в иерархии класса C++ аудиоустройства SDK’s. Приложение: Иерархия классов Аудиоустройства показывает эту иерархию.

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

  • Пакет аудиоустройства. Пакет обертывает аудиоустройство и его представление (если Вы обеспечиваете пользовательское представление), и обеспечивает идентификацию для аудиоустройства, позволяющего OS X, и Менеджер компонентов используют аудиоустройство.

  • Само аудиоустройство. При создании аудиоустройства с Core Audio SDK, как рекомендуется, аудиоустройство наследовалось от иерархии классов SDK’s.

  • Представление аудиоустройства.

  • Core Audio платформы API.

  • Менеджер компонентов.

  • Хост-приложение.

Отошлите к Быстрому Туру по Core Audio SDK, если требуется узнать об остальной части SDK.

Требования менеджера компонентов для аудиоустройств

Менеджер компонентов выступает в качестве посредника для хост-приложения и аудиоустройств, которые он использует — открытие, открытие, инстанцирование и закрытие аудиоустройств от имени узла.

Для OS X для распознавания аудиоустройств они должны удовлетворить определенные требования. Они должны:

  • Будьте упакованы как компонент, как определено Менеджером компонентов

  • Имейте единственную точку входа, которую распознает Менеджер компонентов

  • Имейте ресурс (.rsrc) файл, указывающий уникальный идентификатор в масштабе всей системы и строку версии

  • Реагируйте на вызовы Менеджера компонентов

Удовлетворение этих требований с нуля является значительным усилием и требует сильного схватывания Менеджера компонентов API. Однако Core Audio SDK изолирует Вас от этого. Как продемонстрировано в главе Учебное руководство: Создание Простого Модуля Эффекта с Универсальным Представлением, размещая Менеджер компонентов требует очень небольшой работы при использовании SDK.

Установка аудиоустройства и регистрация

Менеджер компонентов OS X ищет аудиоустройства в некоторых определенных расположениях, одно из которых резервируется для использования Apple.

При установке аудиоустройств во время разработки или развертывания Вы обычно помещаете их в одно из следующих двух расположений:

  • ~/Library/Audio/Plug-Ins/Components/

    Аудиоустройства, установленные здесь, могут использоваться только владельцем домашней папки

  • /Library/Audio/Plug-Ins/Components/

    Аудиоустройства, установленные здесь, могут использоваться всеми пользователями на компьютере

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

Предварительно установленные аудиоустройства OS X входят в расположение, зарезервированное для использования Apple:

/System/Library/Components/

Менеджер компонентов поддерживает кэшируемый реестр аудиоустройств в этих расположениях (вместе с любыми другими плагинами, которые он находит в других стандартных расположениях). Только зарегистрированные аудиоустройства доступны хост-приложениям. Менеджер компонентов обновляет реестр на начальной загрузке системы на пользовательском входе в систему, и каждый раз, когда метка времени модификации одного из трех Components изменения папок.

Хост-приложение может явно зарегистрировать аудиоустройства, установленные в произвольных расположениях при помощи Менеджера компонентов RegisterComponent, RegisterComponentResource, или RegisterComponentResourceFile функции. Аудиоустройства, зарегистрированные таким образом, доступны только хост-приложению, вызывающему регистрацию. Это позволяет Вам использовать аудиоустройства для добавления опций к хост-приложению, которое Вы разрабатываете, не делая Ваших аудиоустройств доступными для других узлов.

Идентификация аудиоустройства

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

Менеджер компонентов идентифицирует аудиоустройства триплетом четырех кодов символов:

  • «Тип» указывает общий тип функциональности, предоставленной аудиоустройством. Таким образом, тип также идентифицирует сменный API аудиоустройства. Таким образом код типа является программно значительным. Например, хост-приложение знает что любое аудиоустройство типа 'aufx' (для “эффекта аудиоустройства”), обеспечивает функциональность DSP.

    Спецификация Аудиоустройства указывает доступные коды типа для аудиоустройств, а также сменный API для каждого типа аудиоустройства.

  • «Подтип» описывает более точно, что аудиоустройство делает, но не является программно значительным для аудиоустройств.

    Например, OS X включает модуль эффекта подтипа 'lpas', названный, чтобы предположить, что это обеспечивает фильтрацию низких частот. Если для Вашего аудиоустройства Вы используете один из подтипов, перечисленных в AUComponent.h заголовочный файл в платформе Аудиоустройства (такой как 'lpas'), Вы намекаете пользователям Вашего аудиоустройства, что оно ведет себя как именованный подтип. Однако хост-приложения не делают предположений о Вашем аудиоустройстве на основе его подтипа. Вы свободны использовать любой код подтипа, включая подтипы, названные с только строчными буквами.

  • “Код производителя” идентифицирует разработчика аудиоустройства.

    Apple ожидает, что каждый разработчик зарегистрирует код производителя, как “код создателя “, на странице Data Type Registration. Коды производителя должны содержать по крайней мере один символ верхнего регистра. После того, как зарегистрированный, можно использовать тот же код производителя для всех аудиоустройств.

В дополнение к этим четырем кодам символов каждое аудиоустройство должно указать правильно форматированный номер версии. Когда Менеджер компонентов регистрирует аудиоустройства, он выбирает новую версию, если больше чем один присутствует в системе.

Как компонент, аудиоустройство идентифицирует свою версию как восьмиразрядное шестнадцатеричное число в его ресурсе (.rsrc) файл. Поскольку Вы будете видеть в Учебном руководстве: Создавая Простой Модуль Эффекта с Универсальным Представлением, Вы указываете эту информацию с помощью XCode.

Вот пример того, как создать номер версии. Это использует искусственно большое количество для иллюстрирования формата однозначно. Для десятичного номера версии 29.33.40, шестнадцатеричный эквивалент 0x001d2128. Формат работает следующим образом на это число:

Рисунок 1-5  , Создающий номер версии аудиоустройства
Constructing an audio unit version number

Четыре старших значащих шестнадцатеричных цифры представляют номер основной версии. Следующие два представляют номер вспомогательной версии. Две младших значащих цифры представляют точечный номер выпуска.

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

Сменные требования API для аудиоустройств

Аудиоустройства вводятся, как описано выше в Идентификации Аудиоустройства. Когда хост-приложение видит тип аудиоустройства, оно знает, как связаться с ним.

Реализация сменного API для любого данного типа аудиоустройства с нуля является значительным усилием. Это требует сильного схватывания Аудиоустройства и Аудио платформы Панели инструментов APIs и Спецификации Аудиоустройства. Однако Core Audio SDK изолирует Вас от большой части этого также. Используя SDK, необходимо реализовать только те методы и свойства, относящиеся к аудиоустройству. (Вы узнаете о механизме свойства аудиоустройства в следующей главе, Аудиоустройстве.)

Спецификация аудиоустройства

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

Спецификация Аудиоустройства описывает:

  • Различные типы Apple, определенные для аудиоустройств, как перечислено в “Типах компонента AudioUnit и подтипах” перечисление в AUComponent.h заголовочный файл в платформе Аудиоустройства

  • Функциональные и поведенческие требования для каждого типа аудиоустройства

  • Сменный API для каждого типа аудиоустройства, включая требуемые и дополнительные свойства

Вы разрабатываете свои аудиоустройства для приспосабливания Спецификации Аудиоустройства. Вы тогда тестируете это соответствие с auval инструмент командной строки, описанный в следующем разделе.

Спецификация Аудиоустройства определяет сменный API для следующих типов аудиоустройства:

  • Модули эффекта ('aufx'), такие как регуляторы громкости, эквалайзеры и реверберации, изменяющие поток аудиоданных

  • Музыкальные модули эффекта ('aumf'), такие как выполняющие мертвую петлю летчики, сочетающие функции модулей инструментов (такие как запуск и остановка выборки) с функциями модулей эффекта

  • Оффлайновые модули эффекта ('auol'), которые позволяют Вам сделать вещи с аудио, которые не практичны в режиме реального времени, таковы как реверсирование времени или предварительная нормализация уровня

  • Модули инструментов ('aumu'), которые берут MIDI и soundbank данные, как введено и обеспечивают аудиоданные, как выведено — разрешение пользователю играть виртуальный инструмент

  • Модули генератора ('augn'), которые программно генерируют поток аудиоданных или играют аудио от файла

  • Преобразователи формата данных ('aufc'), которые изменяют характеристики потока аудиоданных, такие как битовая глубина, частота дискретизации или скорость воспроизведения

  • Модули микшера ('aumx'), которые комбинируют потоки аудиоданных

  • Модули регулировки панорамы ('aupn'), которые распределяют ряд каналов ввода, с помощью spatialization алгоритма, к ряду каналов вывода

Аудиоустройства как экземпляры шаблона разработки Контроллера представления Модели

Команда Core Audio Apple разработала технологию Аудиоустройства вокруг одного из более популярных шаблонов программного дизайна, Контроллера представления Модели или MVC. Посмотрите Контроллер представления Модели для больше об этом образце.

Помните образец MVC, поскольку Вы создаете свои аудиоустройства:

Аудиоустройства в действии

Открытие и закрытие аудиоустройств

Хост-приложения ответственны — с помощью Менеджера компонентов — для нахождения, открытия и закрытия аудиоустройств. Аудиоустройства, в свою очередь, должны быть findable, открываемыми, и closable. Ваше аудиоустройство получает эти атрибуты, когда Вы создаете его из Core Audio SDK и используете шаблоны аудиоустройства XCode.

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

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

Для больше на открытии, открытие и закрытие с Вашей точки зрения как разработчик аудиоустройства, видят Инициализацию Аудиоустройства и Неинициализацию и Закрывающийся в Аудиоустройстве.

Добавление защиты от копирования

Если Вы принимаете решение добавить защиту от копирования к своему аудиоустройству, особенно важно рассмотреть вводную последовательность аудиоустройства. Время для защиты от копирования во время инициализации аудиоустройства — не инстанцирование. Поэтому Вы помещаете код защиты от копирования в переопределение Initialize метод от SDK’s AUBase суперкласс. Вы не помещаете код защиты от копирования в конструктора аудиоустройства.

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

Многократное инстанцирование

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

Можно продемонстрировать многократное инстанцирование в AU Lab. Сначала добавьте один экземпляр модуля эффекта AUParametricEQ к документу AU Lab, как описано выше в Учебном руководстве: Используя Аудиоустройство в Хост-приложении. Тогда вызовите всплывающие меню в дополнительных строках раздела Effects в дорожке Проигрывателя. Можно добавить столько параметрических эквалайзеров с одной полосой к дорожке, сколько Вам нравится. Каждый из этих экземпляров аудиоустройства ведет себя независимо, как Вы видите варьировавшимися настройками в числе:

Рисунок 1-6  Многократное инстанцирование аудиоустройств в AU Lab
Multiple instantiation of audio units in AU Lab

Графики обработки аудиоданных и модель приема

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

Когда Вы работали через Учебное руководство: Используя Аудиоустройство в разделе Host Application ранее в этой главе, приложение AU Lab создало график обработки аудиоданных для Вас. Этот график состоял из модуля генератора AUAudioFilePlayer, модуля эффекта AUParametricEQ, и наконец (не представленный в пользовательском интерфейсе AU Lab) предоставленный Apple модуль I/O AUHAL, взаимодействующий через интерфейс с внешними аппаратными средствами, такими как громкоговорители.

Соединения Графика Обработки аудиоданных предоставляют подробную информацию о том, как работают эти соединения.

График Обработки аудиоданных API, объявленный в Аудио платформе Панели инструментов, обеспечивает интерфейсы для помощи хост-приложениям создать и управлять графиками обработки аудиоданных. То, когда хост-приложение использует этот API, оно использует непрозрачный тип данных, вызвало объект диаграмм (типа AUGraph).

Некоторые приложения, такие как AU Lab, всегда используют объекты диаграмм при соединении аудиоустройств. Другие, как Логика, подключают аудиоустройства друг к другу непосредственно. Отдельное аудиоустройство, однако, не знает, управляет ли его соединениями объект диаграмм от имени хост-приложения, или узлом непосредственно.

Аудиоданные текут в доходах графиков от первого (ввод) для длительности (вывод) узла, как Вы ожидали бы. Управление, однако, вытекает из последнего узла назад к первому. В Core Audio это вызывают моделью приема. Хост-приложение отвечает за вызов получения по запросу.

Можно думать о модели приема с точки зрения соломы в стекле воды. Вода в стекле представляет новые аудиоданные, ожидающие, чтобы быть обработанной. Солома представляет график обработки аудиоданных, или даже единственное аудиоустройство. Действуя как хост-приложение, Вы начинаете поток аудиоданных путем «получения по запросу» (потягивающий) на конце соломы. В частности хост-приложение инициирует поток аудиоданных путем вызова метода рендеринга заключительного узла в графике. Каждый глоток, который Вы берете через солому, соответствует другому получению по запросу части кадров аудиоданных — другой вызов к методу рендеринга заключительного узла.

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

Рисунок 1-7 показывает модель приема в особом случае хост-приложения, использующего два модуля эффекта в последовательности.

Рисунок 1-7  модель приема в действии с двумя модулями эффекта
The pull model in action with two effect units

Вот то, как получение по запросу продолжается на рисунке 1-7:

  1. Хост-приложение вызывает метод рендеринга заключительного узла (модуль эффекта B) в графике, прося одну ценность части обработанных кадров аудиоданных.

  2. Метод рендеринга модуля эффекта B смотрит в его входных буферах для аудиоданных, чтобы обработать, удовлетворить вызов для рендеринга. Если существуют аудиоданные, ожидающие, чтобы быть обработанными, модуль эффекта B использует их. Иначе, и как показано в числе, модуль эффекта B (использование суперкласса в иерархии классов аудиоустройства SDK’s) вызывает метод рендеринга того, что узел подключил к модулю эффекта вводы B. В этом примере модуль эффекта A подключен к вводам B — таким образом, модуль эффекта B надевает модуль эффекта A, просить аудиоданных части структурирует.

  3. Модуль эффекта A ведет себя, как модуль эффекта B делает. Когда этому нужны аудиоданные, это получает его от своего входного соединения, также установленного узлом. Узел подключил модуль эффекта вводы A к обратному вызову рендеринга в узле. Модуль эффекта получения по запросу на обратном вызове рендеринга узла.

  4. Обратный вызов рендеринга узла предоставляет требуемые кадры аудиоданных для осуществления модуля A.

  5. Модуль эффекта процессы часть данных предоставляется узлом. Модуль эффекта тогда предоставляет обработанные кадры аудиоданных, которые ранее требовали (на шаге 2) к модулю эффекта B.

  6. Модуль эффекта B обрабатывает часть данных, предоставленных модулем эффекта A. Модуль эффекта B тогда предоставляет обработанные кадры аудиоданных, которые первоначально требовали (на шаге 1) к хост-приложению. Это завершает один цикл получения по запросу.

Аудиоустройства обычно не знают, подключены ли их вводы и выводы к другим аудиоустройствам, или к хост-приложениям, или к чему-то еще. Аудиоустройства просто реагируют на вызовы рендеринга. Узлы отвечают за установление соединений, и суперклассы (для аудиоустройств, созданных с Core Audio SDK), заботятся о реализации получения по запросу.

Как разработчик аудиоустройства, Вы не должны работать непосредственно с графиками обработки аудиоданных кроме гарантировать, что Ваше аудиоустройство играет хорошо с ними. Вы делаете это, частично, путем обеспечения, что аудиоустройство проходит тест проверки Apple, описанный в Проверке Аудиоустройства с auval Инструментом. Необходимо также выполнить тестирование присоединением аудиоустройство в различных графиках обработки с помощью хост-приложений, как описано в Тестировании Аудиоустройства и Хост-приложениях.

Обработка: суть дела

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

Обработка

Аудиоустройство, обрабатывающее аудиоданные, такие как модуль эффекта, работает с точки зрения рендеринга циклов. В каждом цикле рендеринга, аудиоустройстве:

  • Заставляет часть новых кадров аудиоданных обрабатывать. Это делает это путем вызова функции обратного вызова рендеринга, зарегистрированной в аудиоустройстве.

  • Обрабатывает кадры аудиоданных.

  • Помещает получающиеся кадры аудиоданных в буферы вывода аудиоустройства.

Аудиоустройство выполняет эту работу в полном распоряжении ее хост-приложения. Хост-приложение также определяет номер кадров аудиоданных на часть. Например, AU Lab использует 512 кадров на часть как значение по умолчанию, и можно варьироваться это число от 24 до 4 096. Посмотрите Тестирование с AU Lab.

Программируемый вызов для рендеринга следующей части кадров может поступить от любого из двух мест:

  • От самого хост-приложения, в случае узла с помощью аудиоустройства непосредственно

  • От нисходящего соседа аудиоустройства, в случае аудиоустройства, являющегося частью графика обработки аудиоданных

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

Сброс

Аудиоустройства также должны быть в состоянии корректно прекратить представлять. Например, аудиоустройство, реализующее фильтр IIR, использует внутренний буфер выборок. Это использует значения этих буферизированных выборок при применении плотности распределения к выборкам, которые это обрабатывает. Скажите, что пользователь такого аудиоустройства прекращает играть аудиофайл и затем запускается снова в различной точке в файле. Аудиоустройство, в этом случае, должно начать с пустого буфера обработки избегать вызывать артефакты.

При разработке кода DSP аудиоустройства Вы реализуете a Reset метод для возврата состояния DSP аудиоустройства к тому, чем это было, когда было сначала инициализировано аудиоустройство. Хост-приложения вызывают Reset метод по мере необходимости.

Корректировки при рендеринге

В то время как аудиоустройство представляет, пользователь может скорректировать поведение рендеринга с помощью представления аудиоустройства. Например, в параметрическом аудиоустройстве фильтра, пользователь может скорректировать центральную частоту. Для хост-приложений также возможно изменить рендеринг с помощью автоматизации параметра, описанной в следующем разделе.

Поддержка автоматизации параметра

Параметры позволяют пользователям скорректировать аудиоустройства. Например, аудиоустройство фильтра низких частот Apple имеет параметры для частоты отсечки и резонанса.

Автоматизация параметра позволяет пользовательским корректировкам параметра программы вдоль временной шкалы. Например, пользователь мог бы хотеть использовать аудиоустройство фильтра низких частот для обеспечения эффекта как педаль «вау-вау» гитары. С автоматизацией параметра пользователь мог записать wah-wah эффект и сделать его частью музыкального состава. Хост-приложение записывает ручные изменения вместе с информацией о синхронизации, связывая изменения в маркерах времени для аудиотрека. Узел может тогда воспроизвести изменения параметра для обеспечения автоматизированного управления аудиоустройства.

Хост-приложения могут также предоставить возможность для пользователя для косвенного указания манипулирования параметром. Например, узел мог позволить пользователю нарисовать усиление или панорамирующий кривую вдоль представления формы волны аудиотрека. Узел мог тогда перевести такой ввод графических данных в данные автоматизации параметра.

Автоматизация параметра полагается на три вещи:

  • Возможность аудиоустройства изменить его значения параметров программно по запросу от хост-приложения

  • Возможность представления аудиоустройства отправить уведомления как значения параметров изменяется пользователем

  • Возможность хост-приложения поддерживать запись и воспроизведение данных автоматизации параметра

Некоторые узлы, поддерживающие автоматизацию параметра с аудиоустройствами, являются Логикой Pro, Ableton Живой, и Metro Sagan.

Автоматизация параметра использует Событие Аудиоустройства API, объявленный в AudioUnitUtilties.h заголовочный файл как часть Аудио платформы Панели инструментов. Этот ориентированный на многопотоковое исполнение API обеспечивает механизм уведомления, поддерживающий аудиоустройства хранения, их представления, и размещающий в синхронизации.

Для поддержки автоматизации параметра в аудиоустройстве необходимо создать пользовательское представление. Вы добавляете поддержку автоматизации исполняемому коду представления, используя Событие Аудиоустройства API для поддержки некоторых или всех следующих типов событий:

  • Жесты параметра, включающие kAudioUnitEvent_BeginParameterChangeGesture и kAudioUnitEvent_EndParameterChangeGesture типы событий

  • Изменения значения параметра, идентифицированные kAudioUnitEvent_ParameterValueChange тип события

  • Изменения свойства, идентифицированные kAudioUnitEvent_PropertyChange тип события

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

Представление Аудиоустройства и Определение и Используя Параметры дают больше информации об автоматизации параметра.

Проверка аудиоустройства и тестирование

Проверка Аудиоустройства с auval Инструментом

Apple строго рекомендует проверить Ваши аудиоустройства с помощью auval инструмент командной строки во время разработки. auval инструмент (названный как сокращение «проверки аудиоустройства») идет с OS X. Это выполняет всесторонний комплект тестов на:

  • Сменный API аудиоустройства, как определено его программируемым типом

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

auval инструмент тестирует только надлежащее аудиоустройство. Это не тестирует ни одного следующего:

  • Представления аудиоустройства

  • Архитектура аудиоустройства, с точки зрения использования рекомендуемого шаблона разработки контроллера представления модели для разделения проблем

  • Корректное использование События Аудиоустройства API

  • Качество DSP, качество аудио генерации или качество преобразования формата аудиоданных

auval инструмент может проверить каждый тип аудиоустройства, определенного Apple. При выполнении его это выводит тестовый журнал и суммирует результаты с индикацией «передачи» или "сбоя”.

Для получения дополнительной информации обратитесь к auval встроенная система справочной информации. Видеть auval текст справки, введите следующую команду при подсказке в Терминальном приложении:

auval -h

Тестирование аудиоустройства и хост-приложения

Когда Вы создаете к Спецификации Аудиоустройства, Вы сделали правильную вещь. Такое аудиоустройство должно работать со всеми узлами. Но в сущности разработка не завершена, пока Вы не тестируете свои аудиоустройства в коммерческом применении. Причины включают:

  • Развитие платформ Core Audio и SDK

  • Изменения через версии хост-приложения

  • Особенности в реализации некоторых хост-приложений

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

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

С этим в памяти, следующие разделы обеспечивают обзор основанного на узле тестирования аудиоустройства.

Тестирование с AU Lab

AU Lab, приложение Вы использовали в Учебном руководстве: Используя Аудиоустройство в Хост-приложении, ссылочный узел аудиоустройства. Это находится в активной разработке командой Core Audio Apple. Они сохраняют его в синхронизации с auval инструмент, с платформами Core Audio и SDK, и с самим OS X. Это делает AU Lab первым местом для тестирования аудиоустройств.

Что можно протестировать с AU Lab

Тестирование Вашего аудиоустройства с AU Lab позволяет Вам протестировать:

  • Поведение, с точки зрения того, чтобы быть найденным узлом, выведенным на экран в меню и открытым

  • Представление, и универсальное и пользовательское

  • Слышимая производительность

  • Взаимодействие с другими аудиоустройствами, когда помещено в график обработки аудиоданных

  • Возможности I/O, такие как боковые цепи и многократные выводы, а также основное тестирование монофонической и стереофонической работы

В OS X v10.4 «Тигр», AU Lab позволяет Вам протестировать следующие типы аудиоустройств:

  • Преобразователи

  • Модули эффекта

  • Модули генератора

  • Модули инструментов

Варьируясь характеристики хост-приложения

AU Lab позволяет Вам управлять некоторыми ее характеристиками хостинга, позволяющими Вам протестировать поведение своего аудиоустройства при переменных условиях. Например, можно изменить число кадров аудиоданных для обработки в каждом цикле рендеринга. Вы делаете это использование Предпочтения Устройств.

В AU Lab выберите Preferences из меню AU Lab. Нажмите Devices для показа Предпочтений Устройств:

../Art/au_lab_prefs_1.jpg

Щелкните по всплывающему меню Кадров. Можно выбрать число кадров для аудиоустройства для обработки в каждом цикле рендеринга:

../Art/au_lab_prefs_2.jpg

Щелкните по треугольнику раскрытия для Опытных Настроек. Можно варьироваться ползунок для выбора процента процессорного времени для посвящения обработке аудиоданных. Это позволяет Вам протестировать поведение своего аудиоустройства при переменных условиях загрузки:

../Art/au_lab_prefs_3.jpg

Пользовательское тестирование аудиоустройств

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

  • GarageBand

  • Логика Pro

  • Звуковая дорожка Pro

  • Final Cut Pro

Существует много сторонних и приложений с открытым исходным кодом, поддерживающих аудиоустройства, среди них Живой Ableton, Амэдеус, Смелость, Cubase, Цифровой Исполнитель, DSP-Quattro, Пик, Потягивается, и Metro.