Как стать автором
Поиск
Написать публикацию
Обновить

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

Время на прочтение4 мин
Количество просмотров10K

Вводная


Предпосылки


Строить синтезаторы на 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. В следующей серии ждите: «контроллер из того, что есть под рукой» или «как сэкономить на электронной музыке»
Жду ваших вопросов в комментариях.
Теги:
Хабы:
Всего голосов 9: ↑8 и ↓1+7
Комментарии10

Публикации

Ближайшие события