Pull to refresh

Пишем синтезатор для концерта. Полевые испытания PureData

Reading time4 min
Views9.8K

Вводная


Предпосылки


Строить синтезаторы на PD занятие крайне интересное, однако, комнатные эксперименты и диванный парсинг миди-сообщений все таки серьезно отличаются от «боевых» условий, в которых приходится выступать. И после провальной демонстрации на LinuxFest я серьезно озаботился решениями для лайв-выступлений. Обычно, какого-то более-менее функционального миди-контроллера (такой, чтобы использовал хотя бы два канала, которые можно прослушивать отдельно) бывает достаточно, однако, это достаточно затратно и приходится все компенсировать GUI самого синтезатора и полагаться на мышь и клавиатуру.

Около месяца назад меня позвали играть в одну любопытную питерскую группу, на должность «электронщика». Моя задача состоит в исполнении синтезаторных партий и потенциальное их написание. Группа активно концертирующая и подготовить решение нужно было быстро, и, прослушав их материал и пообщавшись с членами коллектива, я приступил к поискам решения.

Постановка задачи


Замечание, предвосхищающее вопрос «зачем?». Синтезатор, конечно, чрезвычайно прост и софта, могущего те же функции — море. Однако, тут на ручном примере показаны основные принципы, которые новичку в PD важно повторить. Это касается как генераторов, так и преобразователей. Это — база, с которой можно и нужно работать, а простота и сырость позволят достаточно быстро разобрать элементы и послужить если не базой, то хорошим дополнениям к вашим собственным патчам. Копируйте и экспериментируйте на здоровье!
Необходимо собрать синтезатор, конфигурация которого может меняться быстро и на горячую, а так же он должен быть нетребовательным к контроллерам. Ну и, конечно же, возможность играть «массивные» партии, с широкой полосой частот. Вдохновением послужил небольшой модульник фирмы Korg, модель которого мне, увы, неизвестна.
Поковырявшись, я разбил задачу на части: генераторы сигналов по форме (пила [phasor~], синус [osc~], квадрат (нет в библиотеке), треугольник (так же нет в библиотеке)). Модуль фазовой модуляции, ринг-модулятор, перегруз, а так же генераторы «белого» и «розового» шума ([noise~] и [pink~] соответственно) и фильтры к ним (полосный [bp~], низких [lop~] и верхних [hip~] частот), ну и, конечно же, некое подобие стека, которое последовательно отправляет на выход введенные в него параметры с заданной скоростью (удобно держать на таком какую-то репетитивную партию, типа баса или ударных).
Итак, впринципе, вот и все. Осталось только перенести это все хозяйство в PD и начать эксперименты.

Синтострой


Для построения фонов с маркерами в GUI используем стандартнoе put->canvas либо Ctrl-Shift-C, я создал такой отдельный для каждого модуля и собрал как мозаику. А затем уже размещаем указанные выше объекты. У меня получилась вот такая конструкция:



Разберем по отдельности:


Блок In

Не содержит ничего интересного. [adc~] — объект ввода с микрофона, линии или других приложений, в JACK отображается просто как вход. Достаточно содержательный хэлп про каналы и т.д., нечего добавить. А вот дальше все намного интересней.

Блок Wave_Gen

Генераторы синусоиды и пилы нам уже знакомы, а вот квадрат и треугольник (здесь: square и triangle соответственно) пришлось лепить из того что было. Математика тут простая, выпускные классы средней школы в лучшем случае. Чтобы получить из пилы квадрат, можно взять две пилы, одну из них развенуть (это делается подачей отрицательных значений частоты, то есть у исходной частоты нужно поменять знак), сдвинуть по фазе на 0.5 (сдвиг фазы подается на правый вход и имеет диапазон значений от 0 до 1, т.e. сдвиг указывается по оси ординат). А теперь эту развернутую и смещенную волну складываем с первым генератором, который мы не трогали. В результате мы получаем суперпозицию в виде квадратной волны, работающей в пределах от 0 до 2. Затем сместим волну так, чтобы она оказались в области [-1; 1]. То есть, вычтем 1. В результате будем иметь что-то подобное:



С треугольником подход тот же. Ход мыслей можно восстановить по коду:



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

Итак, с генераторами разобрались. Разберемся с преобразователями. По принципам работы кольца и фазы лучше посетить википедию, здесь же я просто приведу код, как он есть, так как тут все базируется больше на принципе работы, чем на математическом обосновании:

Ring-mod


Phase-mod


Блок Stck

Пожалуй, это тот случай (и единственный, к сожалению), когда русскоязычная информация по PD действительно полезна.



Этот субпатч содержит лишь счетчик и объект [sel] задача которого посылать бэнги на выходы, по достижении определенного значения счетчика. В красном прямоугольнике (непосредственно в интерфейсе) смещения нот задаются с помощью ручек, квадратная кнопка — старт, рядом в number box'e указывается задержка в мс (т.е. длительность каждого участка). Преобразовать это число в тем труда не составит, думаю, с этим вы сможете справиться самостоятельно. Ну и число приходящее на вход — исходная частота. Сюда можно привести миди события и таким образом получить арпеджиатор. Вообще, это и есть арпеджиатор.
Я решил не писать большого количества эффектов, и решил ограничиться лишь дисторшном ( и пусть вас не смущает блок дилея, на самом деле это не дилей, ибо писать его было лень и не за чем)

Distortion

Принцип работы дисторшна так же прост, есть некое жесткое ограничение по силе сигнала, все что выше — нещадно режется. Это достигается с помощью объекта [clip <диапазон по у>] и операции умножения на число, которая и усиливает сигнал, выводя его за разрешенные пределы. Для овердрайва (где срезы криволинейные) есть объект [overdrive~].



Заключение


Полевые испытания концертом прошли достаточно успешно, единственное, меня немного удручает необходимость много работать мышью и постоянно смотреть в монитор. Во-первых особо не помотаешь головой, а во-вторых, не видно товарищей, которые выполняют дирижерские функции (да-да, настолько все серьезно). И, как следствие, в одной из композиций я пропустил момент резкого окончания, и остался на секунду гудеть в одиночестве. К тому же, когда необходимо управлять одновременно и динамикой и параметрами преобразователей — одной мыши недостаточно. Поэтому в следующих версиях я решил пожертвовать гибкостью исполняемых партий и передавать параметры на синтезатор с помощью юсб-клавиатуры и геймпада с DirectInput. В следующей серии ждите: «контроллер из того, что есть под рукой» или «как сэкономить на электронной музыке»
Жду ваших вопросов в комментариях.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+7
Comments10

Articles

Change theme settings