Вводная
Предпосылки
Строить синтезаторы на 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. В следующей серии ждите: «контроллер из того, что есть под рукой» или «как сэкономить на электронной музыке»
Жду ваших вопросов в комментариях.
Комментарии (10)
Wedmer
11.09.2015 07:04Для того, чтобы меньше смотреть в монитор, надо привязывать параметры к CC и рулить ими по MIDI. Существует куча портативных контроллеров для таких задач. Если хочется руками что то заделать, то на каких то там ардуинах MIDI реализуется очень легко.
RoSenMann
11.09.2015 07:35Про рукоприложенные контроллеры и кручение я напишу отдельно, их надо еще довести до ума и протестировать в реальных условиях. А так, даже самый ущербный контроллер стоит приличных денег, даже с рук. А ковыряться с Ардуино у меня нет времени, потому что паяльник я держать могу только для бытовых нужд, кондер на пульте подпаять, наушники сестре оживить и т.д. Описанного мною в заключении набора более чем достаточно, я думаю, для поставленной задачи. Конечно, если писать органы и различные эл.фоно, обязательно нужна мидиха, и желательно, полноценная 88к с молотчками. У меня есть несколько таких синтезаторов, я их таким же образом опубликую через несколько дней, нужна консультация преподавателя по проверке физической модели и дефектам оборудования.
Fuzzyjammer
11.09.2015 12:14Контроллеров в районе $50-100 (2-4 тыс р б/у) много алесис, корг, акаи, итд, например, упомянутая выше нано серия у корга в ассортименте представлена на авито. Разумеется, это годится скорее для «пошуметь», чем для исполнения сложных партий, но клавиатуры оригинальных монофонических синтезаторов эпохи их расцвета тоже не отличались хорошей механикой и большим числом октав.
Органы и «88к с молоточками» звучит немного взаимоисключающе, т.к. для полноценной органной игры тяжелая глубокая клавиатура только мешается (у органов легкая клавиатура, не чувствительная к силе нажатия. У старых пневматических органов требуемая сила нажатия зависела от настроек тембра, т.к. от этого напрямую зависело, сколько клапанов открывает клавиша, у современных и электроорганов такого нет).RoSenMann
11.09.2015 15:59Это скорее относилось к упоминанию патчей для электрофоно. Я знаю, что мануалы органа достаточно легки на нажатие и не имеют «порога преодоления», просто некорректно выразился. У меня есть патч, который, по сути, программное описание механического эл.фоно Rodes-типа. Под подобные вещи как раз и хочется иметь имитацию механизма. А так, да, вы совершенно правы.
joice
11.09.2015 14:50возможно, стоит сделать следующие улучшения:
1. использовать генераторы без т.н. aliasing, который звучит довольно неприятно и грязно, для
этого либо использовать табличный синтез ([sinesum ....()
либо оверсэмплинг.
2. добавить генератор огибающей, поскольку сейчас нет возможности регулировать атаку и другие параметры
3. сделать синт не только монофоническим
Wedmer
И как вы умудрились упустить проект Axoloti?
А картинки того Korg есть? Там выбор то не очень большой.
RoSenMann
Есть фото крайне очень плохого качества, но модель задетектить можно, доберусь до флешки — залью. Я просто не сведущ в железе абсолютно.
А об Axoloti не слышал, потому что практически не общаюсь с товарищами по интересам, разве что с преподавателями, которые мне помогают с постановкой замеров и корректируют мат.модели.