Сборка VSTi в SynthEdit. Первый синтезатор
Примерно к 2006 году конструкторы VST-плагинов набрали наибольшую популярность как среди пользователей, так и среди разработчиков. И хотя в то время имелось всего три конкурирующих программы (Quantum FX, SynthEdit и SynthMaker), около 80-90% подключаемых модулей музыкальных инструментов или эффект-процессоров делалось именно в них. Пользователям приобретение конструкторов выгодно в силу того, что те позволяют создавать множество различных плагинов под свои задачи. Разработчики обычно смотрят на этот вопрос несколько иначе, потому как, если честно, сам рынок программных инструментов и эффект-процессоров ничем не отличается от любого другого. Поэтому многое зависит от яркой обертки, хорошей рекламы, оригинальности подачи и т.п., а на разработке «внутренностей» в ряде случаев можно и сэкономить.
Опережая некоторые вопросы, сразу скажу, что если вы хотите просто работать со звуком и модулями, занимаясь их коммутацией и т.п., то вам не следует смотреть в сторону конструкторов плагинов, а стоит взять на вооружение такие программные архитектуры, как Native Instruments Reaktor или Absynth, синтезатор u-he Zebra, возможностей которых хватает с лихвой.
Создание плагинов — более специфическая вещь, близкая к программированию, то есть вам нужно настраивать все входы/выходы, регуляторы, индикаторы и т.п.
Основные отличия SynthEdit от остальных
На данный момент испытание временем наиболее успешно прошли SynthEdit и SynthMaker, при этом, несмотря на схожесть, они несут несколько разнящиеся концепции. Дело в том, что, вообще, «по классике жанра» плагины должны разрабатываться с использованием полноценной SDK от Steinberg, которая предоставляется всем разработчикам в рамках свободного доступа, но при этом, естественно, нужно уметь программировать (лучше, если на С++) и разбираться в цифровом сигнальном процессинге (DSP) и ключевых алгоритмах в области звука. Это, конечно же, для новичков очень сложно. Британская разработка SynthMaker на сегодня является средой визуального программирования, в рамках которой код, если он где-то и нужен, вводится в модуле Code, который вставляется мышью на нужную позицию в выстраиваемой схеме. А так, дается обширная библиотека различных элементов, которые нужно скоммутировать в представлении схемы, при желании нарисовать интерфейс. При этом SynthMaker, пожалуй, в нынешнем виде фактически идентичен системе визуального программирования для роботов Flowstone (которую я не так давно описывал). В ней вообще все, включая панели и библиотеки элементов, одинаково с SynthMaker. Это и плюс, и минус одновременно. С одной стороны, понятно, что роботы — это DSP, и, создавая плагины в этой среде, вы учитесь не только основным постулатам, но и навыкам владения универсального моделирования в рамках обработки сигналов. С другой стороны, мы говорим уже о довольно специфическом программировании.
Программа SynthEdit, о которой мы будем говорить сегодня, демонстрирует смешанный подход, а именно, предоставляется довольно неплохой конструктор с готовыми модулями, который осваивается звуковыми специалистами гораздо быстрее по сравнению с SynthMaker, но при этом дается и SDK, в рамках которой, зная С++, можно писать свои компоненты либо исправлять имеющиеся. Данный вариант также чуть проще, чем конкретное программирование со Steinberg VST SDK, дается множество полезной документации. В целом все очень удобно. Кстати, и опытные программисты из мира звука часто берут за основу SynthEdit SDK и создают на этой базе великолепные и популярные продукты.
Также стоит отметить, что SynthEdit имеет гораздо более низкую цену (около $50) по сравнению с тем же SynthMaker, у которого есть ранжирование по профессиональному уровню.
Имеет смысл сказать, что сама программа очень популярна среди иностранных разработчиков, в ней собирается множество синтезаторов, которые сейчас распространяются через сайт KVR. Кстати, SynthEdit очень любим немцами.
Создаем первый синтезатор в SynthEdit
Нужно сказать, что освоение на базе примеров, которые даются самой программой, новичкам, особенно ранее и близко не работавшим с тем же Reaktor, будет затруднено. Стартовать нужно с чего-то более простого. Мы пока не будем трогать вопросы создания контейнеров (структурных блоков, которые могут включать в себя множество модулей или других блоков).
В рамках первого примера реализуем простейшую цепочку из виртуальной клавиатуры, одного осциллятора, который будет переключаться между различными формами волн и аудиовыхода. И вообще посмотрим, что из чего состоит.
Запускаем SynthEdit, появляется пустое окно нового проекта. Начинаем создавать схему. Доступ к элементам конструктора может производиться двумя путями, первый — через меню Edit->Insert, второй — в выпадающем меню, которое открывается по нажатии правой кнопки мыши в окне проекта.
Загружаем четыре основных модуля и производим первую коммутацию
Вставляем клавиатуру: Insert->Control->Keyboard, конвертор MIDI-сигнала: Insert->MIDI->MIDI to CV, осциллятор: Insert->Waveform->Oscillator и аудиовыход: Insert->Input-Output->Sound Out. Перед тем как коммутировать, давайте подумаем, а зачем нам понадобился в цепочке дополнительный конвертор? На самом деле все очень просто. По нажатии клавиши мы формируем MIDI-сообщение, которое несет в себе информацию о ноте, силе нажатия и т.п. Эта информация является MIDI, которую осциллятор напрямую не понимает. В качестве руководства к действию он должен получить CV-сигнал (CV — управляющее напряжение). Модуль MIDI to CV и является тем самым необходимым конвертором.
Для удобства линии связи закрашиваются в различные цвета в зависимости от типов сигнала:
. синий — аудиосигналы, а также CV;
. красный — текстовые данные;
. ореховый — MIDI-данные;
. зеленый — передача значений параметров.
Теперь делаем коммутацию:
1. Соединяем MIDI Out (Keyboard) с MIDI In (MIDI to CV).
2. Соединяем выход Pitch (MIDI to CV) с входом Pitch (Oscillator).
3. Соединяем Audio Out (Oscillator) с 1 и 2 входами(Sound Out).
Теперь можем нажать любую клавишу на Keyboard, в результате чего генератор начнет непрерывно воспроизводить соответствующую частоту. Почему? Pitch-то мы сообщили, и генератор запустился сразу после нажатия на клавишу, но мы ничего не предприняли, чтобы предусмотреть останов воспроизведения в момент ее отжатия и вообще отслеживание нажатий/отжатий как таковых. В этом нам поможет сигнал Gate, который имеется на выходе модуля MIDI to CV. В случае, когда клавиша нажата, у него высокий логический уровень, при отжатии — низкий. Таким образом, его можно использовать в качестве управляющего для уровня выходного (с осциллятора) сигнала. Сделать это можно несколькими путями, но самый простой вариант — использовать модулятор амплитуды VCA: Insert->Modifiers->VCA.
Вставляем модуль VCA, теперь осциллятор реагирует на нажатия/отжатия
Далее:
1. Размыкаем выход Audio Out осциллятора, ранее соединенный с входами 1 и 2 (Sound Out), и замыкаем его на вход Signal (VCA).
2. Соединяем выход Output (VCA) на 1 и 2 входы Sound Out.
3. Соединяем выход Gate (MIDI to CV) с входом Volume (VCA).
Завершающим штрихом станет добавление селектора, с помощью которого мы сможем переключать форму генерируемой звуковой волны. Для этого нам необходим еще один модуль List Entry. В программе их два варианта, я, к примеру, выбрал второй: Insert->Control->List Entry2. Добавив его в окно проекта, делаем простое соединение выхода Value Out (List Entry2) с входом Waveform (Oscillator).
Добавляем переключение форм волн
Теперь вы можете играть на клавиатуре и переключаться между семью различными формами волн.
Добавляем новые элементы
В принципе, имеет смысл добавить генератор стандартной ADSR-огибающей с соответствующими регуляторами, а также парочку различных индикаторов. ADSR делается довольно просто, для этого достаточно найти этот модуль в закладке Old (далее мы уже не будем прописывать пути Insert->…) и вставить в окно проекта. У этого блока имеется множество входов и один выход Output. При этом вспоминаем, а что же описывает график ADSR? Правильно, импульсную форму или, проще говоря, распределение амплитуды всего сигнала с разделением на зоны атаки, удержания, затухания. Другими словами, коммутироваться нужно на Gate.
Поэтому мы разъединяем выход Gate (MIDI to CV) с входом Volume (VCA) и коммутируем Gate (MIDI to CV) на Gate (ADSR). А выход Signal Out (ADSR) замыкаем с входом Volume (VCA).
Теперь нам нужны регуляторы для параметров A, D, S, R. Добавляются они предельно просто: нужно поместить в окно проекта 4 элемента Slider (находятся в Controls), а затем каждый из них поочередно закоммутировать на соответствующие входы ADSR.
Просмотр графического интерфейса плагина
В контекстном меню, выпадающем по нажатии правой кнопки мыши в рабочей области проекта, есть пункт Panel Edit… Нажав на него, вы переключаетесь на окно визуального отображения плагина. Вид, который дается с дизайном по умолчанию, довольно спартанский, но и в этом случае вы можете навести некий марафет, посмотреть, как взаимодействуют элементы и их настройки, обязательно посетите различные свойства, измените названия на те, которые нужны.
Добавление ADSR с регуляторами и индикаторами, просмотр плагина в графической оболочке
Экспорт в VST
Экспорт в VST делается очень просто с помощью одноименного пункта меню File. В нашем случае желательно перед экспортом, чтобы инструмент получился более полноценным, подключить параллельно с виртуальной клавиатурой модуль MIDI In (закладка MIDI), тогда плагин сможет воспроизводить MIDI-файлы с хост-программ, а также откликаться на MIDI-клавиатуру.
Теперь можно проверить все в действии. Первый синтезатор готов.
Подытожим
В принципе, с этого момента можно начинать копаться, при этом рекомендую изучить от и до стандартную библиотеку перед тем как следовать многочисленным советам по скачиванию дополнительных. Всему свое время, как серьезно высказался Жан-Батист Эммануэль Зорг (к/ф «Пятый элемент»): «Убийца, если он — профессиональный наемный убийца, обязательно обратит внимание на красную кнопку»:). Это я к тому, что взрыв мозга можно устроить очень быстро.
В синтезаторе №2, то есть продолжении этого материала, мы перейдем на следующий уровень.
Кристофер http://itcs.3dn.ru
Опережая некоторые вопросы, сразу скажу, что если вы хотите просто работать со звуком и модулями, занимаясь их коммутацией и т.п., то вам не следует смотреть в сторону конструкторов плагинов, а стоит взять на вооружение такие программные архитектуры, как Native Instruments Reaktor или Absynth, синтезатор u-he Zebra, возможностей которых хватает с лихвой.
Создание плагинов — более специфическая вещь, близкая к программированию, то есть вам нужно настраивать все входы/выходы, регуляторы, индикаторы и т.п.
Основные отличия SynthEdit от остальных
На данный момент испытание временем наиболее успешно прошли SynthEdit и SynthMaker, при этом, несмотря на схожесть, они несут несколько разнящиеся концепции. Дело в том, что, вообще, «по классике жанра» плагины должны разрабатываться с использованием полноценной SDK от Steinberg, которая предоставляется всем разработчикам в рамках свободного доступа, но при этом, естественно, нужно уметь программировать (лучше, если на С++) и разбираться в цифровом сигнальном процессинге (DSP) и ключевых алгоритмах в области звука. Это, конечно же, для новичков очень сложно. Британская разработка SynthMaker на сегодня является средой визуального программирования, в рамках которой код, если он где-то и нужен, вводится в модуле Code, который вставляется мышью на нужную позицию в выстраиваемой схеме. А так, дается обширная библиотека различных элементов, которые нужно скоммутировать в представлении схемы, при желании нарисовать интерфейс. При этом SynthMaker, пожалуй, в нынешнем виде фактически идентичен системе визуального программирования для роботов Flowstone (которую я не так давно описывал). В ней вообще все, включая панели и библиотеки элементов, одинаково с SynthMaker. Это и плюс, и минус одновременно. С одной стороны, понятно, что роботы — это DSP, и, создавая плагины в этой среде, вы учитесь не только основным постулатам, но и навыкам владения универсального моделирования в рамках обработки сигналов. С другой стороны, мы говорим уже о довольно специфическом программировании.
Программа SynthEdit, о которой мы будем говорить сегодня, демонстрирует смешанный подход, а именно, предоставляется довольно неплохой конструктор с готовыми модулями, который осваивается звуковыми специалистами гораздо быстрее по сравнению с SynthMaker, но при этом дается и SDK, в рамках которой, зная С++, можно писать свои компоненты либо исправлять имеющиеся. Данный вариант также чуть проще, чем конкретное программирование со Steinberg VST SDK, дается множество полезной документации. В целом все очень удобно. Кстати, и опытные программисты из мира звука часто берут за основу SynthEdit SDK и создают на этой базе великолепные и популярные продукты.
Также стоит отметить, что SynthEdit имеет гораздо более низкую цену (около $50) по сравнению с тем же SynthMaker, у которого есть ранжирование по профессиональному уровню.
Имеет смысл сказать, что сама программа очень популярна среди иностранных разработчиков, в ней собирается множество синтезаторов, которые сейчас распространяются через сайт KVR. Кстати, SynthEdit очень любим немцами.
Создаем первый синтезатор в SynthEdit
Нужно сказать, что освоение на базе примеров, которые даются самой программой, новичкам, особенно ранее и близко не работавшим с тем же Reaktor, будет затруднено. Стартовать нужно с чего-то более простого. Мы пока не будем трогать вопросы создания контейнеров (структурных блоков, которые могут включать в себя множество модулей или других блоков).
В рамках первого примера реализуем простейшую цепочку из виртуальной клавиатуры, одного осциллятора, который будет переключаться между различными формами волн и аудиовыхода. И вообще посмотрим, что из чего состоит.
Запускаем SynthEdit, появляется пустое окно нового проекта. Начинаем создавать схему. Доступ к элементам конструктора может производиться двумя путями, первый — через меню Edit->Insert, второй — в выпадающем меню, которое открывается по нажатии правой кнопки мыши в окне проекта.
Загружаем четыре основных модуля и производим первую коммутацию
Вставляем клавиатуру: Insert->Control->Keyboard, конвертор MIDI-сигнала: Insert->MIDI->MIDI to CV, осциллятор: Insert->Waveform->Oscillator и аудиовыход: Insert->Input-Output->Sound Out. Перед тем как коммутировать, давайте подумаем, а зачем нам понадобился в цепочке дополнительный конвертор? На самом деле все очень просто. По нажатии клавиши мы формируем MIDI-сообщение, которое несет в себе информацию о ноте, силе нажатия и т.п. Эта информация является MIDI, которую осциллятор напрямую не понимает. В качестве руководства к действию он должен получить CV-сигнал (CV — управляющее напряжение). Модуль MIDI to CV и является тем самым необходимым конвертором.
Для удобства линии связи закрашиваются в различные цвета в зависимости от типов сигнала:
. синий — аудиосигналы, а также CV;
. красный — текстовые данные;
. ореховый — MIDI-данные;
. зеленый — передача значений параметров.
Теперь делаем коммутацию:
1. Соединяем MIDI Out (Keyboard) с MIDI In (MIDI to CV).
2. Соединяем выход Pitch (MIDI to CV) с входом Pitch (Oscillator).
3. Соединяем Audio Out (Oscillator) с 1 и 2 входами(Sound Out).
Теперь можем нажать любую клавишу на Keyboard, в результате чего генератор начнет непрерывно воспроизводить соответствующую частоту. Почему? Pitch-то мы сообщили, и генератор запустился сразу после нажатия на клавишу, но мы ничего не предприняли, чтобы предусмотреть останов воспроизведения в момент ее отжатия и вообще отслеживание нажатий/отжатий как таковых. В этом нам поможет сигнал Gate, который имеется на выходе модуля MIDI to CV. В случае, когда клавиша нажата, у него высокий логический уровень, при отжатии — низкий. Таким образом, его можно использовать в качестве управляющего для уровня выходного (с осциллятора) сигнала. Сделать это можно несколькими путями, но самый простой вариант — использовать модулятор амплитуды VCA: Insert->Modifiers->VCA.
Вставляем модуль VCA, теперь осциллятор реагирует на нажатия/отжатия
Далее:
1. Размыкаем выход Audio Out осциллятора, ранее соединенный с входами 1 и 2 (Sound Out), и замыкаем его на вход Signal (VCA).
2. Соединяем выход Output (VCA) на 1 и 2 входы Sound Out.
3. Соединяем выход Gate (MIDI to CV) с входом Volume (VCA).
Завершающим штрихом станет добавление селектора, с помощью которого мы сможем переключать форму генерируемой звуковой волны. Для этого нам необходим еще один модуль List Entry. В программе их два варианта, я, к примеру, выбрал второй: Insert->Control->List Entry2. Добавив его в окно проекта, делаем простое соединение выхода Value Out (List Entry2) с входом Waveform (Oscillator).
Добавляем переключение форм волн
Теперь вы можете играть на клавиатуре и переключаться между семью различными формами волн.
Добавляем новые элементы
В принципе, имеет смысл добавить генератор стандартной ADSR-огибающей с соответствующими регуляторами, а также парочку различных индикаторов. ADSR делается довольно просто, для этого достаточно найти этот модуль в закладке Old (далее мы уже не будем прописывать пути Insert->…) и вставить в окно проекта. У этого блока имеется множество входов и один выход Output. При этом вспоминаем, а что же описывает график ADSR? Правильно, импульсную форму или, проще говоря, распределение амплитуды всего сигнала с разделением на зоны атаки, удержания, затухания. Другими словами, коммутироваться нужно на Gate.
Поэтому мы разъединяем выход Gate (MIDI to CV) с входом Volume (VCA) и коммутируем Gate (MIDI to CV) на Gate (ADSR). А выход Signal Out (ADSR) замыкаем с входом Volume (VCA).
Теперь нам нужны регуляторы для параметров A, D, S, R. Добавляются они предельно просто: нужно поместить в окно проекта 4 элемента Slider (находятся в Controls), а затем каждый из них поочередно закоммутировать на соответствующие входы ADSR.
Просмотр графического интерфейса плагина
В контекстном меню, выпадающем по нажатии правой кнопки мыши в рабочей области проекта, есть пункт Panel Edit… Нажав на него, вы переключаетесь на окно визуального отображения плагина. Вид, который дается с дизайном по умолчанию, довольно спартанский, но и в этом случае вы можете навести некий марафет, посмотреть, как взаимодействуют элементы и их настройки, обязательно посетите различные свойства, измените названия на те, которые нужны.
Добавление ADSR с регуляторами и индикаторами, просмотр плагина в графической оболочке
Экспорт в VST
Экспорт в VST делается очень просто с помощью одноименного пункта меню File. В нашем случае желательно перед экспортом, чтобы инструмент получился более полноценным, подключить параллельно с виртуальной клавиатурой модуль MIDI In (закладка MIDI), тогда плагин сможет воспроизводить MIDI-файлы с хост-программ, а также откликаться на MIDI-клавиатуру.
Теперь можно проверить все в действии. Первый синтезатор готов.
Подытожим
В принципе, с этого момента можно начинать копаться, при этом рекомендую изучить от и до стандартную библиотеку перед тем как следовать многочисленным советам по скачиванию дополнительных. Всему свое время, как серьезно высказался Жан-Батист Эммануэль Зорг (к/ф «Пятый элемент»): «Убийца, если он — профессиональный наемный убийца, обязательно обратит внимание на красную кнопку»:). Это я к тому, что взрыв мозга можно устроить очень быстро.
В синтезаторе №2, то есть продолжении этого материала, мы перейдем на следующий уровень.
Кристофер http://itcs.3dn.ru
Компьютерная газета. Статья была опубликована в номере 41 за 2011 год в рубрике мультимедиа