Рандомные звуки что это
Генерация музыки в реальном времени
«Как автоматизировать сочинение музыки?» — этот вопрос тревожит умы музыкантов еще со времен средневековья. Кеплер превращал траектории движения планет в музыку; Моцарт и его современники изобрели игру в «музыкальные кости» — они броском кубиков выбирали из большой таблицы такты и составляли из них менуэты. Но только с появлением компьютеров алгоритмическая генерация музыки получила настоящее развитие. Теория вероятности, марковские цепи, искусственные нейронные сети — все это стало инструментами создания музыки.
Разумеется, чисто математическая музыка редко когда оказывается благозвучной, несмотря на красоту математики как науки. Поэтому люди начали пытаться автоматизировать написание привычной, «классической» музыки. Выявить закономерности в произведениях, разложить музыку на «составляющие» и понять, почему та или иная комбинация нот вызывает у слушателя разные эмоции. Почему простое движение по гамме в разных контекстах воспринимается по-разному? Существует ли идеальное произведение? Твердых ответов на эти вопросы до сих пор нет — есть лишь философские размышления музыковедов да теоретиков. Но музыканты и математики по всему миру не сдаются и продолжают копать этот вопрос.
Будем считать, что со вступлением покончено и перейдем сразу к моей работе. Я начал увлекаться генерацией музыки пару лет назад и выбрал эту тему в качестве своей магистерской работы на мехмате ЮФУ.
Тема моей диссертации звучит страшно: «Инкрементная генерация музыкальных произведений на основе динамических паттернов.» В переводе на русский: генерация музыки в реальном времени с использованием изменяющихся паттернов.
К написанию данного поста меня сподвигла аналогичная работа, опубликованная вчера и личная просьба Vokabre осветить данный вопрос. Я постараюсь по минимуму использовать термины из теории музыки и рассказывать все простым языком, но иногда меня может заносить, так что заранее извиняюсь.
Постановка задачи
То есть, я хотел получить инструмент, который превращал бы пользователя одновременно в композитора и дирижера импровизирующего ансамбля: все играют складно, в гармонию, кто-то солирует, а остальные аккомпанируют и руководитель в любой момент может приказать кому-либо вступить в игру. Здорово же!
Пример генерируемой музыки
Используемые инструменты
Структура генератора
Тут все, вроде, очевидно. Модель упрощенная и не претендует на универсальность, но основные структурные единицы музыкального произведения демонстрирует наглядно.
Условно можно разбить весь процесс генерации на три этапа: генерация основной мелодии, гармонизация ее и, наконец, генерация второстепенных голосов по этой гармонии. Полученный музыкальный такт проигрывается и генерация продолжается. Рассмотрим модули по отдельности:
Модуль основной мелодии
Это самый сложный из модулей. Он, собственно, генерирует мелодии. Отчасти рандомно, отчасти обдуманно — для этого используются паттерны. Паттерн в данном контексте — последовательность из двух или более нот (или более мелких паттернов), имеющих относительную длительность, не привязанная к какой-либо тональности или аккорду. То есть паттерн — это то, как могут быть связаны друг с другом ноты. Простейшие из паттернов имеют следующий вид:
У Баха некоторые из произведений очень легко описываются одинаковыми паттернами, например, вот эта прелюдия в до-миноре имеет один и тот же паттерн (меняется только аккорд, по которому идет движение)
Повторю еще раз: паттерн — это не абсолютные ноты, это лишь отношение между нотами. «Вторая нота выше предыдущей на полтона», или «вторая нота отстоит от первой на три ступени текущей тональности», или «вторая нота является следующей нотой по текущему аккорду» (т.е. для до-мажорного аккорда вслед за «до» прозвучит «ми»).
Таким образом описываются все возможные отношение между двумя соседними нотами, принадлежащими одному мотиву. Создается база часто используемых в музыке паттернов и с их помощью строится основная мелодия.
В итоге мы получаем какую-нибудь мелодию. Она будет нашим мотивом на ближайшие четыре такта. В дальнейшем этот мотив либо повторится, но уже от другой ноты, либо будет слегка изменен, либо вовсе будет заменен на другой мотив — в зависимости от структуры текущего предложения.
Модуль гармонизации
Гармонизация мелодии — это задача достойная отдельного исследования. Ради программы, способной решить задачи по гармонии, студенты муз. колледжа готовы пойти на многое. Для них гармония — это что-то вроде синонима к слову «матан». И не зря — правил гармонии не так уж и много, но вот исключений из них очень много. Поэтому разработка алгоритма, который бы верно гармонизировал один такт с учетом предыдущих тактов, но без информации о последующих тактах может занять очень много времени. По правде говоря, у меня со знакомой-теоретиком музыки была даже дискуссия о существовании такого алгоритма.
Таким образом, необходимо задачу упростить и сделать реализуемой за разумные сроки. Так что введем ряд ограничений: во-первых гармонизировать будем только трезвучиями (никаких септ- и нонаккордов, пока что), во-вторых пренебрежём несколькими правилами касательно уменьшенных аккордов, которые могут затруднять жизнь, и в-третьих — сделаем обязательным движение к доминанте в конце 4 такта и к тонике в конце 8-го. Чтобы у слушателя возникало ощущение завершенности.
Вот так выглядит схема допустимости применения одних аккордов вслед за другими. Также есть еще несколько нюансов касательно переноса аккордов через тактовую черту и так далее, но их я опущу, чтобы не вдаваться в подробности.
Гармонизатор на входе получает такт с мелодией, и согласно имеющимся правилам гармонизирует ее, создавая сетку аккордов. Тут вступает в работу последний генерирующий модуль.
Модуль генерации второстепенных аккордов
Работа этого модуля довольно проста: он берет аккордовую сетку и, подставляя простейшие паттерны, генерирует простенькие второстепенные голоса. За основу берутся ноты, входящие в состав аккорда, и таким образом гарантируется гармоничность. Аккомпанемент — это то, что обычно играется в левой руке у фортепиано, либо стандартный перебор у гитары. По сути — тоже набор паттернов, только более мелкой длительности.
Воспроизведение
Когда все сгенерировано — полученная партитура поступает в распоряжение всех плееров: один выводит это в виде звука, другой рисует ноты, а третий — пишет в файл. Чтобы гениальное произведение не пропало!
Пользовательский интерфейс
Пользовательский интерфейс позволяет задавать параметры как до, так и во время самой генерации (изменения вступят в силу уже в следующем такте). Можно менять инструменты, их роли (мелодия/второстепенный голос/аккомпанемент), громкость, октаву и так далее. Также можно регулировать общий темп и громкость произведения, его тональность и частоту появления украшений. Это такой дирижерский пульт для виртуального ансамбля.
Программа по-прежнему находится в разработке и еще много чего будет добавлено. Модульная система позволяет улучшать отдельные компоненты, не ломая при этом другие.
Мне поступили многочисленные просьбы поделиться программой или исходниками. Так вот, тут ситуация такая: я ближайшие пару месяцев планирую внедрить в программу новые возможности, значительно улучшить алгоритм генерации и сделать еще несколько плюшек. После этого я, скорее всего, создам проект на github’е, где и можно будет взять исходники и саму программу. По этому поводу, видимо, будет еще отдельный пост на Хабре.
Еще меня часто просили дать почитать целиком магистерскую диссертацию — что я с радостью и делаю. Полный текст моей работы доступен вот здесь: http://armaxis.ru/files/MusicGenerator.pdf. Также я выложил презентацию, что демонстрировал на защите, где освещаются основные моменты программы.
Спасибо всем за столько активное обсуждение данной темы, я, право, и не ожидал такого!
Программная генерация звуков
Звук можно представить ввиде бесконечного количества волн различной частоты
и амплитуды. Волны, в свою очередь, могут иметь практически любую форму.
Из самых распространенных и чаще всего используемых можно назвать: синусоидальная (sine), квадратная (square), пилообразная(saw), треугольная (triangle), и шум (noise). Сначала попробуем разобраться с основными параметрами волны: период и амплитуда.
Частота (измеряется в герцах) — количество периодов в секунду. Например при частоте 44100Hz количество периодов равно 44100. Теперь когда основные термины изучены перейдем непосредственно к алгоритму генерации волн.
float samplerate; // частота сэмпла
float wavefrequency; // частота волны
float wavevolume; // громкость волны
float period=samplerate/wavefrequency/2; //вычисляем период волны
float pi=3.14; //число pi
int n;
Например нам надо получить 16-килобайтный синусоидальный звук частотой 1000Hz и при этом качество сэмпла должно быть 44100Hz, тогда наши параметры будут иметь следующие значения: samplerate=44100, wavefrequency=1000, samplelenght=16384.
Особенного пояснения требует параметр wavevolume. Издавна известно, что качество звука пропорционально зависит от его битности (8-bit, 16-bit, 24-bit и т.д.). Для 8-bit — значение от 0..255, для 16-ти – 0. 65536, для 24-х – 0. 16777216. Какой выбрать? Смотря какая у вас задача, но меньше 16-ти я бы не посоветовал (хотя бывают и исключения – когда надо сократить объем сэмпла взамен качеству).
2) Пилообразная волна (saw)
float sr_2m=samplerate/wavefrequency; //Вычисляем период
int c=0; //Специальная переменная для проверки
//на окончание периода
for(int a=0;a =sr_2m) c=0; //если период закончился, то начать следующий
buffer[a]=wavevolume*(c/period)-wavevolume; //вычисление волны
c++;
>
3) Треугольная (triangle)
float period=samplerate/wavefrequency/2; //вычисляем период волны
int c=period*2;
int c2=-1;
float sr_2m=period;
float sr=samplerate/wavefrequency/4;
for(int a=0;a sr_2m) c=sr_2m,c2=-1;
if(c
Теперь усложним задачу — сложим две волны разной частоты и амплитуды.
float tone1=65,tone2=131;
float samplerate=44100/2; // Частота дискретизации
int a,b,amp1=128,amp2=64;
С таким сэмплом уже можно писать мелодии. В принципе, это основа wave
synthesis при помощи которой можно создать любой звук.
И напоследок пара советов:
1) Для получения более насыщенного звука складывайте волны с различными
формами: sine+square, triangle+saw, или вот такой вот монстр: saw+square+
triangle+saw.
2) Перкусия (hat) лучше всего получается путем сложения noise+sine.
Автокомпозитор мелодий Muzz
Как сочинить музыку? Где ее готовую взять чтобы, например, озвучить видео на ютубе (и чтобы там не появилась метка о нарушении авторских прав)? Как написать эту самую музыку самому когда никаких мотивов не лезет в голову? Откуда взять идеи о новой мелодии, хотя бы об ее отрывках?
Я поклоняюсь великому непредвзятому рандому. Он то никогда не будет сочинять мелодии на основе уже услышанных на прошлой неделе, не будет, исходя из своих вкусов, выделять одни стили музыки и давить другие, у него нет эмоций и настроения. Он просто берет и делает музыку всех стилей, всех направлений, всех размеров (в пределах возможностей, заложенных в алгоритм).
И мой рассказ будет посвящен алгоритму, работающему на основе такого рандома, и соответствующему фрагменту софта, проигрывающему свежесочиненные мелодии прямо в колонки или сохраняющему в MID-файлы.
Он был назван Muzz.
Изначально была идея создать генератор мелодий для графического редактора PaintCAD 4Windows. По задумке, он должен был быть одной из дополнительных возможностей, позволяющей генерировать и играть в колонки/наушники что нибудь расслабляющее для комфортного рисования в редакторе. Но в результате нескольких попыток создания мелодий обособленных стилей — алгоритм Muzz был приведен в универсальный вид, генерирующий совершенно случайную (в пределах своих возможностей) музыку различных стилей.
Примеры получающейся музыки (MIDI-файлы)
Как «сочинить» музыку программно
Итак, если сгенерировать случайную последовательность нот, то с некоторой вероятностью она будет одной из мелодий уже придуманных, или даже тех, которые придумают через год, два, пять, десять лет.
Аналогично, кстати, и с картинками — если сгенерировать картинку из случайных пикселей, то с копеечной вероятностью вы получите еще не нарисованную картину или кадр из неснятого фильма с изображением еще не родившегося актера. Но даже в самой простой по цветности черно-белой картинке один пиксель это 1 бит, и придется сгенерировать порядочное количество пикселей, например, для картинки 100х100 — это 10000 пикселей или 2^10000 вариантов картинки. Из этого ясно, что вероятность получения красивой картинки весьма и весьма мала.
А в музыке все немного проще — каждая нота это число в пределах нескольких октав. Например, в MIDI — каждая нота это число от 0 до 127.
Сгенерировав случайную последовательность нот одинаковой длительности — получим музыкальный мусор. Чтобы получить что-то более красивое — надо задуматься: «а что же такое — музыка?».
Что же это такое?
В алгоритме Muzz я задумался и поделил музыку на три части:
Барабанный ритм — будем сочинять попсу, рок, что нибудь с четким ритмом. Иногда ритм может быть не включен в конечный результат.
Аккомпанемент — каждый такт играется определенный стиль аккомпанемента, в соответствии с текущим аккордом. Для этого сначала алгоритмом создается очередь аккордов. Играется аккомпанемент определенным инструментом.
Мелодия — в один момент времени активна одна нота, ноты могут иметь разные длительности. Также могут быть паузы различных длительностей. Ноты соответствуют текущему аккорду аккомпанемента. Инструмент может быть как тот же, что и в аккомпанементе, так и другой.
Входные параметры алгоритма
Чтобы получить что нибудь подальше от «какофонии» и поближе к «шедевру» — нужно задать определенные начальные условия. И формировать музыку в соответствии с ними.
Следующие параметры (начальные условия) были выбраны, как задаваемые пользователем и поступающие на вход алгоритма:
1) Окрас: грустная, нормальная, веселая.
2) Размер: от 2/8 до 8/8. Например, 3/8 это вальс, 6/8 (т.е. 3/4) — тоже вальс, но длинный, а 2/8, 4/8 или 8/8 — обычная попса, рок и т.п.
3) Набор инструментов: в MIDI существует 16 наборов инструментов (по 8 в каждом, например, клавишные или медные духовые). При создании музыки можно взять инструменты для мелодии и аккомпанемента из одного набора (как будто скрипач и бас-скрипач играют, или два пианиста). Но можно взять и из разных.
4) Наличие или отсутствие барабанов
5) Наличие вступления
6) Количество куплетов (от Минимального до Максимального значения, выбирается алгоритмом случайно между мин и макс)
7) Наличие припевов
8) Наличие заключения.
Вот так они выбираются и редактируются в окошке:
Порядок генерации
Посередине этого окошка три поля: «Исходник», «Подготовленные» и «Мелодия».
Скрипт №1 записывается в поле «Исходник». В нем лежат и аккорды, и служебные команды («переключить ритм барабанов», «сменить инструмент», «сменить образец ритмики мелодии» и т.д.).
Затем очищенный от служебных команд он поступает в список «Подготовленные» — это получается Скрипт №2. Там лежит чистая последовательность аккордов. Один аккорд на один такт музыки.
Кроме того, при записывании в поле «Подготовленные» чистых аккордов — генерируется сама мелодия и закладывается в поле «Мелодия» по «N=размер» нот на такт как скрипт №3. Если размер создаваемой мелодии 8/8 — то на один аккорд будет создано 8 нот, если 3/8 — то на один аккорд будет 3 ноты.
Выбор барабанного ритма
Алгоритм генерации должен по входным параметрам выбрать Барабанные ритмы для вступления, куплетов, припевов, заключения. Были заложены несколько ритмов под размер, кратный двойке. Алгоритм просто выбирает один из них, стараясь делать вступления и куплеты по силе ритма меньше/равными припевам. Возможные стили показаны в фрейме «Стиль барабанов» (команда SDS): Рок 1, Рок 2, Спокойный ритм, Энергичный ритм.
Также есть галка «Выход» с полем с цифрой A — это пятый стиль, который подмешивается к любому из четырех вышеупомянутых, делая акцент в виде удара тарелок в конце такта (A=0) или даже в виде удара тарелок и нескольких ударов барабана (A=1). Конкретный стиль «выхода» (A=0 или 1) выбирается рандомно при генерации каждой следующей мелодии.
А еще номер «патча» — если там поставить 16, то snare-барабаны будут мощные (из power-набора). В зависимости от громкости и агрессивности инструментов аккомпанемента и мелодии — иногда алгоритм выбирает мощные барабаны.
При размере мелодии 8/8 ритм проигрывается целиком, остальные размеры рвут ритм, начиная в следующем такте его с первой ноты. При этом ритмы достаточно легко приспосабливаются «для вальса» или для экзотических размеров 5/8 или 7/8, и на слух все вроде бы отлично.
Выбор набора аккордов по окрасу
Т.к. есть три окраса мелодий «Грустные», «Нормальные», «Веселые», то для каждого из них заложен свой набор аккордов, из которых алгоритм выбирает и складывает последовательности аккордов.
Am, E, Dm — опорные, используются как для мелодии, так и для вступительного и заключительного аккорда куплетов/припевов/вступлений/заключений
E7, F, G, C, A7, A#7, B7 — обычные, используются вместе с опорными для генерации промежуточных аккордов в куплетах/припевах/вступлениях/заключениях
E6, Dm6 — очень грустные аккорды, используются редко, но метко.
К ним вдобавок поставляется таблица связей. Она сделана для исключения несозвучной постановки аккордов в песне. Таблица связей для грустных аккордов рекомендует:
после A7 — брать следующим аккордом Dm,
после A#7, B7, E6 и Dm6 — брать следующим аккордом E.
Алгоритм выполняет эти рекомендации для любого окраса мелодии лишь в 50% случаев, чтобы осталась «отдушина» в оставшихся 50% случаев сгенерировать что нибудь необычное и неординарное.
Смесь из мажорных и минорных аккордов в прикуску с септами.
Am, E, Dm, G, C, F — опорные и они же основные.
A7, D7, E7, C7, G7, F7, A#7, B7 — редкоиспользующиеся.
Таблица связей:
после A7 — брать следующим аккордом Dm,
после D7 — брать следующим аккордом E,
после E7 — брать следующим аккордом Am,
после A#7, B7 — брать следующим аккордом E.
Мажоры как они есть.
C,F,G — опорные
C7, F7, G7 — основные
D — редкоиспользующийся
Таблица связей:
рекомендации отсутствуют
Повторы
Чтобы создавать одинаковые куплеты и припевы на протяжении всей песни — была введена скрипт-команда Lx, позволяющая скопировать в данное место аккорд номер x и соответствующие ему ноты мелодии. Например, если есть 4 аккорда, то их легко повторить так:
1 Am
2 G
3 C
4 E
5 L1 (сюда встанет Am)
6 L2 (сюда встанет G)
7 L3 (сюда встанет C)
8 L4 (сюда встанет Am)
При генерации аккордов — каждый новый аккорд может быть взят вместе с мелодией из другого аккорда, причем в любой последовательности, например:
1 Am
2 G
3 C
4 E
5 L3 (сюда встанет С)
6 Dm
7 L1 (сюда встанет Am)
8 L5 (сюда встанет C, до этого скопированный в пятую строку)
Таким образом, формируется по одному образцу вступления, куплета и припева. Второе вступление/куплет/припев ссылаются на первый образец и при генерации «скрипта №2» они превращаются из Lx в нормальные аккорды (и мелодия перетаскивается из первого образца копированием).
Выбор инструментов
Для аккомпанемента и мелодии нужно выбрать инструменты. В MIDI, на мой взгляд, бывают тихие инструменты, громкие инструменты и кривые инструменты. Была составлена на слух таблица, где 0 — тихий, 1 — громкий, 2 — кривой инструмент. Слушались чистые звуки из базы GM.dls, поставляемой с виндоусом. Может быть на других базах «кривые» звуки не такие и кривые, но мы рассчитываем на массового потребителя, слушающего миди с этой стандартной базой.
Алгоритм старается выбирать для припевов инструменты громче чем для куплетов. Также он старается избегать кривых инструментов (хотя не на 100%, чтобы иногда создать мелодию с необычным звучанием).
Последние два фрагмента таблицы по 8 инструментов — это ударные (Percussive) и звуковые эффекты (Sound effects, свистки, аплодисменты, крики, стрельба и т.п.), они вообще не используются для аккомпанемента и мелодий. Но на всякий случай в таблицу были добавлены тоже.
Инструменты выбираются отдельной для вступления, куплетов, припевов с увеличенной вероятностью быть одинаковыми для всех этих частей нашей мелодии. Выбранные значения выставляются служебными командами SAN (SetAccompNumber) и SMN (SetMelodyNumber) в скрипте №1 в начале каждой части мелодии (например, «Am:SMN30:SAN40»).
Выбор стиля аккомпанемента
На данный момент в Muzz есть 6 стилей аккомпанемента, и алгоритм выбирает их случайно для вступления, куплетов и припевов с увеличенной вероятностью не менять их между вступлением, куплетами, припевами. Лежат эти стили во фрейме «Стиль аккордов (SAS)».
С помощью этих стилей может сгенерироваться как гитарная песня «постой, паровоз, не стучите колеса» (если повезет, и в качестве инструмента будет выбрана акустическая гитара, а барабаны будут пропущены), так и более жесткие ритмические мелодии или наоборот расслабляющие тропические ритмы.
Генерация мелодии
Как было упомянуто выше, при добавлении чистого аккорда в скрипт №2 «Подготовленные» — параллельно с ним записываются N нот или пауз в скрипт №3 «Мелодия», где N — музыкальный размер от 2 (это 2/8) до 8 (это 8/8).
В нижней части окна есть много флажков, рандомно выставляемых при генерации каждой новой мелодии.
Ноты могут выбираться рандомно из гаммы текущего аккорда аккомпанемента, могут при включении флажка «Оставить 1,3,5,7 ноты из гаммы» — выбираться только эти четыре ноты (первая, третья, пятая, седьмая) из гаммы, также можно начинать все такты с основной первой ноты аккорда (флажок «Начинать все такты с акк.ноты»).
Также для частей мелодии (вступления, куплетов, припевов) выбирается случайная расстановка нот или расстановка по образцу длиной 8 цифр вида «00100101». Где 1 — там надо вставить ноту, где 0 там пропуск. Таким образом, иногда алгоритм делает мелодии вступления, куплеты и припевы с определенной ритмикой. Отвечает за это флажок «По образцу (P):» и поле рядом с ним, а в скрипте №1 — служебная команда «Pxxxxxxxx» (или просто «P», если нужно отключить мелодию по образцу). Сам образец в ходе генерации создается случайным способом, поэтому ритмика может быть какой угодно.
Если образец не задан, то выбор «вставить ноту или паузу» делается алгоритмом с учетом движка «Наполнение, % (SFC)», расположенного в нижней части окна. Наполнение также задается рандомно для каждой новой мелодии (от 20 до 40%).
Темп мелодии и транспонирование
Чтобы мелодии не звучали однообразно на одних и тех же частотах — рандомный фактор влияет на темп (время одного тика, игры одной ноты), задаваемый в поле «Пауза, мс (ST)» в миллисекундах, а также на транспонирование всей мелодии вместе с аккомпанементом на указанное в поле «+полутоны» количество полутонов (оно выбирается рандомно от 0 до 5, чтоб звуки не убегали далеко вверх).
Окно Muzz после окончания генерации
Вот оно — сгенерирован первый скрипт, а на его основе — скрипт №2 (аккорды) и №3 (мелодия):
Управление композитором
Интерфейс управления является простым подразделом меню «Экстра» в паинткаде.
Горизонтальное меню в паинткаде по умолчанию скрыто (чтоб не мешалось) — нажмите «ноль» на клавиатуре чтобы показать его (или мышкой кнопку «меню» в левом верхнем углу окна под значком кисти).
Чтобы запустить сочинение и проигрывание — жмем в меню «Играть» или Ctrl+P. Во время проигрывания на статус-панели главного окна паинткада отображается выбранный окрас песни, текущий такт и количество тактов:
Чтобы остановить проигрывание — жмем тот же пункт (или то же сочетание клавиш). Следующий запуск проигрывания — уже новая сгенерированная мелодия.
Если играющая мелодия вам понравилась и вы хотите оставить ее себе на память — во время проигрывания выберите «Сохранить проигрываемую мелодию в MID» (или просто нажмите Alt+P). На время сохранения проигрывание будет приостановлено и продолжено только после сохранения (на том же месте, где была остановка).
Если хотите указать, какие мелодии генерировать и проигрывать, их окрас, размер и прочие параметры — выбираем в меню пункт «Настройки» или жмем «Ctrl+Shift+P». Настройки сохраняются после выхода из паинткада и будут подгружены при следующем запуске паинткада.
Если прослушивание мелодий в паинткаде вас не устраивает, нет времени — можно быстро сгенерировать от 1 до 100 мелодий и сохранить их в MID-файлы в выбранную папку, а потом уже в ручном режиме кликать файлы, слушать, удалять непонравившиеся. В этом вам поможет пункт «MIDI-бластер» (или сочетание клавиш Shift+P):
Куда девать все эти MIDI-песни?
Из MIDI-песен можно с помощью любого музредактора (например, FruityLoops с плагином LSD) сгенерировать MP3 файлы, а уже потом использовать их хоть для озвучки роликов на youtube, хоть в собственных играх в качестве музыкального сопровождения.
Также можно их использовать как основу для создания своих собственных сочинений — все полученные MIDI файлы могут быть открыты любым MIDI-редактором, например, Cakewalk Sonar. Внутри MID-файла каждая партия «барабаны», «мелодия», «аккомпанемент» лежит в отдельном треке. Смена инструментов в пределах трека задается событиями («эвентами», см.event list), поэтому при желании можно вырезать из полученной музыки любой фрагмент, снести эвенты задания инструмента и утащить этот фрагмент в свою песню.
Хочу послушать/погенерировать мелодии
1) Скачайте последнюю версию бесплатного графического редактора PaintCAD 4Windows 1.2.2 по ссылке blackstrip.ru/pcw.rar (10 Мегабайт). Распакуйте в пустую папку.
2) Запустите paintcad.exe
3) Жмите Ctrl+P для запуска/остановки композитора Muzz до тех пор, пока он не выдаст вам нормальную мелодию. Или другие упомянутые выше сочетания клавиш. Или нажмите «0», а затем в меню выберите «Экстра»-«Генератор музыки Muzz» и там соответствующий пункт.
Перспективы
И таблицы связей между аккордами, показанные выше, неидеальны. Хорошо бы иметь для каждого предыдущего аккорда набор вероятностей по постановке следующего. Тогда можно просканировать творчество (вручную прослушать и посчитать где сколько и каких аккордов, собрать из них набор аккордов, посмотреть с чего начинается и чем заканчивается каждый куплет, припев и проигрыш и т.д.) какой либо музыкальной группы, и вывести общую формулу что «после Am у них идет Dm в 40% случаев, а G в 10% случаев» и так для всех аккордов из набора. Получится туча аккордов с вероятностными связями между собой, свойственная творчеству именно этой музыкальной группы.
И тогда, наверное, можно будет выбирать «мне бы создать пару песен Арии, пару песен Агаты кристи и одну от Prodigy».