Существует множество языков для музыкального программирования. О некоторых из них, например, Sporth или ORCA, мы рассказывали в блоге. Сегодня поговорим о проекте Harmonicon — браузерном DAW, реализующем концепцию music-as-code.

Фотография: Aliane Schwartzhaupt. Источник: Unsplash.com
Фотография: Aliane Schwartzhaupt. Источник: Unsplash.com

На чем придется писать

В общем случае концепция music-as-code и муз. программирование подразумевают написание треков на специализированных ЯП. Но в отличие от других систем такого класса, Harmonicon предлагает использовать JavaScript. Инструмент разработал инженер Джеймс Райан в прошлом году и выложил исходники на GitHub.

Для воспроизведения звуков и музыки приложение использует Web Audio API, а также фреймворки NextJS и Tonejs и библиотеку Tonaljs. Рабочая область Harmonicon похожа на большинство IDE для разработки, так как использует open source редактор Monaco.

Скриншот: https://harmonicon.studio/
Скриншот: https://harmonicon.studio/

Для настройки звуков в IDE представлен браузер аккордов. Он позволяет выбрать тональность, вид лада (например, мажор или минор), а также октаву (1–6). Далее, система автоматически сгенерирует код, необходимый для воспроизведения этого аккорда — например, для мажорного трезвучия C (CEG) он будет выглядеть так:

quarter.note('*CM', { octave: 4 })

Виртуальная среда позволяет работать с синтезатором — он находится в правой части рабочей области — и подключать MIDI-устройства. В целом IDE содержит целую библиотеку стандартных инструментов — там есть клавишные (пианино, орган, гармония), ударные (ксилофон), струнные (арфа, контрабас, скрипка, виолончель) и многие другие. Сохранять музыкальные файлы можно как в облако, так и на локальный диск.

Также есть список шаблонов с аудиоэффектами. Например, чтобы добавить задержку в генерируемый трек, достаточно прописать команду:

session.use.effect('delay').from.library();

Следующая строка добавляет эффект тремоло:

session.use.effect('tremolo').from.library();

Документация с описанием функций и синтаксиса — во вкладке Help.

Стоит заметить, что проект Harmonicon является экспериментальным, поэтому в его работе можно встретить баги — в том числе ошибки при компиляции. Для повышения стабильности стоит работать в браузере Chrome. Но в целом эта IDE — неплохой инструмент, который позволяет познакомиться с концепцией music-as-code.

Больше виртуальных сред

Существуют и другие виртуальные среды, позволяющие взять легкий старт в музыкальном программировании. Одна из известных — Klangmeister, которая также не требует установки приложений и работает из браузера. Для написания композиций используется реализация LISP с компиляцией в JavaScript — Clojurescript. Треки воспроизводятся при помощи Web Audio API. Стоит заметить, что инструмент плохо подходит для написания сложных композиций, но помогает быстро погрузиться в тему.

Фотография: GESPHOTOSS. Источник: Unsplash.com
Фотография: GESPHOTOSS. Источник: Unsplash.com

Еще один интересный проект — открытый визуальный ЯП Pure Data. Программист работает не с кодом, а функциональными объектами, которые объединяются в патчи — по аналогии с модульными синтезаторами и патч-кордами для соединений. Pd подходит для цифровой обработки сигналов и на нем можно писать алгоритмическую музыку.


Что еще почитать в нашем «Мире Hi-Fi» и в нашем блоге на Хабре:


Комментарии (4)


  1. alex_dow
    24.04.2022 23:30

    Это все конечно интересно, но э то поворот не туда и не для всех. Что действительно нужно — это программа, в которой при запуске все уже работает и звучит и играет, но при этом есть много настроек, и все меняется в реальном времени и все взаимосвязано. Все современные стили настолько уже разобраны и понятны, что совершенно нет нужды тратить время на забивание барабанов баса итп, нужно дать человеку возможность пройтись по верхам, концептуально, манипулируя мелкими различиями на слух, но конечно, не исключая и глубокую редакцию, если нужно. В общем концепция такова — не от частного к целому через потерю времени и мучения, а от целого к частностям и деталям, что гораздо интереснее. Все кто пишет программы для создания музыки, основываются на концепции из80х. Очнитесь, сейчас знания музыкальных построений достаточно формализованы, нужно строить например оченьсвязные нейросетевые звуковые движки, а потом рисовать/лепить звук


  1. Assador
    25.04.2022 11:39

    Чем бы дитя не тешилось, лишь бы не руками…


  1. LordDarklight
    25.04.2022 15:45

    О музыка программным кодом - надо попробовать!

    Лично мне такая идея в голову пришла ещё в конце прошлого века (я тогда как раз баловался под DOS с своим музыкальным редактором для PC-Спикера; а более серьёзно музыку сочинял в Cakewalk, Cubase и в предшественнике Sony Vegas - запамятовал как он назывался) - но тогда мне было не до реализации подобной затей (не по зубам, я ещё только в школе учился) - да и во многом я пришёл к мысли, что у подобного проекта успех напрямую зависит от качественной мат модели и продвинутой IDE - это всё мне было не по моим знаниям! А потом меня жизнь уже направила совсем в другую стезю - и о данном проекте я вспоминал очень редко!

    Но вот, свершилось чудо, и кто-то всё-таки взялся за реализацию подобной идеи. Интересно - насколько глубоко пошли разработчики (смотрю - это уже далеко не первый проект на данном поприще, но ранее я ещё ни одного не встречал).

    В конце XX программирование музыки мне казалось удобным следующим (как я это представлял и представляю до сих пор - если ничего не забыл):

    1. Можно чётко в цифрах задавать ритмику, в т.ч. динамически меняющуюся; так же чётко в цифрах можно было бы задавать настройки звуковых эффектов и так же динамически их менять

    2. Использовать циклические паттерны, и паттерны абстрагирования, включая наследование с полиморфизмом - для сокращения объёма вводимого повторяющегося кода и быстрого внесения правок в эти сокращённые объёмы

    3. Применять программные техники для чёткой синхронизации отдельных семплов и эффектов на разных звуковых дорожках

    4. Использовать подпрограммы и библиотечные функции для увеличения коэффициента повторного использования

    5. Иметь возможность параметризировать субалгоритмы - делая их ещё более настраиваемыми, более абстрактными и ещё более с повторным использованием; с возможностью легко вносить изменения (от семплов до аранжировки), которые тут же отражались бы на всей композиции

    6. Ну и работать с текстовым представлением мне казалось куда более удобно - когда можно свободно перемещаться по строкам и операторам кода, сворачивать/разворачивать блоки кода, пользоваться буфером обмена. Писать отдельные подпрограммы для текстовой генерации отдельных фрагментов музыкального кода...

    7. Ну а самое главное - это возможность создавать динамическую музыку - как бесконечную и не повторимую, так и зависящую от внешних нестатических факторов - например музыку для игр - которая подстраивалась бы под текущую игровую ситуацию. Ну или упаковывать очень длинные композиции в небольшие программные блоки - как это например практикуется в Демо-сцене, откуда, собственно, и растут ноги программного котинга музыкальных произведений. Но это может быть и не только развлечение - это может быть, например, и лечебная музыка - которая подстраивается под биометрические показатели, считываемые с организма датчиками.

    8. На у самые невероятные возможности - это, конечно, AI-творчество - когда искусственный интеллект мог бы сам творить музыку, из заданных программных паттернов, а попутно создавая новые, и анализируя имеющиеся. Программный музыкальный код тут мог бы быть более удобным - и для AI и для человека, отлаживающего такую систему

    9. А ещё можно писать разные тулзы и сопрограммы для анализа и отладки программного код музыки - в текстовом виде это куда проще


    1. LordDarklight
      25.04.2022 17:48

      Добавлю:

      1. Делать программную генерацию тонов и звуковых волн семплов, или их программную модификацию. В том числе с применением разных воспитательных программных фишек, музыке напрямую не относящихся

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