- PVSM.RU - https://www.pvsm.ru -
Этот пост — первый из серии переводов руководства [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]):
Как видите, в GUI присутствуют элементы управления (чаще всего это какие-нибудь ручки), меняющие то, как плагин обрабатывает входящие данные. Еще есть набор пресетов (предустановок — на скриншотах они называются Combo и Emulator), в которых хранятся положения ручек и других параметров.
Начнем мы с дисторшена — это достаточно простой плагин. После этого мы сделаем вот такой субстрактивный синтезатор, шаг за шагом:
Будем использовать С++ и библиотеку WDL-OL [13]. Она основана на библиотеке Cockos WDL [14] (произносится как «уитл»). Она делает за нас кучу работы, вот самые важные моменты:
Также в этой библиотеке есть некоторые часто используемые алгоритмы, например, передискретизация. Вот в этой ветке [15] форума есть много скринов плагинов, написанных при помощи WDL.
Разные форматы плагинов делают более-менее одно и то же. Следовательно, в коде обычно бывает много копипасты. Как программист, вы должны стараться не повторяться [16], так что рано или поздно вы бы написали свой собственный слой абстракции над разными форматами. Но это уже существует в виде фрэймворка IPlug, являющегося частью WDL. Это самая раздражающая часть процесса разработки, так что теперь мы сможем сфокусироваться на таких интересных штуках, как:
Еще одна замечательная вещь в WDL это разрешительная лицензия. Библиотеку можно свободно использовать даже в коммерческих продуктах (см. детальную информацию по ссылкам выше).
«Погоня лучше, чем добыча» — Эйч Пи Бакстер
В программировании результат сам по себе — это уже вознаграждение, но именно по пути к результату мы учимся. В этом руководстве не будет длинных листингов с идеальными решениями. Мы начнем с того, что работает, и будем постепенно развивать это, встречаясь с разными проблемами. Минус в том, что вы будете писать код, который впоследствии замените на лучший. Но программистам к этому не привыкать. Первый плюс: не будет переполняющей радости, т. к. мы будем подходить к решению постепенно вместо того, чтобы сделать все одним махом. Второй — это то, что мы получим некоторые ценные знания в программировании.
Эта серия постов — не о решении задач по матану без калькулятора на бумажке. Она о том, как создавать хорошее программное обеспечение, которое вы можете дать своему другу-продюсеру, чтобы он сделал бас пожирнее.
Пара ссылок, которые нам могут пригодиться:
Теперь пора все настроить и подготовить.
Сейчас мы установим библиотеку WDL-OL и ее зависимости. Затем запустим пример, просто чтобы убедиться, что все работает как надо.
Большая часть этого материала есть в видео Оли Ларкина:
Материал следующей секции в основном для настройки на Mac. Windows будет немного ниже.
Перед тем, как мы начнем, надо скачать и установить парочку новых вещей. Это немного муторно, но придется сделать только один раз.
Предварительная подготовка
Откройте 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. Скопируйте из следующим образом:
Обратите внимание, что папку public.sdk надо будет создать вручную. Так в итоге должно выглядеть ваше дерево папок:
Теперь откройте 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. Если он у вас уже установлен, переходите к пункту «Запуск тестового проекта». Если нет, то читайте дальше:
Чтобы его установить, нужно скачать 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:
В WDL-OL есть маленький баг: самостоятельное приложение не будет выводить звук, если не выбрать другой аудиовход. Но это легко исправить. В навигаторе проектов Xcode откройте Other Sources → OSX App Wrapper → app_main.h. Измените содержание 34-й строки (в которой #define DEFAULT_INPUT_DEV
) на следующее:
#define DEFAULT_INPUT_DEV "Built-in Microphone"
Кликните Run. Выскочат несколько ошибок линкера:
Их легко исправить. Вернитесь в настройки сборки вашего проекта (убедитесь, что вы выбрали именно ваш проект, а не какой-то другой target) и поменяйте значение параметра Implicitly Link Objective-C Runtime Support на No:
Снова кликните Run. Через пару секунд плагин появится в виде самостоятельного приложения:
Если у вас нет 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) и запустите сборку снова. Теперь должно заработать.
Для начала установите 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.
Чтобы наверняка иметь правильную конфигурацию, удалите следующие продукты и установите их в таком порядке:
Пост с описанием других возможных проблем и их решений находится здесь [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:
Теперь скопируйте все файлы 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 выделено жирным:
Если это не так, кликните по нему и выберите Set as StartUp Project. Жмите F5, должно появиться такое окно:
Мило, да?
Если вы видите ошибку 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/
Нажмите здесь для печати.