SynthEdit. Введение. Часть 2

21st Июнь 2010 | Метки: , ,

Теперь немного усложним наш синтезатор. Добавьте в проект модуль Insert → Controls → List Entry и подсоедините его к Oscillator.Waveform. Это позволит менять форму волны осциллятора в любой момент.

Дальше добавляем Insert → Controls → Slider и подключим его к ADSR2.Attack. Таким же образом добавьте слайдеры и для остальных параметров: Decay, Sustain и Release. Должно получиться что-то вроде этого:

Добавляем элементы управления

Рис. 2. Добавляем элементы управления

Ну вот, теперь уже можно худо-бедно изменять тембр звука.

Обратите внимание, что при подключении слайдеров к ADSR2 ползунки сразу принимают некое значение по умолчанию. Регулировать этот параметр можно и другим способом: через контекстное меню Properties, явно указав нужную величину. Однако в этом случае конечный пользователь изменить ее не сможет. Иногда это удобно!

Ну и, наконец, переведем наш синтезатор к разряду субтрактивных. Для этого добавим фильтр (Insert → Filters → SV Filter) и элементы управления для него. Удалим соединение от VCA.Output к Sound Out и переподключим следующим образом:

Добавляем фильтр

Рис. 3. Добавляем фильтр

SV Filter — это классический State Variable фильтр, он имеет четыре выхода: Low Pass (фильтр низкой частоты), Hi Pass (фильтр высокой частоты), Band Pass (полосовой фильтр) и Band Reject (режекторный фильтр, т.е. фильтр не пропускающий определенную полосу). На вход фильтра подается, собственно, фильтруемый сигнал, а также два параметра: Pitch (частота среза) и Resonance (величина резонанса в точке среза) ими-то мы и будем управлять. Добротность фильтра для Low Pass и Hi Pass режимов составляет 12 дБ/окт, а для режимов Band Pass и Band Reject — 6 дБ/окт.

Мы построили, пусть и простейший, но типичный субтрактивный синтезатор, т.е. синтезатор, который формирует конечный тембр путем вычитания из изначально богатого сигнала некоторой частотной составляющей. Но позвольте, на фильтр у нас подается не такой уж и богатый сигнал, чтобы из него еще что-то вычитать, так ведь? И именно поэтому у большинства субтрактивных (и не только) синтезаторов количество осцилляторов больше одного. Позже мы подробнее остановимся на этом моменте.

Ну а с одним задающим осциллятором можно построить, например, синтезатор баса. Что нам для этого нужно? Нужно заставить звучать осциллятор на одну-две октавы пониже, т.е. сделать некий аналог транспонирования. Эту задачу можно решить различными способами. Самый простой: добавить слайдер к Oscillator.Pitch, как на следующем рисунке:

Управляем высотой сигнала

Рис. 4. Управляем высотой сигнала

Теперь нам нужно задать другой диапазон изменения значений у слайдера, для этого в контекстном меню слайдера выбираем Automation. В появившемся окне нас интересуют два параметра: Min и Max. Установите первый в -2, а второй в 0.

Когда вы подключаете к одному входу несколько источников, синтэдит складывает все входящие сигналы (другие арифметические и логические операции с сигналами совершаются с помощью различных модулей). Именно этим свойством мы сейчас и пользуемся. Дело в том, что для удобства высота сигнала (Pitch) в синэдите переводится в напряжение по следующей формуле:

При этом 5 Вольт соответствует частоте 440 Гц. При шкале 1 вольт/октаву очень удобно транспонировать сигнал в любую сторону просто добавляя или вычитая необходимую величину. Т.е. указанный нами выше диапазон -2..0, позволяет понижать Pitch осциллятора максимум на две октавы.

  1. 21st Июнь 2010 в 11:09

    спасибо!

  2. LXNDR
    21st Июнь 2010 в 14:18

    zipp, ты не в курсе как в Синтэдите многоканальность (multi output) реализуется?
    я выяснил, что от наличия Sound Out это не зависит, нашёл намёки на то что, что достаточно, чтобы в контейнере инструмента IO MOD принимал многочисленные выходы, но подтверждения этому не нашёл, и не нашёл информации о том какое максимальное количество выходных каналов Синтедит может сгенерировать
    у меня демо версия пока, поэтому эмпирически проверить не могу

    • 21st Июнь 2010 в 22:16

      Очень просто реализуется. Любой экспортируемый в VST-плугин должен находится в контейнере:

      С внешним миром контейнер общается через IO Mod. Можно обойтись одним IO Mod, но я предпочитаю иметь в контейнере два: один для входов, второй для выходов.

      Специально вот создал пробный синт с восемью выходами:

      Reaper замечательно видит все каналы (даже их названия) вот так:

      Демонстрационная версия синтэдита позволяет создавать плагины только с двумя входами и двумя выходами. Реальное ограничение на количество каналов мне не известно, но вроде бы я видел какие-то синтэдитовые драммашины с 16-ю выходами.

  3. LXNDR
    21st Июнь 2010 в 22:20

    круто, спасибо большое

  4. LXNDR
    23rd Июнь 2010 в 14:10

    кстатЕ о синтах

    докфильмы

    БиБиСи «Synth Britannia»
    http://www.youtube.com/watch?v=WeVRYPjcVXg
    или
    http://vimeo.com/8606934

    и «German Electronic Music History»
    http://vimeo.com/7583109

  5. LXNDR
    26th Август 2010 в 22:36

    не в противовес тебе, zip, но пользы поcетителей для :)

    http://corpuscul.net/2010/07/rukovodstvo-polzovatelya-sintedit-synthedit/

  6. LXNDR
    26th Август 2010 в 22:37

    zipp сорри

    • 26th Август 2010 в 22:58

      все в порядке :)
      я уже видел эти материалы — это вольный перевод частей книги Дэйва Хаупта и Питера Шофгаузера Synthedit: Visual VST/i Programming
      Жаль, но в переводе присутствуют неточности. Было бы неплохо их устранить с автором перевода.

      • LXNDR
        27th Август 2010 в 07:58

        у меня закралось такое подозрение, попробовал мельком сравнить одну главу – не совпало, но глубже не вникал

        • 27th Август 2010 в 10:23

          Нет, автор молодец: он честно опробовал пример из книги и перевод делал не побуквенный. Особенно это заметно в главе о создании вокодера: по скриншотам видно, что вникал. Просто в паре мест неточности. Я тоже делал вокодер по этой англоязычной инструкции: все прекрасно работает.

          Но вот некоторые главы я не узнаю вообще.

  7. 12th Февраль 2011 в 12:14

    Уважаемый, а будит ли продолжение? очень интересно.