Створення аудіоплагіна, частина 1

    Цей пост — перший із серії перекладів керівництва Мартіна Фінке про написання власних аудіоплагіна.
Відмінною особливістю цього матеріалу є відсутність залежності від формату плагіна і платформи його використання. Увага сфокусовано на загальній структурі аудіоплагіна. Потім алгоритми обертаються в шар абстракції для складання в формати VST , VST3 , AU , RTAS , AAX або в окремий додаток.
Сам Мартін більше працює на Маку, але керівництво містить і всі необхідні кроки для розробки на Windows.
 
 Введення
Аудіоплагіна — це програми, які завантажуються в хост (наприклад Ableton Live , Logic або REAPER ). Вони обробляють аудіо та \ або MIDI дані. У них, як правило, є GUI (графічний користувальницький інтерфейс). Ось три приклади (U-He Zebra , Sonalksis FreeG і D16 Decimort ):
 
 
 
Як бачите, в GUI присутні елементи управління (найчастіше це які-небудь ручки), що міняють то, як плагін обробляє вхідні дані. Ще є набір пресетів (предустановок — на скріншотах вони називаються Combo і Emulator), в яких зберігаються положення ручок та інших параметрів.
 
Почнемо ми з дісторшен — це досить простий плагін. Після цього ми зробимо ось такий субстрактівний синтезатор, крок за кроком:
 
  
Будемо використовувати С + + і бібліотеку WDL-OL . Вона заснована на бібліотеці Cockos WDL (вимовляється як «Вітлі»). Вона робить за нас купу роботи, ось найважливіші моменти:
 
 
     
  • Містить вже готові проекти Xcode / Visual Studio
  •  
  • Створює плагіни в форматах VST, AudioUnit, VST3 і RTAS з нашого коду. Просто вибираємо формат і тиснемо запустити!
  •  
  • Створює 32 \ 64-бітові версії
  •  
  • Запускає ваш плагін як самостійний додаток в Windows або MacOS
  •  
  • Містить безліч різних елементів GUI, які використовуються в аудіоплагіна
  •  
 
Також в цій бібліотеці є деякі часто використовувані алгоритми, наприклад, передискретизація. Ось в цій гілці форуму є багато скрінів плагінів, написаних за допомогою WDL.
 
Різні формати плагінів роблять більш-менш одне й те ж. Отже, в коді зазвичай буває багато копіпаст. Як програміст, ви повинні намагатися не повторюватися , так що рано чи пізно ви б написали свій власний шар абстракції над різними форматами. Але це вже існує у вигляді фреймворка IPlug, що є частиною WDL. Це сама дратує частину процесу розробки, так що тепер ми зможемо сфокусуватися на таких цікавих штуках, як:
 
 
     
  • Обробка аудіо та MIDI
  •  
  • Зовнішній вигляд плагіна
  •  
  • Інтеграція з хостом (автоматизація, пресети та інше)
  •  
 
Ще одна чудова річ в WDL це дозвільна ліцензія. Бібліотеку можна вільно використовувати навіть в комерційних продуктах (див. детальну інформацію по посиланнях вище).
 
 

Як ми це зробимо

 
«Погоня краще, ніж видобуток» — Ейч Пі Бакстер
 
У програмуванні результат сам по собі — це вже винагорода, але саме по шляху до результату ми вчимося. У цьому керівництва не буде довгих лістингів з ідеальними рішеннями. Ми почнемо з того, що працює, і будемо поступово розвивати цей, зустрічаючись з різними проблемами. Мінус в тому, що ви будете писати код, який згодом замініть на кращий. Але програмістам до цього не звикати. Перший плюс: чи не буде переповнює радості, т. к. ми будемо підходити до вирішення поступово замість того, щоб зробити все одним махом. Другий — це те, що ми отримаємо деякі цінні знання в програмуванні.
 
Ця серія постів — не про вирішення завдань по Маттани без калькулятора на папірці. Вона про те, як створювати гарне програмне забезпечення, яке ви можете дати своєму другові-продюсеру, щоб він зробив бас пожирнее.
 
 

Що нам знадобиться

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

Корисні ресурси

Пара посилань, які нам можуть знадобитися:
 
 
     
  • Stack Overflow : тут можна дізнатися, наприклад, що значать незрозумілі попередження, які ви будете отримувати від компілятора.
  •  
  • DSP Guide : дуже хороша безкоштовна книга (англійською), покриває більше матеріалу, ніж нам потрібно. Якщо вам буде незрозумілий небудь концепт з обробки сигналів, почитайте цю тему в ній.
  •  
 
Тепер пора все налаштувати і підготувати.
 
 Встановлення та налаштування WDL-OL
Зараз ми встановимо бібліотеку WDL-OL і її залежності. Потім запустимо приклад, просто щоб переконатися, що все працює як треба.
 
Більша частина цього матеріалу є у відео Олі Ларкіна:
 
  
  
Матеріал наступної секції в основному для налаштування на Mac. Windows буде трохи нижче.
 
 Налаштування на Mac OS X з використанням Xcode 4
Перед тим, як ми почнемо, треба скачати і встановити парочку нових речей. Це трохи моторошно, але доведеться зробити тільки один раз.
 
Попередня підготовка
 
 
     
  1. Якщо не встановлений Xcode , скачайте і встановіть.
  2.  
  3. cкачать останню версію VST3 SDK . Для скачування потрібно зареєструвати аккаунт.
  4.  
  5. Скачайте Audio Tools for Xcode . У меню Xcode клацніть Open Developer Tool → More Developer Tools… (або клікайте сюди ). Знайдіть Audio Tools for Xcode в списку, скачайте і встановіть. Для різних OS X є різні версії, так що вибирайте уважніше.
  6.  
  7. Скачайте RtAudio (у пакет включені деякі потрібні файли з ASIO SDK).
  8.  
  9. Якщо у вас нету git , варто його встановити .
  10.  
 
 

Завантаження WDL-OL

Відкрийте Terminal і надрукуйте наступні рядки, щоб створити нову папку у вашій домашній директорії і переміститися туди:
 
 
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. Якщо він у вас вже встановлений, переходьте до пункту «Запуск тестового проекту». Якщо ні, то читайте далі:
 
 

Установка SDK 10.5

Щоб його встановити, потрібно завантажити Xcode 3.2.6 . Коли ви його скачаєте, змонтуйте . 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. Через пару секунд плагін з'явиться у вигляді самостійного програми:
 
 
 
 

Перевірка версії 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 . 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.  
  3. Windows SDK 7.1
  4.  
  5. Visual Studio 2010 SP1
  6.  
  7. Visual C + + 2010 SP1 Compiler Update for the Windows SDK 7.1
  8.  
 
Пост з описом інших можливих проблем та їх рішень знаходиться тут .
 
Потім встановіть Git для Windows , використовуючи налаштування за замовчуванням. Я використовував версію 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 Files\Common Files\VST3"

 
Тепер перейдіть в терміналі в підпапку IPlugExamples :
 
 
cd IPlugExamples/

 
Запустіть скрипт duplicate за допомогою Python:
 
 
c:\Python27\python.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 , якщо ще не встановлювали. Так само може стати в нагоді оновлення компілятора для створення 64-х бітових версій плагінів.
 
Якщо відображається попередження
CreatePackage.bat […] exited with code 1
, не треба турбуватися, хіба що ви хочете створювати плагіни у форматі AAX. Помилка попросту говорить про те, що не встановлено AAX SDK.
 
Попередження
Cannot open include file: ‘ForcedInclude.h’: No such file or directory
означає, що RTAS SDK не найден. Знову ж, якщо RTAS не потрібні, на це можна не звертати уваги.
 
Наступного разу ми вивчимо код проекту.
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.