Статьи:

Профиль:

Программирование ВСТ плагина

Вашему внимание предоставляется одна из первых полноценных публикаций на русском  о программировании ВСТ плагинов. Это не перевод, а работа Евгения Fox Троицкого, который также пишет электронную музыку достаточно неплохо. Пересечься с Фоксом мне довелось на замечательном форуме «Арена электронной музыки» (http://forum.theprodigy.ru/).

Общие сведения

В современном мире большое распространение получила электронная музыка. Процесс создания подобной музыки сводится к созданию MIDI инструкций для различных программных синтезаторов (например в виде программных модулей). Далее, MIDI дорожка последовательно преобразуется в цифровой музыкальный файл (например WAV или MP3).
Разрабатываемый VST эффект изменяет звук на основе заданных параметров, в частности таких как время задержки(Delay), отдача (FeedBack), срез частот(Cutoff) на основе HighPass и LowPass фильтров и резонанса(Res).

Использование VST SDK

Технология VST (Virtual Studio Technology) принадлежит немецкой компании Steinberg. Следовательно, необходимо воспользоваться SDK. На сайте компании Steinberg можно найти множество примеров и справочного материала, касающегося создания собственных VST инструментов, и спецификацию (на английском) формата. Вся проблема заключается в том, что, все заголовочные файлы SDK написаны на языке C++, а проект будет разрабатываться на языке Delphi. Решение проблемы состоит в полном переводе SDK с языка C++ на язык Delphi, что было частично сделано мною самостоятельно, частично – третьими лицами.

Спецификация формата VST

Ниже описаны некоторые выдержки из спецификации, которые позволят более детально ознакомиться с форматом VST инструментов.
VST Plug-in – это не приложение для Windows в привычном для нас понимании. Для правильной работы VST инструмента требуется приложение хост (в нашем случае хостом является FL Studio), к которому может быть подключен Plug-in. Хост управляет аудио потоками, и делает возможным работу VST инструмента. Информационный аудио поток состоит из дискретных блоков. Хост управляет такой последовательностью блоков.
С точки зрения приложения хоста, VST инструмент – это черный ящик с определенным числом входов и выходов, и ассоциированных параметров. Хост может автоматизировать ассоциированные параметры, если в VST инструменте они правильно представлены.
Исходный код VST инструмента не зависит от используемой платформы, но скомпилированный Plug-In все же зависит.
На платформе Windows, VST представляется в виде динамически подключаемой многопоточной библиотекой (DLL).

Структура алгоритма

Процессор эффектов должен изменять звук на основе заданных параметров, в частности таких как время задержки(Delay), отдача (FeedBack), срез частот(Cutoff) на основе HighPass и LowPass фильтров и резонанса(Res).
Схема потоков данных:

013

Алгоритм задержки (Delay): Алгоритм затухания (Fadeout)

022

032

Алгоритм фильтрации (Cutoff, Res, HP/LP):

041

Интерфейс

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

051

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

Что располагается на пользовательском интерфейсе:
Delay – Время задержки. При перемещении данного ползунка вправо – время задержки волны увеличивается, влево – уменьшается.
FeedBack –Время затухания эффекта задержки. При перемещении данного ползунка вправо – время затухания увеличивается, влево – уменьшается.
Mix – Уровень смешивания неизменённого звука с изменённым. При перемещении данного ползунка вправо – уровень громкости изменённого звука увеличивается, влево – уменьшается.
OutVol – Уровень громкости на выходе модуля. При перемещении данного ползунка вправо – уровень громкости увеличивается, влево – уменьшается.
Cutoff – Частота пропускания фильтра частот. При перемещении данного ползунка вправо – частота пропускания увеличивается, влево – уменьшается.
Resonance – Усиление оставшихся частот. Чем больше ползунок перемещён вправо – тем больше усиление.
HP/LP – Переключатель режимов работы фильтра. Изменяется при единичном клике.

Ниже приведен граф состояний пользовательского интерфейса :

061

Необходимые файлы из VST SDK

Чтобы реализовать модуль как VST инструмент, необходимо использовать заголовочные файлы из состава Virtual Studio Technology SDK. Модуль будет использовать файлы DAEffect, DAudioEffect.
Любой VST инструмент использует заголовочный файл DAEffect, так как в нем содержится прототип функции Main(). Функция Main() – это единственная функция, которая должна быть описана в секции экспорта библиотеки VST модуля. DAEffect так же содержит такие функции, как getParameter() и setParameter(), которые используются при изменении, например громкости инструмента, и т.п. (параметры), а так же поле для уникального ID, который, согласно спецификации формата, обязательно должен быть у каждого VST инструмента или эффекта, и должен состоять из четырех символов.
Прототип класса TProcessProcc, и TProcessReplacingProc также должен обязательно быть в любом инструменте VST формата, т.к. именно в них происходит воспроизведение потока аудиоданных.
Использование заголовочного файла DAudioEffect также необходимо, т.к, содержит еще некоторые функции для работы с форматом VST. (например такие, как перевод децибелов в строку)

Технический проект

Выбор языка и средств программирования
В качестве языка программирования был выбран Delphi с интегрированоой средой разработки Delphi 7, и переведенные на язык Delphi заголовочные файлы VST SDK. Выбор в пользу этих средств обусловлен простотой языка Delphi, и, следовательно, меньшим затраченным временем на разработку проекта.

Структура данных на выбранном языке программирования

В модуле используются следующие данные:

  • время задержки: целочисленная константа,
  • отдача: целочисленная константа,
  • срез частот: целочисленная константа,
  • резонанс: целочисленная константа,
  • режим фильтра частот: целочисленная константа,
  • выходная громкость: целочисленная константа,
  • смешивание сигналов: целочисленная константа,
  • класс APlugin: содержит все вышеперечисленные параметры, а так же:
    подстройка тона,
    подстройка полутона,
  • массив предустановленных программ (APluginProgram): используется для хранения предустановленных программ. В любое время может быть использована только одна предустановленная программа,
  • текущая нота: целочисленное значение, находящееся в пределах от 0 до 127 (MIDI ноты),
  • нажата нота: значение истинное, если пользователь нажал на клавишу, привязанную к какой-либо ноте.

Основные параметры

Итак, основные параметры модуля – это:

  1. Время задержки (DelayLen)
  2. Отдача (время затухания) (DelayFB)
  3. Срез частот (Cutoff)
  4. Резонанс (Resonance)
  5. Режим фильтра частот (FType)
  6. Выходная громкость (OutVol)
  7. Смешивание сигналов (DryWet)

Всего семь. Их можно описать в разделе объявления констант, т.к. функция setParameter(index: longint) использует индекс параметра (порядковый номер, т.е константу).

Описание параметров в секции объявления констант:

071

Детальные алгоритмы решения задачи

Алгоритм задержки (Delay)
Во-первых, необходимо изменить значение длины задержки логарифмически для достижения большей точности по формуле:

081

где v – значение параметра задержки (delay). Это делается для достижения более точного значения (до четырёх знаков после запятой).
Далее, определяем количество точек смещения звука по формуле:

S=44100v

iгде v – значение параметра задержки. Таким образом минимальное количество точек смещения звука равно пяти, максимальное количество точек равно 44100. Из этого следует, что максимальное время задержки – 1 секунда.
Далее, звук проигрывается в соответствии с рассчитанными параметрами задержки.

Алгоритм затухания (Fadeout)
Необходимо реализовать алгоритм плавного уменьшения уровня громкости эффекта задержки. По формуле:

091

где i – текущая точка звука, B – размер буфера затухания. Далее, чтобы реализовать затухание нужно изменять уровень звука в соответствии с коэффициентом f. Коэффициент f лежит в пределах нуля и единицы.

Алгоритм фильтрации (cutoff, reso, HP/LP)
Реализация фильтра резонанс (reso) заключается в увеличении амплитуды сигнала на данной частоте.
Коэффициент резонанса находится по формуле:

10

где x – значение параметра резонанс (reso), c – значение параметра cutoff.
Затем обрабатываем каждую точку звуковой волны по формулам:

11

где a – предыдущая обработанная точка, b – текущая обрабатываемая точка, i – необработанная точка, c – значение параметра cutoff, r – значение, рассчитанное по формуле коэффициента резонанса.
Далее, на каждый выход отправляется указатель массива с дисретными блоками аудиоданных для каждой волны, где они воспроизводятся и мы слышим звук.
Процесс воспроизведения
Воспроизведение звука в VST можно реализовать двумя способами:

  1. Используя процедуру Process;
  2. Используя процедуру ProcessReplacing;

Оба способа ничем не отличаются друг от друга, поэтому можно использовать любой из них. Но необходимо отметить, что некоторые хосты обрабатывают только процедуру Process, а некоторые – ProcessReplacing (VST SDK), и поэтому, вся процедура воспроизведения будет описана и тем, и другим способом (для универсальности).

Окончательная конфигурация системных требований
X86-совместимый процессор с тактовой частотой не ниже 500 МГц.
Операционная система Windows XP
16 разрядная звуковая карта
Монитор с поддержкой разрешения 800*600 и более.

Отладка и тестирование

Тестирование обработки звука
Для тестирования скомпилированный модуль нужно загрузить в приложение-хост, и затем, поместить модуль на один из свободных каналов микшера

Загрузка модуля в один из свободных каналов:

12

Далее, добавив инструмент, например, FL Keys (фортепиано), вызываем контекстное меню канала нажатием правой кнопки мыши, выбераем инструмент Piano roll. Piano roll — является нотным редактором для любого инструмента.

Вызов Piano Roll :

13

Далее нужно расположить ноты на Piano Roll. Нотная запись в Piano Roll:

14

Далее, закрыв окно редактора Piano Roll, нажатием кнопки Play выполнются MIDI инструкции (ноты). Эффект задержки, предоставляемый модулем, можно посмотреть на мониторе среды FL Studio. Монитор среды FL Studio:

15

Итак, для примера, нужно записать одну любую ноту в Piano roll и в модуле эффектов переместить слайдеры Delay и FeedBack, например на 0.95% и 0.7% соответственно.

Настройки модуля для тестирования:

16

Далее, нажатием кнопки Play, запустить воспроизведение и смотреть на показания монитора среды FL Studio. На мониторе FL Studio наблюдаются плавно уменьшающиеся скачки.

Показания монитора среды FL Studio:

17

Первый скачок – единственная нота, считанная из Piano roll и воспроизведённая инструментом FL Keys, все остальные скачки – результат работы эффекта задержки (Delay)
Ниже приведены показания монитора с выключенным (слайдер Mix установлен в положение 0) эффектом задержки.

Показания монитора среды FL Studio при выключенном эффекте задержки:

18

Далее был проведен тест пропускания низких частот. Для этого нужно переключить модуль в режим LP (Low pass), установить слайдер Cutoff (частота пропускания) в положение 0% (0% приблизительно равно 200 Гц), установить слайдер Resonance (усиление оставшихся частот) на 0.3%, применить эффект, например, к партии ударных и нажать на Play.

Показания монитора среды FL Studio при включенном фильтре частот в режиме пропускания низких частот:

19

На мониторе FL Studio красными вертикальными линиями отображаются воспроизводимые во время теста частоты. Красные линии не появляются дальше отметки «200» на шкале частот, что подтверждает правильную работу фильтра в режиме пропускания нижних частот.

Следующим тестом был тест пропускания высоких частот. Для этого нужно переключить модуль в режим HP (High pass), установить слайдер Cutoff (частота пропускания) в положение 1.0% (1.0% приблизительно начиная с 3200 Гц и выше), установить слайдер Resonance (усиление оставшихся частот) на 0.85%, применить эффект, например, к партии ударных и нажать на Play.

20

На мониторе FL Studio красными вертикальными линиями отображаются воспроизводимые во время теста частоты. Красные линии не появляются до отметки «2k» на шкале частот, что подтверждает правильную работу фильтра в режиме пропускания высоких частот.

Таким образом, можно отметить, что модуль эффектов работает корректно. Так же не вызвал затруднений вызов предустановленных настроек модуля. При вызове контекстного меню на канале с ассоциированным модулем Foxeffectunit, выбором пункта меню PRESETS, открывается список доступных настроек.

Предустановленные настройки модуля:

21

Руководство пользователя

Назначение программы и область применения
Модуль Fox effect unit предназначен обработки звуковой волны в соответствии с заданными параметрами. Может применяться совместно с другими эффект-процессорами при написании авторской музыки. Модуль Foxeffectunit представляет эффекты задержки, пропускания частот, усиления оставшихся частот, которые можно применять к любой звуковой волне.

Конфигурация технических средств
X86-совместимый процессор с тактовой частотой не ниже 500 МГц (Intel: Celeron, Pentium II/III/IV/Xeon, AMD: K6-2, K6-3, Athlon, Duron, Athlon64).
DirectX-совместимая видеокарта с поддержкой режима 800*600, наличие установленного. Монитор с поддержкой разрешения 800*600.
Операционная система Windows 98/98SE/2000/XP.
Устройство чтения компакт-дисков (CD-ROM).
400 Мб на жёстком диске.
Манипулятор «мышь» или любое совместимое устройство ввода (трекбол, дигитайзер).

Описание работы с программой
Установка и запуск программы
Модуль Foxeffectunit поставляется вместе со средой FL Studio и выше на одном CD-ROM диске. Для установки вставьте компакт-диск в устройство чтения компакт-дисков.
Модуль может работать как в среде FL Studio, так и в других программах-хостах (например: CakeWalk Sonar 7, Logic, Cubase и пр.), поэтому необходимо проинсталлировать FL Studio.
Для этого запустите файл flstudio6_install.exe, находящийся в корневом каталоге прилагаемого компакт-диска.
Нажав кнопку Next в окне инсталлятора откроется лицензионное соглашение.

22

Далее, в строке Name нужно ввести имя пользователя (ник например), и, выбрать вариант установки Install for (по умолчанию установлено в положение Current user only).

Нажав кнопку Next, в окне инсталлятора нужно выбрать компоненты FL Studio, которые вы хотите установить, отметив нужные пункты в текущем окне. Ниже описаны все компоненты установки.

FL Studio (required) – среда FL Studio (является необходимым пунктом).
Desktop Icon – создать иконку рабочего приложения на рабочем столе.
DXi – среда FL Studio в формате Microsoft DXi (для использования FL Studio в друтих приложениях-хостах).
VSTi – среда FL Studio в формате Steinberg VSTi (для использования FL Studio в друтих приложениях-хостах).
ReWire – среда FL Studio в формате PropellerHead ReWire (для использования FL Studio в друтих приложениях-хостах).
Collab 1.1 – средство коллективного использования FL Studio в рамках проекта.
Import old settings – использовать старые настройки FL Studio.
Нажав кнопку Next, в поле Destination folder введите путь до каталога, куда нужно установить FL Studio.
При последующем нажатии кнопки Next, в поле Destination folder введите путь до каталога, где будут храниться ваши VST плагины.
Нажав кнопку Next, в текущем окне нужно нажать кнопку Install, чтобы начать установку FL Studio.

Следующий этап – загрузка модуля Foxeffectunit в среду FL Studio. Для этого скопируйте модуль FoxEffectUnit.dll в папку PlugIns\VST каталога FL Studio:

23

Запустите файл FL.exe, находящийся в каталоге FL Studio.
После загрузки среды FL Studio начните новый проект (Меню File->New). Далее, нажатием кнопки F9 вызываете Mixer (микшер), выберите свободный канал, выберите свободный слот, пункт меню select->add one->more…

24

В раскрывшемся списке нужно нажать кнопку Refresh, и выбрать в появившемся меню пункт Fast Scan (recommended). Поиск новых программных модулей:

25

Через некоторое время, в текущем окне появится пункт Foxeffectunit, выделенный красным цветом

26

Слева от названия поставьте флажок F.

Закройте текущее окно. Теперь модуль Foxeffectunit находится в списке доступных инструментов.
Далее, выбрать пункт меню channels->add one. В раскрывшемся списке выбрать пункт Foxeffectunit.

Добавление модуля в свободный слот:

27

Управление настройками эффектов
Внешний вид программного модуля после загрузки изображен ниже

28

Каждый слайдер ассоциирован с одоименным параметром. Например, слайдер Delay изменяет время задержки.
Перемещение ползунка вправо увеличивает значение параметра, влево – уменьшает.
Переключение режима работы фильтра производится одним кликом по надписи HP (либо по LP, в зависимости от выбранного ранее режима).

Руководство системного программиста

Общие сведения о программе
Модуль Foxeffectunit предназначен для создания различных эффектов, которые в последующем возможно использовать в авторских музыкальных композициях.
Модуль работает только в связке с приложением-хостом (FL Studio). Для удаления модуля из системы, нужно просто удалить файл Foxeffectunit.dll из папки PlugIns\VST каталога FL Studio.
Для удаления FL Studio нужно запустить файл uninstall.exe
Структура модуля
Foxeffectunit реализован в формате программного VST модуля. Foxeffectunit состоит из единственного модуля Foxeffectunit.dll Никаких модулей расширения возможностей и дополнительных модулей не предусмотрено.
Настройка модуля
Модуль имеет настраиваемые параметры звука: время задерки, время затухания, уровень громкости, микширование, частота пропускания, усиления оставшихся частот.
Имеется возможность загрузки предустановленных параметров настройки программного модуля.
Проверка модуля
Оценить правильность работы программного модуля можно только путём прослушивания звука, а также при помощи визуального наблюдения в мониторе FL Studio.

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

Скачать код программы

Автор работы:  Евгений Троицкий

3 комментарияПрограммирование ВСТ плагина

Вы должны быть залогинены для комментирования.