Методы генерации процедурной музыки
Некоторое время я много думал о процедурной генерации контента и никогда не видел много экспериментов с процедурной музыкой. У нас есть фантастические методы для генерации моделей, анимации, текстур, но музыка по-прежнему либо полностью статична, либо просто многослойна (например, Spore).
Из-за этого я продумывал оптимальные методы генерации музыки, и мне любопытно, что думают другие люди. Даже если вы ранее не рассматривали это, как вы думаете, что будет хорошо работать? Один метод на ответ, пожалуйста, и включите примеры, где это возможно. Техника может использовать существующие данные или генерировать музыку полностью с нуля, возможно, на каком-то входе (настроение, скорость, что угодно).
19 ответов
Сотовые автоматы - читай.
Вы также можете попробовать это здесь.
Редактировать:
rakkarage предоставил другой ресурс: http://www.ibm.com/developerworks/java/library/j-camusic/
Наиболее успешная система, вероятно, будет сочетать несколько методов. Я сомневаюсь, что вы найдете одну технику, которая хорошо работает для генерации мелодии, гармонии, ритма и баса во всех жанрах музыки.
Цепи Маркова, например, хорошо подходят для генерации мелодических и гармонических последовательностей. Этот метод требует анализа существующих песен, чтобы построить вероятности цепного перехода. Настоящая красота цепей Маркова в том, что государства могут быть любыми.
- Для генерации мелодии попробуйте номера клавишных нот (например, если ключ C минорный, C будет 0, D будет 1, D# будет 2 и т. Д.)
- Для создания гармонии попробуйте комбинацию относительных номеров клавиш для корня аккорда, типа аккорда (мажорный, минорный, уменьшенный, расширенный и т. Д.) И инверсии аккорда (корень, первый или второй)
Нейронные сети хорошо подходят для прогнозирования временных рядов (прогнозирования), что означает, что они в равной степени подходят для "предсказания" музыкальной последовательности при обучении существующим популярным мелодиям / гармониям. Конечный результат будет аналогичен методу цепей Маркова. Я не могу думать о какой-либо пользе от цепного подхода Маркова, кроме уменьшения объема памяти.
Помимо высоты тона вам понадобится длительность, чтобы определить ритм сгенерированных нот или аккордов. Вы можете включить эту информацию в состояния цепочки Маркова или выходы нейронной сети или создать ее отдельно и объединить независимые последовательности основного тона и длительности.
Генетические алгоритмы могут быть использованы для развития ритм секций. Простая модель может использовать бинарную хромосому, в которой первые 32 бита представляют структуру ударного барабана, вторые 32 бита - малый барабан, третьи 32 бита - закрытый хай-хэт и так далее. Недостатком в этом случае является то, что им требуется постоянная обратная связь с человеком для оценки пригодности новых разработок.
Экспертная система может использоваться для проверки последовательностей, созданных другими методами. База знаний для такой системы валидации может быть взята из любой хорошей книги по теории музыки или веб-сайта. Попробуйте http://www.musictheory.net/ Риччи Адамса.
Существует более 50 лет исследований по этим методам, которые часто упускают из виду разработчики, не знакомые с историей компьютерной музыки и алгоритмическим составом. Многочисленные примеры систем и исследований, которые решают эти проблемы, можно найти здесь:
Простой и несколько эффективный алгоритм состоит в том, чтобы использовать шум 1/f, известный как "розовый шум", для выбора длительностей и нот из шкалы. Это звучит как музыка и может быть хорошей отправной точкой.
Лучшим алгоритмом является использование "цепей Маркова". Просканируйте пример музыки и составьте таблицу вероятностей. В простейшем случае было бы что-то вроде C с вероятностью 20% следовать за A. Чтобы сделать это лучше, взгляните на последовательность последних нескольких заметок, например, за "C A B" с 15% вероятностью последует B, и За 4% вероятности последует Bb и т. Д. Затем просто выбирайте ноты, используя вероятности ранее выбранных нот. Этот удивительно простой алгоритм дает довольно хорошие результаты.
У Дмитрия Тимочко есть несколько интересных идей и примеров:
http://music.princeton.edu/~dmitri/whatmakesmusicsoundgood.html
Мне всегда нравились старые игры Lucasarts, в которых использовалась система iMuse, которая давала бесконечный реактивный саундтрек к игре и была очень музыкальной (потому что большая ее часть все еще создавалась композитором). Вы можете найти спецификации (включая патент) здесь: http://en.wikipedia.org/wiki/IMUSE
Nintendo, кажется, единственная компания, которая до сих пор использует подход, аналогичный iMuse, для создания или влияния на музыку на лету.
Если бы ваш проект не был очень экспериментальным, я бы не отказался от использования композитора - настоящий композитор-человек даст гораздо больше музыкальных и слышимых результатов, чем алгоритм.
Сравните это с написанием стихотворения: вы можете легко создавать несуразные стихи, которые звучат очень авангардно, но, мягко говоря, воспроизвести Шекспира с помощью алгоритма сложно.
Мое программное обеспечение использует прикладную эволюционную теорию для "роста" музыки. Процесс аналогичен программе Ричарда Докинза " Слепой часовщик " - MusiGenesis добавляет музыкальные элементы случайным образом, а затем пользователь решает, сохранять ли каждый добавленный элемент. Идея в том, чтобы просто оставить то, что вам нравится, и угробить то, что не звучит правильно, и вам не нужно иметь какое-либо музыкальное образование, чтобы использовать это.
Интерфейс дует, но он старый - подайте в суд на меня.
Исследования по созданию скучной процедурной музыки уходят далеко в прошлое. Просмотрите старые и новые выпуски журнала "Компьютерная музыка" http://www.mitpressjournals.org/cmj (нет реального доменного имени?). Здесь есть серьезные технические статьи, полезные для мастеров по синтезу музыки, жокеев-паяльников, скотоводов и научных исследователей. Это не пушистые обзоры и интервью, например, несколько журналов, которые можно найти в крупных книжных магазинах.
Вы смотрели на SoundHelix (http://www.soundhelix.com)? Это среда Java с открытым исходным кодом для алгоритмического создания случайной музыки, которая производит довольно аккуратную музыку. Вы можете использовать SoundHelix как отдельное приложение, как апплет, встроенный в веб-страницу, как апплет на основе JNLP, или вы можете включить его в свою собственную программу Java.
Примеры, созданные с помощью SoundHelix, можно найти здесь: http://www.soundhelix.com/audio-examples
Такой большой предмет. Вы можете посмотреть мое приложение для iPad, Thicket или мое программное обеспечение Ripple на morganpackard.com. По моему опыту, большинство академических подходов к динамической генерации музыки придумывают вещи, которые звучат, ну, академично. Я думаю, что более успешный материал находится на окраинах клуба / мира электроники. Монолак мой герой в этом отношении. Очень хорошо слушаемый материал, очень сгенерированный компьютером. Моя собственная музыка тоже неплохая. "Алфавитная книга" Пола Лански - хороший пример чрезвычайно слушаемой алгоритмической музыки, особенно если учесть, что он академик.
Техника, которую я рассматривал, заключается в создании небольших музыкальных паттернов, вплоть до бара или около того. Помечайте эти паттерны такими идентификаторами чувств, как "волнение", "интенсивность" и т. Д. Если вы хотите сгенерировать музыку для ситуации, выберите несколько паттернов на основе этих меток и выберите инструмент, с которым хотите играть. Основываясь на инструменте, выясните, как комбинировать паттерны (например, на пианино вы можете играть все вместе, в зависимости от размаха руки, на гитаре вы можете быстро играть ноты), а затем воспроизводить его в PCM., Кроме того, вы можете изменить ключ, изменить скорость, добавить эффекты и т. Д.
Книга " Алгоритмическая композиция" - это хороший обзор нескольких используемых методов:
"Рассматриваются следующие темы: марковские модели, генеративные грамматики, сети переходов, хаос и самоподобие, генетические алгоритмы, клеточные автоматы, нейронные сети и искусственный интеллект".
Это хорошая отправная точка в этой широкой теме, однако она никогда не описывает подробно, как работает каждый метод. Это обеспечивает хороший обзор каждого, но этого будет недостаточно, если у вас еще нет знаний о них.
Мое мнение таково, что генеративная музыка работает только тогда, когда она проходит строгий процесс отбора. Дэвид Коуп, пионер алгоритмической музыки, часами музыкально выводил из своих алгоритмов (которые, я думаю, в основном были основаны на цепочке Маркова), чтобы выбрать те немногие, которые действительно оказались хорошими.
Я думаю, что этот процесс отбора может быть автоматизирован путем моделирования характеристик определенного музыкального стиля. Например, стиль "диско" наградил бы много очков за басовую линию, которая показывает ударные и барабанные партии с петлями на задних битах, но вычитает очки для сильно диссонирующих гармоний.
Дело в том, что процесс создания музыки наполнен таким количеством идиоматических практик, что их очень трудно смоделировать без специальных знаний в этой области.
Еще в конце 90-х годов Microsoft создала элемент управления ActiveX под названием "Интерактивный контроль музыки", который выполнял именно то, что вы искали. К сожалению, они, похоже, отказались от проекта.
Не совсем то, что вам нужно, но я знал человека, который смотрел на автоматическое создание диджейских наборов под названием Content Based Music Similarity.
Я пытался сделать это проектное предложение - "8.1" от исследовательской группы "Теория и практика в языке программирования" из Университета Копенгагена - факультет CS:
8.1 Автоматизированный сбор урожая и статистический анализ музыкальных корпораций
Традиционный анализ нот состоит из одного или нескольких лиц, анализирующих ритм, последовательности аккордов и другие характеристики одного произведения, заданные в контексте часто смутного сравнения других произведений того же композитора или других композиторов того же периода.
Традиционный автоматический анализ музыки почти не рассматривал ноты, но фокусировался на анализе сигналов и использовании методов машинного обучения для выделения и классификации, скажем, настроения или жанра. Напротив, начинающиеся исследования в DIKU направлены на автоматизацию частей анализа нот. Добавленная ценность - это возможность извлекать информацию из больших объемов нот, что не может быть легко сделано вручную и не может быть осмысленно проанализировано методами машинного обучения.
На мой взгляд, это - противоположное направление вашего вопроса: сгенерированные данные - я думаю - могут быть использованы в некоторых случаях процедурного генерирования музыки.
Если вам интересны более глубокие теории о том, как сочетается музыка, на сайте Билла Сетареса есть несколько интересных моментов.
Я работал над модулем Python для процедурной музыки. Я просто запрограммировал то, что я знаю о нотах, масштабах и построении аккордов, а затем смог позволить ему случайным образом генерировать контент из этих ограничений. Я уверен, что есть больше теории и шаблонов, которым такая система могла бы обучаться, особенно кем-то, кто лучше понимает предмет. Затем вы можете использовать эти системы в качестве ограничений для генетических алгоритмов или генерации случайного контента.
Здесь вы можете ознакомиться с моей реализацией, особенно вам может пригодиться случайный пример с отведением. Кто-то с глубоким пониманием последовательности аккордов может создать структуру песни из таких методов и реализовать над ней случайные мелодии с ограничениями. Мои знания в области теории музыки не распространяются так далеко.
Но в основном вам нужно закодировать теорию музыки, которую вы хотите создать, а затем использовать ее в качестве ограничения для какого-то алгоритма для процедурного исследования диапазона этой теории.