🎛️ ORCΛ — контролируемая непредсказуемость

 Публичный пост
25 июня 2021  751

В своём прошлом посте про музыку на мобильных устройствах я рассмотрел основы взаимосвязи компонентов и протоколов для создания музыки на ходу. Я старался дойти до самых простых кирпичиков, чтобы в итоге оказалось понятно с чем и как это есть.

Сейчас будет сложно. Сейчас будет про мою новую любимую игрушку для создания музыки — эзотерический язык для описания секвенсоров под названием ORCΛ (читается как "орка").

Готовы? Поехали.


Для чего это?

Как я и писал в предыдущем посте, секвенсор — это такая цифровая шарманка, ваша музыкальная шкатулка, в которой есть валик с шипами, дёргающими за металлические пластинки. Видели такое? Скорее всего видели. Нужно это чтобы самому не играть записанные последовательности, а доверить это действие машине.

Обычно в роли секвенсоров выступают сумасшедше дорогие модули для Eurorack, иногда не совсем бесплатные плагины для DAW, но практически всегда их возможности ограничены тем, что заложил в них производитель, то есть количество шагов, количество дорожек, и так далее.

ORCΛ же — это опенсорсная платформа для создания собственных MIDI секвенсоров в любой форме и последовательности. Хотите размер не 4/4, а 6/8 ? Пожалуйста, ORCΛ так может. Хотите неограниченное количество дорожек и инструментов? Можно и так. Хотите дорожки разной размерности? И это не проблема! Хотите чтобы эти несколько дорожек шли разным темпом в случайной последовательности? Ну, вы поняли.

Для начала ознакомимся с внешним видом:

ORCΛ выглядит вот так
ORCΛ выглядит вот так

А вот мой недавний джем в размерности 3/4:

Теперь давайте разбираться с тем, что происходит.

Прежде всего, где взять?

ORCΛ доступен для бесплатного скачивания тут.

Хорошо, а что теперь с этим делать?

Сам по себе ORCΛ звуков не производит, его требуется подключить к MIDI-инструменту. Скорее всего при запуске программа подхватит первый доступный MIDI-интерфейс, но если нет, то придётся поискать в меню MIDI.

В моём случае ORCΛ работает на винде и через виртуальный MIDI-кабель посылает сигналы в плагин-хост Kushview Element. Если вы захотите пойти схожим путём, я оставлю вам несколько полезных ссылочек:

  • Собственно, Element. Скачать тут
  • Tunefish, очень хороший бесплатный VST-синтезатор. Скачать тут.
  • Sitala, опенсорсный сэмплер. В базовой поставке есть только сэмплы TR-808, что, впрочем, вполне неплохо. Скачать тут.

Индикатор в нижнем правом углу покажет доступное подключение
Индикатор в нижнем правом углу покажет доступное подключение

Основные понятия

ORCΛ — это ваш блокнот для взаимодействующих операторов и их значений. Каждый оператор и каждое значение может занимать только одну клеточку, что является результатом некоторых странностей, но мы же не ищем здесь лёгких путей, так?

Изменение статуса операторов происходит каждый фрейм, коих 4 в каждом бите(количество битов в минуту определяет темп).

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

Поскольку под операторы и значения можно отвести не больше одной клеточки, количество возможных значений ограничено таблицей BASE36, то есть 10 арабских цифр и 26 букв латинского алфавита, независимо от регистра. Тут было очень сложно, но потом стало проще.

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

Для начала самые важные операторы

  • : или двоеточие. Оператор MIDI. Это то, что будет передавать команду в инструмент. Имеет пять аргументов, которые пишутся каждый по одному в клеточки справа от оператора:
    • Канал MIDI — собственно, какой инструмент триггерить. Отсчёт каналов идёт с нуля, поэтому будьте внимательны
    • Октава — номер октавы. У разных инструментов транспозиция октав разная, поэтому подбирайте номер октавы, пока не понравится звук.
    • Нота — собственно, нота из октавы. Возможные буквенные значения соответствуют нотам: AaBCcDdEFfGg. Никто не запрещает писать буквы и далее по алфавиту, но тогда ноты будут браться как в кольце по модулю 12.
    • Velocity — скорость нажатия ноты. У некоторых инструментов напрямую этот параметр связан с громкостью. Можете его использовать чтобы разнообразить микс
    • Gate — длительность звучания ноты
  • * или bang в терминологии ORCΛ. Активирует другие операторы при встрече с ними. Собственно, этот оператор и делает всю музыку. Может извлекаться другими разнообразными операторами.

Хорошо, а как музыку-то писать?

Хороший вопрос. Я тоже долго им задавался. Для этого нам помогут другие операторы.

  • D, или Delay в терминологии ORCΛ. Выпускает оператор * (bang) снизу от себя в указанный интервал. С аргументом 1 справа от оператора выпускает * каждый фрейм, увеличение аргумента справа увеличивает интервал между *. Есть и аргумент слева, который помогает делить темп, но я им практически не пользуюсь.

Предположим, что у нас ударка находится на канале 1 MIDI, а бочка — нота До (C) первой октавы. Чтобы стучать бочкой каждый такт (не каждый фрейм!) нам потребуется записать в табло ORCΛ следующую конструкцию из операторов:

Клетку между D и : требуется оставить пустой, там будет появляться оператор *, который триггерит MIDI.

Кстати, если ничего не заиграло, нажмите на пробел. Нажмите ещё раз чтобы остановить воспроизведение. Сложно, но мы уже подбираемся к созданию первых звуков!

  • i, или Increment в терминологии ORCΛ. Выпускает числобуквенное значение снизу от себя, ограниченное аргументом справа. Слева принимает оператор * (bang). Если соединить i с оператором D, можно получить удобный счётчик фреймов! Это, пожалуй, самый основной источник синхронизированных чиселок для создания секвенсоров. Чтобы создать такой счётчик, нужно записать подобную конструкцию в табло:

Получится счётчик на 8 шагов, где шаг сменяется каждый фрейм.

Теперь посмотрим на оператор, который позволяет размножить значение, получаемое из счётчика i

  • V, или Variable в терминологии ORCΛ. Позволяет записать значение в переменную и использовать это же самое значение в других местах табло. Для названия переменной лучше всего использовать маленькие латинские буквы.

Чтобы записать значение в переменную, нужно её название указать в аргументе слева, тогда правый аргумент будет записываемым значением. Если же оператор V поставить в другом месте табло и указать имя переменной в аргументе справа, то значение этой переменной отобразится снизу от оператора. Сложно? Сейчас покажу на примере:

В примере выше сперва мы записали значение 1 в переменную x, а потом воспроизвели его двумя строчками ниже.

Теперь же я могу полностью описать самый верхний левый блок на скриншоте, который конструирует секвенсор.

Здесь оператор D выпускает * каждый фрейм, чем триггерит оператор i, ограниченный значением g(16). Вывод оператора i записывается оператором V в переменную a.

Только зачем всё это?

  • T, или Track в терминологии ORCΛ. Мой любимый оператор. Именно он создаёт те самые шаговые секвенсоры, которые продаются за много денег. Принимает два аргумента слева, позицию и длину, чтобы считать аргумент справа и передать его вниз от себя. Следующая конструкция будет считывать операторы или значения справа и посылать их вниз от оператора T:

Смекаете? На примере выше изображена та самая туц-туц техно бочка! Каждый четвёртый фрейм оператор T считывает и передаёт оператор * вниз и триггерит тем самым оператор :.

Мой полный сет ударных в текущем джеме выглядит вот так:

Не очень-то похоже на ударку, но до чего же просто и приятно это программировать, когда вкатишься!
Не очень-то похоже на ударку, но до чего же просто и приятно это программировать, когда вкатишься!

В принципе оператора T может быть достаточно для чего угодно, но у меня есть ещё несколько любимцев в запасе.

  • F, или If в терминологии ORCΛ. Сравнивает аргументы слева и справа; если они совпадают, выпускает * снизу от себя.

Очень полезен для трекеров с чуть более медленным но всё же привязанным к темпу инкрементом. Использую для программирования нот басовых дорожек.

На примере выше каждые 16 фреймов осуществляется инкремент, после чего в операторе T меняется вывод. В данном случае в выводе оператора пишется нота и записывается в переменную b.

Здесь нота из переменной b проигрывается другим секвенсором
Здесь нота из переменной b проигрывается другим секвенсором

  • R, или Random в терминологии ORCΛ. Ещё один мой любимый оператор. Выводит снизу от себя случайное значение, ограниченное аргументами слева (минимум) и справа (максимум).

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

Рандомная нота из гаммы "ля минор" находит своё место в секвенсоре
Рандомная нота из гаммы "ля минор" находит своё место в секвенсоре

  • X, или Write в терминологии ORCΛ. Позволят писать значение из аргумента справа по смещению x и y, определяемому аргументами слева. Полезен, когда не хватает места для вставки нужных операторов по месту назначения.

Переменная d, передаваемая оператором X на a клеток по оси x помогает ноте в нижнем секвенсоре подскочить вверх на одну октаву
Переменная d, передаваемая оператором X на a клеток по оси x помогает ноте в нижнем секвенсоре подскочить вверх на одну октаву

  • J, или Jumper в терминологии ORCΛ. Позволяет передать значение из аргумента сверху в вывод вниз. Позволяет экономить место, особенно при описании нескольких секвенсоров. Оператор можно стекать.

Колонны операторов J передают значение Va для использования в других секвенсорах T
Колонны операторов J передают значение Va для использования в других секвенсорах T


Ничего не понятно!

Мне тоже было сложно поначалу въехать в концепт операторов и значений. Особенно сложно было натянуть на голову Base36 и соответствующие ограничения.

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

Благо ORCΛ является своего рода "протоколом", существует несколько его имплементаций, как то на JS(десктопная аппка в Electron, пользуюсь этим на винде), сишная реализация для консольки (мой любимый вариант, живёт у меня на Pi Zero WH и совокупляется с iPad), а также Lua для каких-нибудь специфических устройств типа Monome Norns.

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


Надеюсь, вам было интересно! Спасибо, что дочитали до конца.

Подписывайтесь на мой канал на YouTube, там будут регулярно публиковаться демки, сделанные с помощью ORCΛ.

https://rcmd.space/on/youtube

Связанные посты
2 комментария 👇

Выглядит как Dwarf Fortress для музыкантов. Сложна! Но интересно было почитать, спасибо за погружение в странный мир)

  Развернуть 1 комментарий
Igor Kislitsyn , Программист 27 июня 2021

Выглядит офигенно! Как житель линуксового терминала, мечтающий вкатиться в музыку, с нетерпением жду момента, чтобы попробовать это чудо. Спасибо за годноту! :)

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб