Музыкальные программы

Создаем FM-синтезатор сами(часть1)

12.03.2009 от admin



С этой статьи я начну серию статей о создании патчей в модульных программах создания музыки, таких как Max/MSP, Pure Data, Reaktor, SynthEdit, SynthMaker и т.д. Чаще всего буду использовать Pure Data. А именно сборку  PD-extended. Почему PD спросите Вы? Ну во-первых это бесплатная программа и есть версии не только для Windows, но и для Linux и MacOS. Во-вторых, PD предлагает объекты для низкоуровневого создания инструмента и, поняв принцип построения в ней, Вы легко создадите подобный патч в других программах.

 Создаем FM синтезатор сами(часть1)

maxmsp Создаем FM синтезатор сами(часть1) reakt 03 Создаем FM синтезатор сами(часть1)  Создаем FM синтезатор сами(часть1)  Создаем FM синтезатор сами(часть1)

Итак, начнём с создания FM-синтезатора с амплитудной ADSR-огибающей. Сначала не много теории. Звук в FM-синтезе определяет следующие параметры: частота несущей [Frequency Carrier(FC)], частота модулятора (FM), амплитуда модулятора (AM), отношение FM/FC известное больше как harmonicity ratio (HR) и отношение AM/FM, которое называется modulation index (MI).
Примечание: Я буду использовать английские термины, чтобы вам было проще освоиться в других программах.

Запускаем PureData и в открывшемся окне нажимаем Ctrl+n или File->New, тем самым создав новый патч в котором мы и будем создавать основу нашего синтезатора.

pd1 300x239 Создаем FM синтезатор сами(часть1)

Первым делом создаём генератор несущей частоты (Carrier Oscillator), модулятор (modulating oscillator) и возможность задавать параметры MI и HR. Для этого нажимаем Ctrl+1 или Put->Object и в появившееся поле пишем osc~. Объект osc~ является генератором с косинусоидальной функцией, частота которого задаётся через левый вход. Создадим два таких объекта, один из них будет модулятором, а другой генератором несущей. Для связи с внешним миром и возможности задавать параметры создадим таким же образом три объекта inlet~ (входы нашего патча) и один outlet~ (выход). Подпишем входы и генераторы, чтобы было проще. Первый вход FC, второй HR и третий MI. Первый генератор modulating oscillator и второй Carrier Oscillator. Для этого нажмите Ctrl+5 или Put->Comment и пишите в появившемся поле.

pd2 300x84 Создаем FM синтезатор сами(часть1) pd3 300x233 Создаем FM синтезатор сами(часть1)

Частота модулятора(FM), исходя из выше сказанного, будет равна FC * HR, поэтому первый вход inlet~, которым мы будем задавать FC, надо перемножить со вторым, через который мы будем задавать значение HR, а результат подадим на модулятор. Для этого создадим объект *~, который перемножает сигналы, и подсоединим первый inlet~ к левому входу, а второй к правому, а выход к левому входу osc~.
Примечание: Чтобы соединять объекты нужно навести курсор на выход объекта, пока не появится кружок, нажать левую кнопку мышки и вести, не отпуская к входу другого объекта, и отпустить когда появится кружок.

Далее вычисляем амплитуду модулятора (AM). Для этого перемножим третий объект inlet~, через который будем задавать MI с частотой модулятора(FM). Для этого создадим уже знакомый нам объект *~ и подключим к его левому входу выход верхнего *~, а к правому выход третьего inlet~. В итоге должно получиться примерно следующее.

pd4 300x186 Создаем FM синтезатор сами(часть1)

Чтобы задавать амплитуду модулятора мы перемножим полученное значение амплитуды с сигналом объекта osc~, амплитуда которого изменяется от 0 до 1.
Получится вот что.pd51 300x247 Создаем FM синтезатор сами(часть1)

И в конце создания основной логики FM-синтеза нужно объединить все полученные вычисления для модуляции генератора несущей частоты. Для этого будем использовать объект +~, который суммирует сигналы. В нашем случае мы суммируем несущую часто-ту(FC) и сигнал модулятора. Создадим объект +~ и подключим к его левому входу выход первого inlet~ (FC), а к правому входу подключим выход объекта *~ при помощи которого мы контролируем амплитуду модулятора. Затем соединим объект +~ к левому входу второго объекта osc~ для его модуляции. А уже выход этого генератора к входу объекта outlet~.

pd6 300x242 Создаем FM синтезатор сами(часть1)

Всё, основная часть готова. Теперь сохраним этот патч для последующего использования его в наших музыкальных проектах под именем FMsynth в папку extra, у меня она находится по адресу D:\Program Files\pd\extra\. Смотря куда, вы установили PureData.
Теперь попробуем извлечь звук из нашего творения. Давайте создадим новый патч как мы это делали ранее, нажав Ctrl+n. В новом патче создадим объект FMsynth, и если вы всё сделали правильно, программа найдёт созданный нами до этого объект. В объекте должно быть три входа и один выход. Если Вы кликните на нём правой кнопкой мышки и нажмёте Open, то откроется созданный вами ранее патч FMsynth.

pd7 300x123 Создаем FM синтезатор сами(часть1)

Далее нам необходимо создать то, через что мы будем задавать значения FC, HR и MI. Для этого вставим в наш проект объекты Number, нажав Ctrl+3 или выбрав его из списка в меню Put. Затем создадим объекты sig~ , который предназначен для того, чтобы преобразовать числовые значения в аудио сигнал. Теперь соединим Number с sig~, а sig~ с входом FC нашего FMsynth. Сделаем также для двух оставшихся входов HR и MI. Должно получиться, что-то вроде этого.

pd8 300x141 Создаем FM синтезатор сами(часть1)

Чтобы звук нашего синтезатора не длился бесконечно долго и для добавления ему некоторых свойств, нам нужна ADSR-огибающая. Для контроля амплитуды синтезатора возьмём объект *~ и подключим к его левому входу сигнал с нашего синтезатора, а к правому объект line~, который генерирует огибающую. Для указания формы огибающей создадим объект envgen. После создания объекта envgen подключим его выход к левому входу line~. А к входу envgen подсоединим объект bang, для этого впишите слово bng в объект бокс или выберете его из списка в меню Put. Объект bang представляет собой кнопку, нажав на которую выдаётся кратковременная команда, т.е. в нашем случае при нажатии на кнопку будет слышен звук. Должно выглядеть примерно так.

pd9 300x207 Создаем FM синтезатор сами(часть1)

И последнее, чтобы слышать звук нам надо включить в проект объект dac~ и подключить к его обоим входам (если нужно стерео) выход последнего объекта *~.

pd10 300x224 Создаем FM синтезатор сами(часть1)

Вот в принципе и всё теперь нажимайте Ctrl+E, чтобы выйти из режима редактирования, измените, значения в объектах Number и жмите на кнопку bang. Должен слышаться звук, если его нет, нажмите Audio ON в меню Media. А дальше экспериментируйте с числовыми значениями, с огибающей и т.д. Как вы видите, получился довольно примитивный, но с экспериментальным звуком синт, очень хорошо подходящий для синтеза ударных. В следующий раз мы усовершенствуем нашу конструкцию.
Удачи в экспериментах. Задавайте вопросы.


Рубрики: Извлечение звука | Комментарии (4) »

Комментарии (4)

  1. Вячеслав пишет:

    Спасибо за урок =) Раскажыте пожалуйста, как собрать полифонический синтезанор? =)

  2. admin пишет:

    Как раз сейчас этим и занимаюсь. На днях продолжу эту тему.

  3. rocker пишет:

    что за envgen? я не могу найти такое в пд :(

  4. admin пишет:

    А где вы ищете? Просто пишите в поле нового объекта слово envgen и у вас появится поле с огибающей.

Оставить комментарий

Заметьте: Включена проверка комментариев. Нет смысла повторно отправлять комментарий.

Дизайн: eCore Локализация: Музыкальные программы