Парень заходит в компьютерный класс и спрашивает: «Вы знаете, что ваш сервер не работает?» Специалист по анализу данных отвечает: «Нет, но если вы напеваете несколько миллионов тактов, я попытаюсь подделать это».

К настоящему времени различные компании предлагают автоматизированную композицию музыки. Например, Jukedeck делает это частично за счет использования машинного обучения для создания оригинальных произведений на основе больших наборов музыкальных примеров. В проекте Google Magenta особое внимание уделяется обучению на примере, основанному на данных, а не подходам к созданию музыки, основанным на правилах. Эти и многие другие проекты продемонстрировали впечатляющие музыкальные результаты, звучащие по-человечески.

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

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

Согласованность как предсказание

Я согласен с мнением, что музыка - это в основном ни о чем, кроме каково это слушать (или играть) музыку.

Так что же с музыкальным произведением как? Во-первых, если в музыке есть ритм, вы попадаете в круговорот предвкушения и исхода, поскольку ритм звучит на разных уровнях. Осмысление в этом контексте означает формирование подсознательных предсказаний в ответ на результаты других предсказаний.

Эти вложенные ожидания вызывают иерархическую структуру, придающую значение поверхностным заметкам и наоборот. (Психология музыкального предсказания была впервые исследована в книге Леонарда Мейера 1956 года Эмоции и смысл в музыке.)

Использование врожденного музыкального чутья

Элизабет Маргулис указывает в своей книге Повторение: как музыка играет в сознании, что обычно вспоминают любую знакомую мелодию, только прокручивая ее в голове. Это означает, что музыка - это не то, что вы на самом деле помните, а то, что вы регенерируете, чтобы запомнить. Возможно, дело в повторном запуске иерархии вложенных прогнозов.

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

Углубление повторения

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

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

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

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

Сопроцессор, а не автомат

Я хочу подчеркнуть, что этот подход не «сочиняет музыку» оптом, как проекты, упомянутые в верхней части. Скорее, он выполняет в реальном времени рекурсивные ритмические вычисления, которые музыканты (вероятно) выполняют подсознательно только после многих лет практики. Иерархическая организация нот во времени устраняет значительные препятствия для музыкальной импровизации на уровне нот.

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

Музыка с движущимися частями

Сценарий мечты - это некий формат распространения музыки, в котором записывающиеся исполнители размораживают определенные части (скажем, партии баса или синтезатора), позволяя варьировать во время воспроизведения. Но на данный момент обсуждаемые здесь алгоритмы воплощены в пользовательских приложениях для macOS / iOS, которые управляют наборами Ableton Live. Вы управляете вариациями на выбранных треках, в то время как остальная часть микса продолжает повторяться без помех.

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

Генеративный анализ и композиция

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

Большинство технических деталей будут в некоторой степени замазаны. Полную информацию можно найти в статье Самоподобная карта ритмических компонентов (к которой в настоящее время есть свободный доступ при переходе с этой страницы). Ссылки на статьи конференции с подробным описанием алгоритмов находятся здесь.

Приступая к условиям

Знакомство с частным использованием здесь нескольких музыкальных терминов полезно:

  • Измеритель относится к вложенным импульсам, образованным рекурсивным разделением временной шкалы. То есть есть две половинные ноты на целую ноту, две четвертные ноты на половинную ноту и так далее, с импульсами на каждом метрическом уровне, чередующимися между слабыми и сильными ударами. (Здесь рассматривается только двоичное деление, а не экспрессивная синхронизация, триоли или тройные метры и т. Д.)
  • предвкушение - это нота, которая возникает в слабой доле на каком-то метрическом уровне. Он «ожидает» более сильного удара, который сразу же последует на этом уровне.
  • Синкопирование происходит всякий раз, когда за ожиданиями не следуют ожидаемые ноты (на последующих долях).
  • Петли здесь означают повторяющиеся шаблоны, состоящие из одного, двух или четырех столбцов длиной 4/4. (Петли повсеместны в EDM, но также довольно распространены во многих других жанрах.)
  • Вариация, как (уже) использованное в этом обсуждении, относится не только к формальной теме и вариациям; но в более широком смысле к любой мелодии или такту, которые могут легко заменить другую (даже в своего рода музыкальном противостоянии).

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

Совместная обработка и предварительное вычисление

Попытка справиться со сложностью создания музыки не нова. Возьмите клавиатуру пианино; Большая часть предварительных вычислений встроена в схему, которая определяет отношения логарифмический / линейный и коэффициент / близость высоты тона на двух уровнях (диатоническом и пентатоническом). Практически ничего из этого не доступно, скажем, скрипачу, поэтому неудивительно, что пианисту легче играть полифонические и гармонические текстуры.

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

Алгоритмический анализ и генерация музыки

Здесь я кратко расскажу, как и почему генерируются ритмические строительные блоки. Сначала я опишу, что они инкапсулируют.

Ожидание и повторение

Дэвид Гурон в своей книге 2006 года Сладкое ожидание: музыка и психология ожидания заметил, что когда нота возникает в слабой доле (на некотором метрическом уровне), вы, как правило, ожидаете ноту в последующий сильный удар. Это просто сила тяжести музыкального метра.

Это ожидаемое примечание может произойти, а может и не произойти. Но в любом случае, если шаблон повторяется, вы ожидаете, что все, что случилось, продолжится, даже если это (как это ни парадоксально) означает ожидание неожиданности. (Фред Лердал и Рэй Джекендофф отметили связь между параллелизмом и согласованностью в своей книге 1983 года Генеративная теория тональной музыки.)

Итак, два психологических ограничения будут организационными принципами для всего последующего.

  1. Нота, приходящаяся на слабую долю, вызывает ожидание следующей ноты на сильной доле.
  2. Результат ожидания, определенный в (1), вызывает ожидание того, что такие результаты будут повторяться.

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

Синкопа и разработка

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

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

  1. Syncopate, сдвигая все атаки на один удар раньше по времени.
  2. Доработайте, объединив вышеуказанное синкопирование с исходными атаками.
  3. Ничего не делать.

Результатом является дерево строительных блоков, которые вместе составляют каждый эволюционный результат синкопирования или операций по переработке.

Детализация, сопоставленная с треугольником Паскаля

Что-то удивительное (ну, для меня) происходит, когда вы начинаете кодировать комбинации вышеуказанных операций. Допустим, у вас есть три метрических уровня, и вы генерируете строительный блок, применяя операцию уточнения на первом и третьем уровнях, закодированных как вектор 101 (то есть двоичное число с тремя битами, по одному для каждого метрического уровня, содержащее 1, соответствующую на каждый уровень, на котором происходила разработка.)

Ритм складывается так:

Теперь рассмотрим треугольник Паскаля, набор биномиальных коэффициентов, в частности нечетных коэффициентов (выделены жирным шрифтом). Ритм, закодированный двоичным представлением 5, находится в пятой строке (считая с нуля).

Совпадение? Нет, оказывается, что любое кодирование уточнений в двоичное число указывает на строку в треугольнике Паскаля, где нечетные записи точно соответствуют результирующему ритму. (Это потому, что, согласно теореме Лукаса, двоичные цифры последовательных нечетных биномиальных коэффициентов образуют паттерны, которые точно соответствуют комбинациям разработок на различных метрических уровнях.)

Возможно синкопированная разработка, сопоставленная с прокладкой Серпинского.

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

Поскольку каждая комбинация уточнений и синкопий кодируется парой двоичных чисел, которые не имеют одинаковых единиц в одном и том же двоичном месте (поскольку на каждом метрическом уровне может выполняться не более одной операции), каждая такая пара двоичных чисел может быть объединена в одно троичное число, различающее единицы в кодировке синкопии путем преобразования их в двойки.

Используя эти троичные числа в качестве адресов фракталу, известному как прокладка Серпинского (как показано ниже), теперь у нас есть карта всех потенциальных строительных блоков, визуально представленная с точки зрения разработок и синкопий. (Математически это соответствует образцам, образованным двоичными переносами в суммах биномиальных коэффициентов, как установлено теоремой Куммера, которая связана с теоремой Люкуса.)

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

Приложения из строительных блоков

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

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

Текущий набор приложений называется Coord. Некоторые подробности и демонстрации есть на ordin.fm .

Различные ритмы

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

Геометрия как музыкальный инструмент

Графический интерфейс пользователя может использовать самоподобие всего набора строительных блоков путем коллективного сдвига цифр в троичных кодировках. Это позволяет вариации естественного звучания, которые, тем не менее, могут сильно отличаться на поверхности, параллельный, иерархический вид редактирования, который иначе было бы трудно представить.

Ключевой аспект этого подхода становится видимым в таких взаимодействиях, тот факт, что каждая атака имеет свой собственный потенциал, чтобы стать отдыхом, и наоборот. Потенциал атаки равен объединенному иерархическому весу строительных блоков в данный момент времени (подробности опять же в документах, ссылки на которые приведены выше). Ноты действуют как камни в потоке, одновременно воздействуя на поток и погружаясь в него или нет.

Https://youtu.be/Ypb5kUMxb8g

Синкопа с помощью генетического алгоритма

Это предлагает простой способ усиления синкопии без разрушения узнаваемости: ГА с функцией фитнеса, которая вознаграждает ритмы с низкой степенью экономии строительными блоками, но с высокой степенью сходства с оригиналом.

Морфинг между ритмами

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

Пейзаж ритмических вариаций

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

Будущие направления

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

Самостоятельная карта

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

Https://youtu.be/mLyglwG3SY8

Нейронные сети

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

Возможно, я мог бы представить атаки рекурсивной нейронной сети (вероятно, LSTM), каждая из которых закодирована вектором, который указывает, какие строительные блоки включают эту атаку (двоичный вектор с длиной 3 для n метрические уровни). Цель состоит в том, чтобы сеть изучила шаблоны атак на фоне коллективных ожиданий, связанных с каждым шаблоном.

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

(Более реалистично, есть надежда поработать над чем-то подобным вышеупомянутому с более знающими соавторами.)

Доступен ли исходный код?

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

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

Заключение

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

Экосистемы ритмов и мелодий

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

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