PETELIN.RU | Статьи | SynthEdit 3: создаем VSTi своими руками
PETELIN.RUСтатьи → SynthEdit 3: создаем VSTi своими руками

SynthEdit 3: создаем VSTi своими руками

Роман Петелин

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

Заранее скачайте файл с примерами к данной статье: http://petelin.ru/soft/se.zip. В дальнейшем я буду ссылаться на файлы из этого архива.

Как создать свой собственный VST-плагин? Самый правильный путь: воспользоваться SDK от Steinberg и написать плагин на C++. SDK (Software Development Kit) - набор из средств разработки, исходных кодов программных библиотек, утилит и документации, который позволяет программистам создавать приложения по определенной технологии. SDK для разработки VST разных версий доступны на сайте http://ygrabit.steinberg.de. Именно так и создается большинство популярных коммерческих плагинов. Да вот беда - вы не программист и нет времени на обучение высокому искусству программирования. Тогда выход один - воспользоваться специальным программным продуктом SynthEdit (текущая версия 3), который представляет собой визуальную среду для проектирования VST. С его помощью можно создавать и VST (эффекты и обработки), и VSTi (инструменты).

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

http://www.novakill.com

http://www.spacewindow.pochta.ru

http://www.vsti.resourcez.com

http://www.e-phonic.com

http://krakli.wordpress.com

http://www.tweakbench.com

http://www.greenmachine.pwuq.net.

На сайте http://y0u-file.narod.ru вы найдете бесплатный плагин Polyvoks Station VSTi, которому посвящена статья Ю. Петелина "Куплю советский синтезатор "Поливокс" и продам "Ямаху" (http://petelin.ru/pcmagic/polyvoks/polyvoks.htm). Он тоже создан с помощью SynthEdit.

Существуют также коммерческие плагины, созданные с помощью SynthEdit. Примеры:

http://www.algomusic.net

http://www.psychicmodulation.com

http://www.softplug.com

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

  1. Найдите DLL-файл плагина, щелкните на нем правой кнопкой мыши (откроется контекстное меню).
  2. Выберите Открыть с помощью, затем нажмите кнопку Выбор программы, выберите Выбор программы из списка вручную, нажмите OK, выберите Блокнот, нажмите OK.
  3. В программе Блокнот откроется содержимое DLL-файла (выглядит, как полная тарабарщина).
  4. Воспользуйтесь командой главного меню Правка > Найти для поиска фрагмента текста "synthedit" или "www.synthedit.com".

Нашли? Значит плагин сделан с помощью SynthEdit.

Скачать SynthEdit можно на сайте http://www.synthedit.com в разделе DOWNLOAD. SynthEdit будет работать с некоторыми ограничениями до тех пор, пока вы его не зарегистрируете. Регистрация доступна в разделе REGISTER указанного сайта и стоит 50 USD.

Незарегистрированному SynthEdit присущи следующие ограничения:

  • ограниченное количество пресетов;
  • ограниченное количество аудиоканалов: только два входных и два выходных (т. е. стерео);
  • на панели плагина и в окне About (о программе) отображаются ссылки на то, что плагин сделан с помощью SynthEdit;
  • не позволяет создать всплывающее окно (nag screen) с просьбой зарегистрировать/приобрести плагин.

Идеология SynthEdit такова: вы словно в детском конструкторе собираете виртуальный инструмент из различных модулей (осцилляторов, генераторов, модуляторов, фильтров, проигрывателей звуковых файлов и т. д.). На сайте http://www.synthedit.com в разделе MODULES можно скачать дополнительные модули сторонних разработчиков. Модули представляют собой файлы с расширением SEP, которые следует помещать в папку C:\Program Files\SynthEdit\modules. Если же вы все-таки обладаете навыками программирования, то можете создавать собственные модули для SynthEdit с помощью SDK (раздел DEVELOPMENT KIT сайта).

После запуска SynthEdit проверим настройки аудио- и MIDI-портов: окно Preferences открывается командой главного меню File > Preferences. Порты назначаются на вкладке Audio & MIDI. На вкладке General можно выбрать русский язык (Language) интерфейса. Русифицированы только главное меню и заголовки некоторых окон. Все модули, из которых создаются плагины, останутся англоязычными.

При первом запуске SynthEdit загружается демонстрационный проект demo.se1. Однако он слишком сложен для начального знакомства с возможностями программы.

Давайте создадим новый проект (команда главного меню Файл > Новый). Щелчком правой кнопки мыши в окне проекта открывается контекстное меню. Подменю Insert (по-русски в главном меню это подменю называется Достать) содержит команды добавления модулей (рис. 1).


Рис. 1. Добавление модуля

Для начала добавим модуль Insert > MIDI > MIDI IN. Нетрудно догадаться, что это входной порт, через который синтезатор будет получать команды от приложения-хоста. На время отладки можно задействовать виртуальную MIDI-клавиатуру (модуль Insert > Controls > Keyboard). Для вывода звука будем использовать модуль Insert > Input/Output > Sound Out. Если бы мы проектировали эффект или обработку, то нам потребовался бы модуль Insert > Input/Output > Sound In для ввода звука в будущий плагин.

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

После добавления перечисленных модулей окно проекта будет иметь примерно такой вид, какой показан на рис. 2, а. Теперь все модули входных/выходных портов нужно соединить с модулем контейнера. Начнем с модуля MIDI In: захватим мышью надпись MIDI Data и потянем соединительную линию к надписи Spare модуля контейнера (рис. 2, б). После выполнения соединения на модуле контейнера появится входной порт MIDI Data. Порт MIDI Out клавиатуры Keyboard соединим с портом MIDI Data модуля контейнера. Затем захватим надпись Spare модуля контейнера и протянем соединение с модулем Sound Out. Повторим эту же процедуру и создадим второе аналогичное соединение (два канала образуют стереопару). Результат показан на рис. 2, в.

а
б
в
Рис. 2. Соединение основных модулей

Если возникнет необходимость удаления ошибочного соединения, следует щелкнуть на соединительной линии (она станет толще) и нажать клавишу .

Соединительные линии бывают трех цветов:

  • желтовато-коричневый - передача MIDI-информации;
  • фиолетовый - передача звуковой информации;
  • голубой - передача CV.

CV (Control Voltage) - управляющее напряжение, способ связи электромузыкальных устройств и их блоков в те времена, когда не было интерфейса MIDI. С помощью уровня управляющего напряжения можно передавать информацию о том, какая клавиша нажата, или сведения о положении какого-либо регулятора. Сигналы Gate являются разновидностью CV и позволяют передавать одно из двух состояний чего-либо (например, клавиша нажата/отпущена).

Соединять между собой можно только однотипные входы и выходы модулей.

Контекстное меню каждого из модулей содержит команду Connect, которая открывает окно Коммутировать (рис. 3). Оно предназначено для редактирования соединений альтернативным (не графическим) способом.


Рис. 3. Окно Коммутировать

Командой Properties контекстного меню модуля открывается окно его свойств. На рис. 4 показано окно свойств модуля контейнера. Основные параметры: Title - название модуля (сюда можно вписать название синтезатора), Polyphony - полифония, Skin - скин (оболочка) с дизайном панели управления.


Рис. 4. Свойства модуля контейнера

Переименуем модуль контейнера в MY SYNTH, закроем окно его свойств, сделаем двойной щелчок на заголовке модуля. Откроется окно с содержимым контейнера (рис. 5).


Рис. 5. Открыто окно с содержимым контейнера

По умолчанию контейнер не содержит ничего, кроме модуля IO Mod, в котором собраны все доступные порты для ввода/вывода аудио- и MIDI-данных.

В подменю Insert > Synths контекстного меню окна проекта и окон контейнеров доступны команды добавления "готовых" синтезаторов. Но они опять-таки слишком сложны для понимания на начальном этапе освоения программы.

Создадим простейший синтезатор. Результат (работающая схема синтезатора) приведен на рис. 6, файл проекта - my_synth.se1. Не забыли скачать файл с примерами по адресу http://petelin.ru/soft/se.zip? А теперь я поясню, как эта схема была собрана.


Рис. 6. Простейший синтезатор

Добавим осциллятор (Waveform > Oscillator). Модуль содержит множество управляющих входов, однако мы задействуем не все из них. Первым делом нужно заставить осциллятор генерировать звук, высота которого соответствует номеру MIDI-клавиши. Однако осциллятор управляется посредством CV (управляющего напряжения), и его невозможно подключить ко входному MIDI-порту. Поэтому потребуется добавить модуль преобразователя MIDI в CV (Insert > MIDI > Midi to CV). Выход MIDI Data модуля IO Mod соединим со входом MIDI In модуля Midi to CV. Выход Pitch (высота тона) модуля Midi to CV соединим со входом Pitch модуля Oscillator. Теперь высота тона осциллятора будет управляться по MIDI.

Следующая задача - нужно сделать так, чтобы сигнал осциллятора воспроизводился только тогда, когда MIDI-клавиша нажата. Для этого нам потребуется модуль модулятора амплитуды, управляемый CV (Insert > Modifiers > VCA). Выход Audio Out осциллятора подключим ко входу Signal (модулируемый по амплитуде сигнал) модуля VCA. А на управляющий вход Volume (громкость) модуля VCA подадим сигнал Gate с выхода преобразователя Midi to CV. Сигнал Gate имеет высокий логический уровень тогда, когда MIDI-клавиша нажата, и низкий, когда MIDI-клавиша не нажата. В результате сигнал осциллятора будет проходить через модуль VCA только тогда, когда MIDI-клавиша нажата.

Как вы могли заметить, сигнал осциллятора монофонический. Хорошо бы его развести на два стереоканала. Если этого не сделать, то сигнал синтезатора будет присутствовать только в одном из стереоканалов, что не очень удобно. Добавим модуль панораматора (Insert > Modifiers > Pan). На его вход Input подадим сигнал с выхода Output модуля VCA. Выходы Left Out и Right Out модуля Pan подадим на стереовыход плагина, т. е. соединим их со входами 1 и 2 модуля IO Mod.

Последний штрих - сделаем переключатель волновой формы осциллятора: модуль Insert > Controls > List Entry. Его единственный выход Choice (выбор) соединим со входом Waveform модуля Oscillator. При этом модуль List Entry автоматически переименуется в Waveform.

Теперь можно попробовать наш синтезатор в действии. Но перед этим следует убедиться, что аудиодвижок SynthEdit запущен. Кнопки запуска () и остановки () аудиодвижка расположены на панели инструментов программы (рис. 1).

Все готово? Играйте на MIDI-клавиатуре и слушайте. Выбирать волновую форму осциллятора можно с помощью модуля Waveform.

Наигрались? Давайте немного усложним синтезатор: добавим регуляторы громкости, панорамы, скважности сигнала осциллятора; добавим генератор амплитудной огибающей ADSR и соответствующие регуляторы, индикаторы уровня сигнала; займемся дизайном элементов управления (конечный результат показан на рис. 7, файл проекта my_synth2.se1).


Рис. 7. Модифицированный вариант синтезатора

Добавим генератор огибающей Insert > Waveform > ADSR и включим его в разрыв между модулями Midi to CV и VCA: выход Gate модуля Midi to CV соединим со входом Gate модуля ADSR, выход Signal Out модуля ASDR соединим со входом Volume модуля VCA.

Добавим регулятор для управления панорамой Insert > Controls > Slider. Соединим его выход Signal Out со входом Pan модуля Pan. Модуль Slider автоматически переименуется в Pan.

Откроем свойства регулятора Pan (команда Properties контекстного меню). В поле Appearance (внешний вид) выберем Knob (вращающийся регулятор). Отключим опцию Show Readout (показывать числовое значение параметра). Опция Show Title On Panel (отображать элемент управления на панели VST) пускай остается включенной. В полях Lo Value и Hi Value автоматически задаются границы регулировки в вольтах (для регулятора панорамы - от -5 В до 5 В).

Аналогичным образом создадим регулятор громкости Volume: подключим его ко входу Volume модуля Pan. При добавлении однотипных элементов в схему синтезатора удобно пользоваться буфером обмена: выделите образцовый элемент, скопируйте его в буфер (+), вставьте из буфера его копию (+).

Точно также создадим регуляторы Attack, Decay, Sustain и Release для управления генератором ADSR. Затем добавим регулятор Pulse Width для управления скважностью сигнала осциллятора (регулятор будет работать только для волновой формы Pulse). Немного модифицируем переключатель волновой формы осциллятора: в свойствах этого модуля в поле Appearance выберем Rotary Switch (вращающийся переключатель).

Командой Insert > Controls > Peak Meter добавим индикаторы уровня сигнала. Соединим их входы Signal In с выходами Left Out и Right Out модуля Pan. Переименуем эти модули (в поле Title в свойствах модуля) в L и R соответственно.

Перейдем к дизайну панели нашего синтезатора. В основном окне проекта откроем контекстное меню контейнера MY SYNTH и выберем в нем команду Panel edit. Откроется окно редактора панели синтезатора. С помощью мыши расставим элементы управления синтезатором так, чтобы было удобно их использовать (рис. 8).


Рис. 8. Редактор панели синтезатора

Проверьте, как звучит синтезатор, как работают его регуляторы. Если все в порядке, то можно сохранить проект в виде VST-плагина. Для этого воспользуемся командой главного меню Файл > Сохранить как VST. Откроется окно Save as VST (рис. 9). Обратите внимание на то, что в поле 4-х значный код следует указать уникальный код плагина, который не должен повторяться для ваших плагинов.


Рис. 9. Экспорт VST-плагина

Теоретически к синтезатору могут прилагаться вспомогательные файлы (например, MIDI-паттерны). Их нужно перечислить на вкладке Включить в состав плагина файлы. По умолчанию плагины сохраняются в папку C:\Program Files\SynthEdit\VstPlugins. Если этой папки нет, создайте ее. Все готово для экспорта - нажимаем кнопку OK. Если экспорт VST пройдет удачно, появится сообщение Saved OK и название DLL-файла. В нашем случае файл называется my_synth.dll.

Теперь можно проверить готовый плагин. Скопируйте его в ту папку, где лежат все ваши остальные VST-плагины. Откройте приложение-хост (Cubase, SONAR, Reaper, FL Studio и др.) и подключите плагин к проекту (рис. 10).


Рис. 10. Панель плагина, подключенного к проекту SONAR

При детальном изучении нашего очень простого синтезатора проявится серьезный недостаток - невозможность сохранять пресеты. Решается эта проблема подключением специального модуля Insert > MIDI > Patch Select: его вход MIDI In соединяете с выходом MIDI Out модуля IO Mod, а от выхода MIDI Out протягиваете соединение к надписи Spare модуля IO Mod. В результате MIDI Out модуля окажется соединенным со входом MIDI Out модуля IO Mod. У контейнера синтезатора появится дополнительный выход MIDI Out, который следует соединить с модулем MIDI Out (который тоже нужно добавить). Вид главного окна проекта после этой модификации показан на рис. 11 (файл my_synth3.se1). В результате появится возможность выбирать, редактировать и сохранять патчи с помощью редактора панели плагина. Теперь плагин будет реагировать на MIDI-команды смены инструмента (Programm Change) и сам будет посылать подобные команды через свой выходной MIDI-порт при смене патча средствами панели.


Рис. 11. Появилась возможность редактировать и сохранять патчи

Нет предела совершенству. Улучшать синтезатор можно до бесконечности. Но статью пора заканчивать. Если идея создания собственных VST вас увлекла, то путь дальнейшего развития может быть следующим:

  • изучите назначение всех доступных модулей (включая те, что можно скачать и установить дополнительно);
  • научитесь создавать собственный дизайн элементов управления (можно посмотреть, как сделаны готовые скины - наборы графических и текстовых файлов в папках, расположенных внутри папки C:\Program Files\SynthEdit\skins, дополнительные скины можно найти в Интернет).

И, наконец, самое главное. Звучание синтезатора во многом зависит от звучания его осцилляторов и фильтров, звучание сэмплера - от алгоритма интерполяции. Если вас не устраивает звучание соответствующих модулей SynthEdit, то нужно учиться создавать свои модули с помощью SDK на C++. Но эта задача очень непростая, т. к. кроме умения программировать требуются еще и глубокие знания в области обработки сигналов. Гораздо проще разработать дополнительный модуль для SynthEdit, чем создавать VST "с нуля", используя SDK от Steinberg.

Статья была опубликована в журнале "Звуковые виртуальные студии" № 5, 2008.