December 6, 2023

Формально-грамматическая музыка (часть 1).

О чём речь?

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

Формальная грамматика

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

Начальную реализацию я планирую в виде простейшей (насколько это возможно) грамматики, описанной в виде BNF нотации (или похожей на неё) и кода (на данный момент на Haskell), который будет в соответствии с этими правилами генерировать midi файлы для каждого голоса в "произведении" (т.е. каждый отдельный голос будет играть не более одной ноты в единицу времени, никаких аккордов). Для простоты первоначальная реализация планируется в виде 4х голосых "произведений" и голоса будут совершенно независимыми. Параметры, которые будет генерировать грамматика изначально тоже будут ограниченны: высота звука, длительность звука, velocity.

Изначально планируется использовать MIDI формат (в идеале MIDI 2.0). Инструменты, которые будут исполнять "произведения" программировать на данном этапе я не планирую, а буду использовать встроенные в DAW или VST инструменты.

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

Ещё возможно создам отдельные инструменты на SuperCollider или Pd для расширения возможных модификаций параметров исполнения произведения в рамках формальной грамматики (грубо говоря, чтобы в грамматике учитывались частота среза фильтра синтезатора, резонанс, параметры генератора огибающей и т.д.).

Где следить за проектом?

Основная часть конечно будет в виде открытого исходного кода на github.com.

Все обновления в виде кода и технических объяснений/рассуждений (скорее всего на английском языке) будут в репозитории и страницах к нему. Как только будут результаты или выводы по этому проекту - я буду писать отдельные посты в блоге и копировать их в соответствующих группах в соц.сетях (telegram, vk).

Если вам стало интересно - подписывайтесь