Вводная


Предпосылки


Строить синтезаторы на 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)


  1. Wedmer
    11.09.2015 06:16

    И как вы умудрились упустить проект Axoloti?

    А картинки того Korg есть? Там выбор то не очень большой.


    1. RoSenMann
      11.09.2015 06:41

      Есть фото крайне очень плохого качества, но модель задетектить можно, доберусь до флешки — залью. Я просто не сведущ в железе абсолютно.

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


  1. Wedmer
    11.09.2015 07:04

    Для того, чтобы меньше смотреть в монитор, надо привязывать параметры к CC и рулить ими по MIDI. Существует куча портативных контроллеров для таких задач. Если хочется руками что то заделать, то на каких то там ардуинах MIDI реализуется очень легко.


    1. RoSenMann
      11.09.2015 07:35

      Про рукоприложенные контроллеры и кручение я напишу отдельно, их надо еще довести до ума и протестировать в реальных условиях. А так, даже самый ущербный контроллер стоит приличных денег, даже с рук. А ковыряться с Ардуино у меня нет времени, потому что паяльник я держать могу только для бытовых нужд, кондер на пульте подпаять, наушники сестре оживить и т.д. Описанного мною в заключении набора более чем достаточно, я думаю, для поставленной задачи. Конечно, если писать органы и различные эл.фоно, обязательно нужна мидиха, и желательно, полноценная 88к с молотчками. У меня есть несколько таких синтезаторов, я их таким же образом опубликую через несколько дней, нужна консультация преподавателя по проверке физической модели и дефектам оборудования.


      1. Wedmer
        11.09.2015 08:40

        Если что, то какой нибудь korg Nanokontrol б/у сравним по цене с ардуиной.


      1. Fuzzyjammer
        11.09.2015 12:14

        Контроллеров в районе $50-100 (2-4 тыс р б/у) много алесис, корг, акаи, итд, например, упомянутая выше нано серия у корга в ассортименте представлена на авито. Разумеется, это годится скорее для «пошуметь», чем для исполнения сложных партий, но клавиатуры оригинальных монофонических синтезаторов эпохи их расцвета тоже не отличались хорошей механикой и большим числом октав.

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


        1. RoSenMann
          11.09.2015 15:59

          Это скорее относилось к упоминанию патчей для электрофоно. Я знаю, что мануалы органа достаточно легки на нажатие и не имеют «порога преодоления», просто некорректно выразился. У меня есть патч, который, по сути, программное описание механического эл.фоно Rodes-типа. Под подобные вещи как раз и хочется иметь имитацию механизма. А так, да, вы совершенно правы.


  1. Klukonin
    11.09.2015 09:07
    +2

    А почему был выбран именно PureData.
    Чем не угодил Alsa Modular Synth?


    1. RoSenMann
      11.09.2015 15:53

      Алгоритмическая композиция, программирование визуализаций, переносимость, процедурный синтез.


  1. joice
    11.09.2015 14:50

    возможно, стоит сделать следующие улучшения:
    1. использовать генераторы без т.н. aliasing, который звучит довольно неприятно и грязно, для
    этого либо использовать табличный синтез ([sinesum ....()
    либо оверсэмплинг.

    2. добавить генератор огибающей, поскольку сейчас нет возможности регулировать атаку и другие параметры

    3. сделать синт не только монофоническим