- PVSM.RU - https://www.pvsm.ru -

Создание аудиоплагинов, часть 1

Этот пост — первый из серии переводов руководства [1] Мартина Финке о написании собственных аудио плагинов.
Отличительной особенностью этого материала является отсутствие зависимости от формата плагина и платформы его использования. Внимание сфокусировано на общей структуре аудиоплагина. Затем алгоритмы оборачиваются в слой абстракции для сборки в форматы VST [2], VST3 [3], AU [4], RTAS [5], AAX [6] или в отдельное приложение.
Сам Мартин больше работает на Маке, но руководство содержит и все необходимые шаги для разработки на Windows.

Введение


Аудиоплагины — это программы, которые загружаются в хост (например Ableton Live [7], Logic [8] или REAPER [9]). Они обрабатывают аудио иили MIDI данные. У них, как правило, есть GUI (графический пользовательский интерфейс). Вот три примера (U-He Zebra [10], Sonalksis FreeG [11] и D16 Decimort [12]):

Создание аудиоплагинов, часть 1

Как видите, в GUI присутствуют элементы управления (чаще всего это какие-нибудь ручки), меняющие то, как плагин обрабатывает входящие данные. Еще есть набор пресетов (предустановок — на скриншотах они называются Combo и Emulator), в которых хранятся положения ручек и других параметров.

Начнем мы с дисторшена — это достаточно простой плагин. После этого мы сделаем вот такой субстрактивный синтезатор, шаг за шагом:

Будем использовать С++ и библиотеку WDL-OL [13]. Она основана на библиотеке Cockos WDL [14] (произносится как «уитл»). Она делает за нас кучу работы, вот самые важные моменты:

  • Содержит уже готовые проекты Xcode / Visual Studio
  • Создает плагины в форматах VST, AudioUnit, VST3 и RTAS из нашего кода. Просто выбираем формат и жмем запустить!
  • Создает 3264-битные версии
  • Запускает ваш плагин как самостоятельное приложение в Windows или MacOS
  • Содержит множество разных элементов GUI, которые используются в аудиоплагинах

Также в этой библиотеке есть некоторые часто используемые алгоритмы, например, передискретизация. Вот в этой ветке [15] форума есть много скринов плагинов, написанных при помощи WDL.

Разные форматы плагинов делают более-менее одно и то же. Следовательно, в коде обычно бывает много копипасты. Как программист, вы должны стараться не повторяться [16], так что рано или поздно вы бы написали свой собственный слой абстракции над разными форматами. Но это уже существует в виде фрэймворка IPlug, являющегося частью WDL. Это самая раздражающая часть процесса разработки, так что теперь мы сможем сфокусироваться на таких интересных штуках, как:

  • Обработка аудио и MIDI
  • Внешний вид плагина
  • Интеграция с хостом (автоматизация, пресеты и прочее)

Еще одна замечательная вещь в WDL это разрешительная лицензия. Библиотеку можно свободно использовать даже в коммерческих продуктах (см. детальную информацию по ссылкам выше).

Как мы это сделаем

«Погоня лучше, чем добыча» — Эйч Пи Бакстер

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

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

Что нам понадобится

  • Mac с Xcode 4 или выше, или Windows с Visual Studio C++ 2010 или выше
  • Некоторое понимание С++ (синтаксис, указатели, основы ООП, механизмы памяти). Вы могли слышать, что С++ это тяжелый язык, но мы не будем использовать слишком сложные приемы.
  • Некоторые общие знания о [цифровом] звуке: что такое амплитуда и частота, что делает фильтр, как аудио представляется с определенной частотой дискретизации (sample rate) и битовой глубиной (bit depth). Если вы делали музыку раньше, то, скорее всего, это все вам уже знаете.
  • Заинтересованность в обработке цифровых сигналов и в разработке GUI: это две основные темы данного руководства. Если у вас нет никаких знаний в обработке цифровых сигналов, то по ходу разработки вам придется почитывать дополнительные материалы для заполнения пробелов. Я постараюсь давать ссылки на дополнительное чтение.

Полезные ресурсы

Пара ссылок, которые нам могут пригодиться:

  • Stack Overflow [17]: здесь можно узнать, например, что значат непонятные предупреждения, которые вы будете получать от компилятора.
  • DSP Guide [18]: очень хорошая бесплатная книга (на английском), покрывает больше материала, чем нам нужно. Если вам будет непонятен какой-нибудь концепт из обработки сигналов, почитайте эту тему в ней.

Теперь пора все настроить и подготовить.

Установка и настройка WDL-OL


Сейчас мы установим библиотеку WDL-OL и ее зависимости. Затем запустим пример, просто чтобы убедиться, что все работает как надо.

Большая часть этого материала есть в видео Оли Ларкина:

Материал следующей секции в основном для настройки на Mac. Windows будет немного ниже.

Настройка на Mac OS X с использованием Xcode 4

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

Предварительная подготовка

  1. Если не установлен Xcode [19], скачайте и установите.
  2. Cкачайте последнюю версию VST3 SDK [20]. Для скачивания нужно зарегистрировать аккаунт.
  3. Скачайте Audio Tools for Xcode. В меню Xcode щелкните Open Developer Tool → More Developer Tools… (или кликайте сюда [21]). Найдите Audio Tools for Xcode в списке, скачайте и установите. Для разных OS X есть разные версии, так что выбирайте внимательнее.
  4. Скачайте RtAudio [22] (в пакет включены некоторые нужные файлы из ASIO SDK).
  5. Если у вас нету git, стоит его установить [23].

Загрузка WDL-OL

Откройте Terminal [24] и напечатайте следующие строки, чтобы создать новую папку в вашей домашней директории и переместиться туда:

mkdir ~/plugin-development
cd !$

Давайте загрузим WDL-OL:

git clone https://github.com/olilarkin/wdl-ol
cd wdl-ol
git checkout 0a360c90b3460717210eeaee7464bc7009c9a5ba .

Эти строчки можно скопировать и вставить. Главное — не забудьте точку в конце! Тогда вы наверняка будете использовать ту же версию WDL-OL, что и в этом руководстве. На данный момент должна появиться подпапка wdl-ol.

Добавление зависимостей

Заходите в ASIO_SDK и скопируйте сюда файлы .cpp и .h из папки include из RtAudio.
Разархивируйте VST3 SDK и скопируйте файлы aeffect.h и aeffectx.h из папки pluginterfaces/vst2.x в подпапку wdl-ol/VST_SDK (они могут быть уже включены в VST3 SDK в подпапке pluginterfaces/vst2.x). Помимо этого для VST3 вам понадобятся base/source, pluginterfaces и public.sdk/source. Скопируйте из следующим образом:

Создание аудиоплагинов, часть 1

Обратите внимание, что папку public.sdk надо будет создать вручную. Так в итоге должно выглядеть ваше дерево папок:

Создание аудиоплагинов, часть 1

Теперь откройте common.xcconfig (он должен открыться в Xcode) и внесите следующие изменения:

CERTIFICATE_ID = Your Name

// Comment this line out:
// COMPILER = com.apple.compilers.gcc.4_2
// Uncomment this line:
COMPILER = com.apple.compilers.llvm.clang.1_0

// Add these lines:
VST_FOLDER = ~/Library/Audio/Plug-Ins/VST
VST3_FOLDER = ~/Library/Audio/Plug-Ins/VST3
AU_FOLDER = ~/Library/Audio/Plug-Ins/Components
// Comment these out:
//VST_FOLDER = /Library/Audio/Plug-Ins/VST
//VST3_FOLDER = /Library/Audio/Plug-Ins/VST3
//AU_FOLDER = /Library/Audio/Plug-Ins/Components

Также мы будем использовать Mac OS X 10.5 для переменных BASE_SDK и MACOSX_DEPLOYMENT_TARGET. Продюсеры, и в особенности владельцы студий, часто очень ленятся обновлять свою ОС. Им не нужны новые фишки, а вот несколько дней простоя из-за проблем с обновлением софта могут вылиться в большие финансовые потери.
На самом деле deployment target содержит информацию о той версии, которая понадобится пользователям, но я предпочитаю прописывать ту же версию для основного SDK.
SDK 10.5 не включен в Xcode 4. Если он у вас уже установлен, переходите к пункту «Запуск тестового проекта». Если нет, то читайте дальше:

Установка SDK 10.5

Чтобы его установить, нужно скачать Xcode 3.2.6 [25]. Когда вы его скачаете, смонтируйте .dmg файл, откройте Terminal.app и введите

open /Volumes/Xcode and iOS SDK/Packages/

Откроется окно поисковика и там будет файл с именем MacOSX10.5.pkg. Щелкнике по нему два раза. Если у вас версия OS X 10.8 или выше, появится сообщение, что программа от неизвестного разработчика не может быть установлена. В этом случае правый клик по файлу, в меню надо нажать Open и подтвердить, что вы действительно хотите установить софт. При установке выберите change install location, кликните по диску, на который хотите установить, чтобы можно было выбрать на нем директорию. Установите, например, в папку Downloads в папке пользователя. После завершения установки в выбранном месте появится новая папка MacOSX10.5.sdk. Напечатайте в Terminal.app следующее:

open /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

Снова появится окно поисковика. Перетащите в него папку MacOSX10.5.sdk. После перезапуска Xcode старый SDK должен быть доступен в Xcode 4. Убедитесь, что вы сделали резервную копию MacOSX10.5.sdk где-нибудь: если вы будете обновлять Xcode до более поздней версии, вам, возможно, придется повторить эти действия.

Запуск тестового проекта

В Терминале перейдите в папку с примерами:

cd IPlugExamples

Запустите скрипт dublicate чтобы создать свой первый плагин (замените YourName что-нибудь свое):

./duplicate.py IPlugEffect/ MyFirstPlugin YourName

Теперь там появилась новая папка MyFirstPlugin. Зайдите в нее и откройте MyFirstPlugin.xcodeproj. Выберите таргет APP:

Создание аудиоплагинов, часть 1

В WDL-OL есть маленький баг: самостоятельное приложение не будет выводить звук, если не выбрать другой аудиовход. Но это легко исправить. В навигаторе проектов Xcode откройте Other Sources → OSX App Wrapper → app_main.h. Измените содержание 34-й строки (в которой #define DEFAULT_INPUT_DEV) на следующее:

#define DEFAULT_INPUT_DEV "Built-in Microphone"

Кликните Run. Выскочат несколько ошибок линкера:

Создание аудиоплагинов, часть 1

Их легко исправить. Вернитесь в настройки сборки вашего проекта (убедитесь, что вы выбрали именно ваш проект, а не какой-то другой target) и поменяйте значение параметра Implicitly Link Objective-C Runtime Support на No:

Создание аудиоплагинов, часть 1

Снова кликните Run. Через пару секунд плагин появится в виде самостоятельного приложения:

Создание аудиоплагинов, часть 1

Проверка версии AudioUnit при помощи Logic

Если у вас нет Logic, можно использовать бесплатный инструмент auval для проверки. Убедитесь, что сборка AU Target прошла успешно, откройте Terminal и введите:

auval -a 2> /dev/null | grep MyFirstPlugin

Он должен выдать что-то типа этого:

aumu Abcd Efgh - YourName: MyFirstPlugin

Если Logic или auval не находят AU (а другие хосты типа REAPER его видят), зайдите в настройки сборки и убедитесь, что вверху слева выделен таргет AU. В поиске вбейте “active arch”. В результатах должна быть только одна строка параметра Build Active Architecture Only, значение которого . Измените его на No. Таким образом 32-х и 64-х битные версии будут компилироваться даже в режиме Debug. После этого зайдите в Product → Clean (Cmd+Shift+K) и запустите сборку снова. Теперь должно заработать.

Установка на Windows с использованием Visual C++ 2010 Express


Для начала установите Visual C++ 2010 Express [26].VS 2012 вроде тоже подойдет, но лично я не проверял.

Для создания 64-х битных версий плагинов понадобится обновление компилятора, что, в свою очередь, может требовать наличия Windows SDK v 7.1. Корректная установка Windows SDK v 7.1 после установки обновления VisualStudio 2010 SP1 очень затруднительна. При установке может выскочить fatal error.
Чтобы исправить положение, повторно запустите установщик Windows SDK v 7.1 и снимите галочку с Visual C++ Compilers and libraries.
Чтобы наверняка иметь правильную конфигурацию, удалите следующие продукты и установите их в таком порядке:

  1. Visual Studio 2010
  2. Windows SDK 7.1
  3. Visual Studio 2010 SP1
  4. Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1

Пост с описанием других возможных проблем и их решений находится здесь [27].

Затем установите Git для Windows [28], используя настройки по умолчанию. Я использовал версию 1.8.4. Запустите Start → Program Files → Git → Git Bash. Откроется окно терминала. В этом окне введите несколько команд:

cd c:
git clone https://github.com/olilarkin/wdl-ol
cd wdl-ol
git checkout 0a360c90b3460717210eeaee7464bc7009c9a5ba .

Чтобы вставить строки в окно, сделайте правый клик по его заголовку и выберите Edit → Paste:

Создание аудиоплагинов, часть 1

Теперь скопируйте все файлы VST2/VST3/ASIO SDK в нужные папки, так же, как описано выше. Установите Python, используя настройки по умолчанию. Я использовал 2.7.5.

Чтобы создавать плагины формата VST3, надо создать папку VST3. Выполните в терминале эту команду:

mkdir -p "C:Program FilesCommon FilesVST3"

Теперь перейдите в терминале в подпапку IPlugExamples:

cd IPlugExamples/

Запустите скрипт duplicate при помощи Python:

c:Python27python.exe duplicate.py IPlugEffect MyFirstPlugin YourName

Появится новая папка MyFirstPlugin. Зайдите в нее и откройте MyFirstPlugin.sln. Не обращайте внимания на предупреждения, они говорят о том, что мы не сможем собрать форматы AAX и TDM. В окне project explorer слева убедитесь, что MyFirstPlugin-app выделено жирным:

Создание аудиоплагинов, часть 1

Если это не так, кликните по нему и выберите Set as StartUp Project. Жмите F5, должно появиться такое окно:

Создание аудиоплагинов, часть 1

Мило, да?

Возможные проблемы

Если вы видите ошибку fatal error LNK1123 в процессе сборки, вам нужно отключить incremental linking: правым кликом по проекту MyFirstPlugin-app, кликайте по Properties и заходите в Configuration Properties → Linker (General) → Enable Incremental Linking → “No (/INCREMENTAL:NO)”.
Если проблема не решается, попробуйте установить Visual Studio 2010 SP1 [29], если еще не устанавливали. Так же может пригодиться обновление компилятора [30] для создания 64-х битных версий плагинов.

Если появляется предупреждение CreatePackage.bat […] exited with code 1, не надо беспокоиться, разве что вы хотите создавать плагины в формате AAX. Ошибка попросту говорит о том, что не установлен AAX SDK.

Предупреждение Cannot open include file: ‘ForcedInclude.h’: No such file or directory означает, что RTAS SDK не найден. Опять же, если RTAS не нужны, на это можно не обращать внимания.

В следующий раз мы изучим код проекта.

Автор: 1eqinfinity

Источник [31]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/rabota-so-zvukom/61276

Ссылки в тексте:

[1] руководства: http://martin-finke.de/blog/tags/making_audio_plugins.html

[2] VST: http://en.wikipedia.org/wiki/Virtual_Studio_Technology

[3] VST3: http://www.steinberg.net/en/company/technologies/vst3.html

[4] AU: http://en.wikipedia.org/wiki/Audio_Units

[5] RTAS: http://en.wikipedia.org/wiki/Real_Time_AudioSuite

[6] AAX: http://www.protoolerblog.com/2011/10/20/aax-a-new-plugin-format/

[7] Ableton Live: http://www.ableton.com/live

[8] Logic: http://www.apple.com/logic-pro/

[9] REAPER: http://http//reaper.fm

[10] U-He Zebra: http://www.u-he.com/cms/zebra

[11] Sonalksis FreeG: http://www.sonalksis.com/freeg.htm

[12] D16 Decimort: http://www.d16.pl/index.php?menu=203

[13] WDL-OL: https://github.com/olilarkin/wdl-ol

[14] Cockos WDL: http://www.cockos.com/wdl/

[15] этой ветке: http://forum.cockos.com/showthread.php?t=122276

[16] не повторяться: http://ru.wikipedia.org/wiki/Don%E2%80%99t_repeat_yourself

[17] Stack Overflow: http://http//stackoverflow.com/

[18] DSP Guide: http://www.dspguide.com/pdfbook.htm

[19] Xcode: https://developer.apple.com/xcode/

[20] VST3 SDK: http://www.steinberg.net/en/company/developer.html

[21] сюда: https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-

[22] RtAudio: http://www.music.mcgill.ca/~gary/rtaudio/

[23] установить: http://git-scm.com/downloads

[24] Terminal: http://smokingapples.com/software/tutorials/mac-terminal-tips/

[25] Xcode 3.2.6: https://developer.apple.com/downloads/index.action?searchTextField=3.2.6

[26] Visual C++ 2010 Express: http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express

[27] здесь: http://www.mathworks.com/matlabcentral/answers/101105-how-do-i-install-microsoft-windows-sdk-7-1

[28] Git для Windows: http://git-scm.com/download/win

[29] Visual Studio 2010 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=23691

[30] обновление компилятора: http://www.microsoft.com/en-us/download/details.aspx?id=4422

[31] Источник: http://habrahabr.ru/post/224911/