Программист-испытатель на людях
2,4
рейтинг
29 июня 2013 в 17:55

Дизайн → Автокомпозитор мелодий 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) Наличие заключения.

Вот так они выбираются и редактируются в окошке:


Порядок генерации


Вот это служебное окно с «удобным» интерфейсом не показывается никому кроме тех, кто запустит PaintCAD 4Windows с ключом -muzz в командной строке. Предполагается, что пользователь просто запускает на проигрывание композитор Muzz и слушает музыку, не видя никаких его интерфейсов (см. раздел Управление композитором в конце статьи). Но алгоритм генерации использует как раз все эти флажки, поля, движки и прочие компоненты в своей работе:



Посередине этого окошка три поля: «Исходник», «Подготовленные» и «Мелодия».

Скрипт №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, поставляемой с виндоусом. Может быть на других базах «кривые» звуки не такие и кривые, но мы рассчитываем на массового потребителя, слушающего миди с этой стандартной базой.

Вот эта таблица инструментов
Instvol:array [0..127] of Integer=(
1, 1, 1, 1, 0, 0, 0, 0,
0, 2, 1, 1, 0, 2, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 0, 1, 1, 1, 2,
1, 0, 0, 1, 1, 0, 1, 1,
1, 1, 1, 1, 0, 0, 1, 2,
1, 2, 0, 0, 1, 0, 0, 2,
1, 1, 1, 0, 1, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 0, 0, 2, 2, 0, 0,
1, 1, 0, 2, 1, 0, 2, 1,
0, 2, 1, 1, 0, 2, 1, 2,
1, 2, 2, 1, 1, 2, 1, 1,
1, 1, 0, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1
);

Алгоритм старается выбирать для припевов инструменты громче чем для куплетов. Также он старается избегать кривых инструментов (хотя не на 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» и там соответствующий пункт.



Перспективы


Сейчас в качестве барабанных ритмов используются простых ритмы по 8 тиков на такт. Поэтому есть идеи пустить параллельное тактирование по 32 тика на такт. И использовать рандомно-сгенерированные последовательности ритмов, где есть четкий стержень (например, 1 удар каждые 8 тиков), а остальное намазывается поверх случайным образом. Тогда должны получиться хип-хоп ритмы и другие необычные ритмы с плавающими акцентами.

И таблицы связей между аккордами, показанные выше, неидеальны. Хорошо бы иметь для каждого предыдущего аккорда набор вероятностей по постановке следующего. Тогда можно просканировать творчество (вручную прослушать и посчитать где сколько и каких аккордов, собрать из них набор аккордов, посмотреть с чего начинается и чем заканчивается каждый куплет, припев и проигрыш и т.д.) какой либо музыкальной группы, и вывести общую формулу что «после Am у них идет Dm в 40% случаев, а G в 10% случаев» и так для всех аккордов из набора. Получится туча аккордов с вероятностными связями между собой, свойственная творчеству именно этой музыкальной группы.

И тогда, наверное, можно будет выбирать «мне бы создать пару песен Арии, пару песен Агаты кристи и одну от Prodigy».
Дмитрий Тимофеев @blackstrip
карма
13,0
рейтинг 2,4
Программист-испытатель на людях
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Дизайн

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

  • +6
    А почему бы генератор мелодий отдельно не распространять? А то как в советские времена получается, товар с нагрузкой ;)
    • 0
      По идее в финале развития паинткада должно быть, чтоб в паинткаде можно было сделать кадры видео, потом музыку (сгенерировать или написать), потом еще озвучку сделать и потом все это там же сложить в конечное видео со звуком и эффектами. Автокомпозитор Muzz — это один из первых шагов в сторону такого финала =)
      • +11
        А также написать друзьям через встроенный IRC о своем новом видео и залить его на youtube через встроенный браузер.
        • +3
          Как Неро. PaintCADOS.
        • +1
          Браузер… аааааа…


          • 0
            По дефолту картинки, activex, ява и другие скрипты выключены (кнопки справа — красные). Поэтому такой вид. Это удобно если у вас медленный интернет или если вы любите бесплатный тариф Yota с ограничением скорости и хотите через него иногда сидеть в инете, читать форумы и т.д.

            Интерфейс браузера заточен одновременно под тачскрин, клавиатуру и мышь (как и окна паинткада).

            Если у вас тачскрин: то боковые кнопки для вас, а слева есть третья снизу кнопка-стрелка — это виртуальная клавиатура. Прокручивать страницу можно «шариком» справа вверху, скорость регулируется.

            Если у вас клавиатура:
            — нажатие F10 перенесет фокус в адресную строку
            — двойное нажатие F10 выделит весь текст в ней (чтоб стереть и ввести новый адрес).
            — кнопки Вверх-Вниз будут крутить страницу вверх и вниз.
            — удерживание Alt покажет на каждой боковой кнопке ее клавиатурную клавишу.
            — удерживание Ctrl, Shift, Ctrl+Shift, Alt при нажатии Вверх-Вниз будет менять масштаб, прокручивать страницу горизонтально, прокручивать страницу вертикально с увеличенной скоростью и пр.
            — нажатие Ctrl+M позволит управлять курсором мыши, чтобы выбрать одну из ссылок или кликнуть куда либо (Пробел — левая кнопка мыши, Z — правая кнопка мыши).

            Если у вас мышь: то пользуйтесь браузером как обычным браузером

            Подробнее о мини-браузере Бро и об управлении им можно прочитать в системе помощи паинткада в разделе «Экстра»
            • 0
              Зачем нужен браузер в графическом редакторе? Времена dos, где не было многозадачности прошли
              • +2
                Перейдите в помощи на 2 статьи выше, там есть пункт «Зачем оно нужно?» =)
                • 0
                  Там нет ответа на вопрос, зачем это все нужно в графическом редакторе? Я так понимаю, вы и игры собираетесь туда добавить?
                  • +1
                    Цитата из того раздела помощи:
                    Экстра — это один из пунктов в Главном Меню. Он содержит дополнительные утилиты, не относящиеся напрямую к редактированию графики. Если вам вдруг надоело рисовать — вы можете заняться другими делами с помощью пунктов этого меню.


                    Т.е. на вопрос «зачем это все нужно в графическом редакторе» ответ «незачем» получается) Проблема в том, что паинткад не чистый графический редактор, поэтому мы с вами говорим о разных вещах.
    • +4
      Вы еще не знаете множество других возможностей PaintCAD'а :)
      • +1
        Все равно как и емакс, редактор бессилен перед кофе.
  • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      А мне наоборот понравилось, вот Kraftwerk хотя бы вспомните. Алгоритм можно менять, развивать и приближать, теперь, когда он есть и его можно послушать, там много чего можно накритиковать и как результат критики — улучшить. Теперь самое главное как раз и начинается.
      Частотная таблица нужна, это автор уже написал, но тут нужна цепочечная частотная таблица. Вроде как для букв по Шеннону (типа Punto Swicher). Это даст возможность оставаться в рамках одного стиля и не перескочить случайно с джаза на рок.
      Генератор для seed-a нужен, с которого мелодия начнется, а для нескольких инструментов — для связанных сидов. Таблица гармонических переходов в какой-то степени эмулируется частотной таблицей, но сид наверное лучше создавать по теории а не по частоте встречаемости.
      С ритмами тоже можно что-то похожее накрутить, чтобы не брать из списка готовых, это пошло.
      Как для первого примерочного шага — отличная вещь.
      • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Поддерживаю главную мысль вашего комментария. Недавно на семинаре по философии обсуждали что такое искусство и главное, что я оттуда вынес — искусство — это воплощение в чувственной форме какой-то находки, которая не видна была другим людям и человек ее смог выразить так, чтобы донести. Музыка — это не просто формально устроенная система музыкальной формы, а внутренний поиск и реализация найденного. Такого рода программы должны ставить главной целью помощь музыканту, но никак не могут полностью заменять творчество. Но автором проделана очень большая работа и мега-респект.
      • +1
        Есть один такой замечательный профессор в Калифорнии — David Cope. Ему удалось написать программу, которая, получая на входе набор произведений одного композитора, выдает бесконечное число произведений в его стиле. Результаты работы даже профессиональные музыканты не могли отличить от оригинала. Профессора атаковали критики, крича, что в музыке должна быть душа, а он все уничтожает. Но ведь даже сгенерированная в стиле Шопена музыка тоже вызывает эмоции — так где же она, душа? Вопрос до сих пор открыт.

        Советую почитать вот это интервью с ним — там он рассказывает историю создания программы, как ее восприняли окружающие и какая участь ее в итоге постигла.
  • +14
    Узнал автора по первому скриншоту…
  • +4
    Автор тотально крут и не перестает удивлять!)
  • 0
    Вспомнилась отечественная контора Ntonyx, которые еще в 90-х сделали плагин Style Enhancer для Cakewalk, умевший «оживлять» музыку, делать миди-треки похожими по звучанию на реального исполнителя.

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

    Но чем дальше они развивались, тем меньший их ждал успех. Почему, хотел бы я знать? Почему многие умные и полезные проекты уходят в небытие, а невнятная посредственность захватывает рынок?
    • 0
      Подозреваю, что это просто ни кому не надо
    • +1
      Заговор. Кто у нас пользователи Cakewalk-а? Они, родимые, непризнанные гении от щипка и клавира. Чем лучше качество музыки будет давать подобный робот, тем больше они будут орать про его тошнотворство и говничество. Да и многие неплохие композеры призадумаются. Точно заговор.
      • 0
        Я все же думаю, что это потому, что музыкант по своей природе чужд таким понятиям, как автоматизация, алгоритм, функция (в данном контексте, к примеру, функция периода вибрато от времени), цикл… В каком-то неважном переходе можно было бы сделать автогармонизацию, быстро и неплохо, но упорный будет всё рисовать вручную, а разгильдяй забьёт. Умных же музыкантов в расчет не принимаем, поскольку они перманентно задавлены упорными и разгильдяями.
  • +2
    Отличная тема! Не хотите ли добавить обучающиеся алгоритмы, обратную связь слушателей, и запустить 24/7 вещание «живого» автобарабанера+басера например, для начала?

    Здорово было бы разработать расширяемый формат описания разных аспектов музыки — от темпа, «настроения», до особенностей звукоизвлечения отдельных инструментов. Был бы рад пообщаться лично на эту тему.
  • +2
    Алгоритмику гармонизации придумали до вас — не изобретайте велосипедов, покурите «Бригадный учебник» — широко известный в музыкальных кругах учебник гармонии. Музыкальную гармонию, в принципе, можно организовать как математический процесс.

    За идею зачёт, реализация… ну не тягается пока машина с человеком. Вот запилят ИИ, тогда заживём! :)
  • +15
    image
  • +1
    Идея интересная, но из примеров только «Какой-то сектор газа без припевов» доставил. Остальные композиции весьма посредственные.
  • +1
    Самое сложное то не нагенерить музыки, а оценить, насколько достойно она звучит. В этой области по прежнему без человека никак. Если это появится — будет бесценное изобретение.
  • +3
    Идея аудиогенератора прекрасна, а интерфейс основной программы — ну просто ПЦ ЗЦ (подсмотрено в интерфейсе). Это гремучая смесь дизайна окон восьмой винды, ribbon-интерфейса, огромных иконок и моего чувства прекрасного.
  • +10
    А вот так звучит моя программа того же назначения:
    rghost.ru/47110388
    rghost.ru/47110399
    • +3
      Послушайте, это же отлично! А где можно посмотреть эту программу? Может вы напишите пост, очень интересно было бы почитать!
      • +1
        Может и напишу. Мне просто было нечего делать полгода назад в новогоднюю ночь, тогда я и состряпал эту прогу. Так и лежит у меня. Надо будет заставить себя и написать нормальную статью :)
        • 0
          Только попробуйте не написать) Не могли ли бы пока выложить прогу куда-нибудь?
          • 0
            Для начала нужно откопать обе её части (веб и генетика). На днях займусь — всё найду.

            Скоро, кстати, начну новый интересный проект. Ко мне едет Emotiv Epoc Research Edition SDK. :)
    • 0
      Да, очень интересно было бы узнать подробности — для чего создавалась, как работает и пр.!
      • 0
        Если коротенько, то она сначала обучается на множестве случайных последовательностей 4-5 аккордов заданной тональности. Эти случайные последовательности выдаются пользователям в web-интерфейс, пользователи прослушивают и оценивают последовательности, база наполняется. Если для одной последовательности известно несколько оценок, берётся среднее. Потом простейшим генетическим алгоритмом находится более длинная последовательность аккордов с максимальной оценкой, причём из оценки вычитаются повторы. Ну, и ещё несколько моментов, вроде того, что длинная последовательность замкнута в кольцо и т.п. Те примеры, что я привёл, были получены как результат оценок добровольцами ресурса linux.org.ru.
        • 0
          Хорошая идея, рад что нашел ее в обсуждении. Слышал профессиональное мнение о Beatles. Что в начале своей карьеры, играли по кабакам что в голову придет и просто смотрели на реакцию публики. Благодаря этому были замечены несколько «формул», которые дали толчок их творчеству. То есть сыграла роль та самая связка рандома и обратной связи от слушателя.
  • 0
    Тогда можно просканировать творчество (вручную прослушать и посчитать где сколько и каких аккордов, собрать из них набор аккордов, посмотреть с чего начинается и чем заканчивается каждый куплет, припев и проигрыш и т.д.) какой либо музыкальной группы, и вывести общую формулу что «после Am у них идет Dm в 40% случаев, а G в 10% случаев» и так для всех аккордов из набора. Получится туча аккордов с вероятностными связями между собой, свойственная творчеству именно этой музыкальной группы.
    Я таким же образом мыслил, когда начинал играть на гитаре. Даже составил этот самый список в автоматическом режиме. Потом открыл для себя гармонию.
  • +1
    Мне нравится ваш подход к разработке программ, было бы интересно потестить 3D моделлер в вашем исполнении.
  • +2
    Демосценой повеяло!
  • +4
    Судя по всему именно так и создают «музыку» к российским телесериалам. Плюс ещё две софтинки — для сценария и диалогов. Шмяк — и Гена Букин на экране.
    • 0
      Скорее к xxx.
  • +1
    В сети видел похожий онлайн генератор, возможно вам будет интересно

    cosmoradio.org/
  • 0
    Как-то недавно у нас на факультете, на «Недели науки» один студент делал доклад, в котором рассказывал, что делает подобную штуку. Только там у него мак был. Мелодии довольно неплохие.
    • +1
      Я лично знаю этого человека, что демонстрировал генератор музыки на «Неделе наук», мы с ним на одном факультете учимся.
      Я показал ему этот тред, он захотел откомментировать — но у него read-only аккаунт, поэтому он попросил меня выложить его комментарий. Вот он:

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

      Только в моем случае процесс генерации несколько иной и идет такт за тактом: сперва генерируется с использованием стандартных паттернов основная мелодия, потом она гармонизируется (тональность можно менять, разумеется) в соответствии с правилами гармонии и получается один такт с аккордами и мелодией. Затем поверх гармонии дописываются второстепенные голоса и аккомпанемент — которые дополняют мелодию. И в итоге этот такт проигрывается. Затем процесс повторяется, но новая мелодия уже может являться либо повтором предыдущей, либо модификацией ее — таким образом получается мотив, движение к устойчивым нотам в конце квадратов (в конце 4 и 8 тактов). Гармония также разрешается в доминанту и тонику в конце предложений.

      Увы, возможности записать свежее демо программы нет, могу лишь продемонстрировать видео месячной давности (сейчас звучит еще приятнее).
      Из функций также вывод в виде обычных нот в риалтайме, воспроизводится все с помощью звуковых банок в .sf2, есть возможности сохранения в MIDI и MP3.
      Если кому-то интересно — могу постараться написать подробный пост про свою разработку.
      • +1
        (Могу поделиться инвайтом за пост по теме)
        • +2
          Спасибо большое за инвайт!
          В ближайший день-два постараюсь написать подробный пост про свой генератор. Не знаю, правда, как уместить 56 страниц диплома в сжатый пост… но попробую!
          • 0
            Можно несколькими частями. Тема очень мимими!
            • 0
              Да ладно, думаю в один кусок впихнуть смогу. На защите ж за 5 минут как-то рассказать смог =)
              PS Уже снял новое демо-видео ;)
            • +3
              habrahabr.ru/post/185154/
              Наслаждайтесь!
              • 0
                Уже увидел текст, и правда очень мимими получилось! С первым постом!
  • 0
    ИМХО, беда всех музгенераторов в том, что их авторы — хорошие программисты, но непрофессиональные музыканты. А важно быть не просто музыкантом, а даже профессиональным композитором. Именно так.

    Дело в том, что музыка — это очень близкая математике область. Вы даже не представляете, насколько. Конечно, современные композиции — это уже что-то из области настолько высшей математики, что со стороны кажется каким-то чудом. Но надо постигать эту науку (изучение принципов композиции) с азов. А эти самые азы оттачивались и «разрабатывались» людьми много веков.

    Например, многим, наверное, известный по Gregorian или Enigma жанр музыки, называемый «Грегорианский хорал». Этот вид музыки имел множество весьма строгих правил, нарушать которые было нельзя. И эти правила довольно легко можно описать алгоритмически. В итоге у вас могут получиться довольно крутые композиции, которые мало чем будут отличаться от реальных грегорианских песнопений.

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

    Дальше — больше. Появление классической музыки (Гайдн, Моцарт, Гендель, и т.д.). Музыка усложняется, и снова добавляются новые правила — теперь уже касающиеся гармонических последовательностей. Причём, к сегодняшнему дню всё разложено по полочкам: вот такие интервалы дают ощущение тревожности, вот такие модуляции используются для кульминационных моментов, и т.д. и т.п. Даже формы произведений и их эмоциональная структура также подчиняются правилам, отработанным на слушателях столетиями и работающим безотказно.

    И так далее вплоть до современного времени. Наверное, сложность в том, что у программиста просто не хватит жизни, чтобы изучить все эти музыкальные «секреты» (я, например, за 12 лет профессионального музыкального образования изучил только азы, а ведь я учился непосредственно на теоретико-композиторском отделении, даже не на исполнительском, где эти знания дают очень поверхностно). В результате программисты сразу пытаются имитировать музыку современного уровня, минуя базовые знания. В итоге музыки-то и не получается — только набор звуков без характера, динамики и экспрессии. А именно эти факторы делают музыку музыкой.
    • 0
      Кстати, посмотрел на то, что делает Дэвид Коп. Он профессионал и в своих экспериментах использует именно формулы. Но тема настолько сложна, что он пока работает на уровне лишь частичного участия алгоритмов в создании мелодий — человек всё равно является важным компонентом. И это именно только мелодия — весь аккомпанимент берётся уже готовый.
      • +1
        Да, Дэвид Коп непосредственно участвует в процессе создания мелодии — отсекая неверные структуры и т.д.

        Для достижения успехов в этой сфере необходимо, чтобы программисты и музыковеды\композиторы работали сообща. Как при разработке лингвистических систем. Иначе точно ничего не выйдет!
        • 0
          Для достижения успехов в этой сфере необходимо, чтобы программисты и музыковеды\композиторы работали сообща. Как при разработке лингвистических систем. Иначе точно ничего не выйдет!

          Есть ещё один важный вопрос. А надо ли вообще что-то делать в данном направлении? :)

          Впрочем, вопрос, конечно, глупый. Бесполезных экспериментов не бывает.

          На самом деле я лично очень жду опытов в немного другой, хоть и смежной сфере. Как правило, основная проблема композитора — перевод музыки, прозвучавшей в мыслях, в голове, в читаемый вид (в партитуру). Именно на этот процесс тратится 99% всего времени из творческого процесса, и даже знаний — надо помнить все особенности звукоизвлечения на сотнях инструментов, их возможности, характерные особенности и т.д. и т.п. Нередко удачные находки трансформируются или даже полностью забываются, пока композитор медленно (даже с учётом компьютера и миди-клавиатуры) записывает то, что прозвучало в голове. Так вот, почему бы не «записывать» звучащую музыку прямо с головы, снимая импульсы с мозга? А уж компьютер сам проанализирует записанные данные и назначит темп, тональность и размер, а также на основе анализа тембра пропишет, какие инструменты нужно использовать, чтобы извлечь звуки требуемых параметров. Таким образом, на долю композитора останется чистое творчество — придумывать музыку, а всю техническую, рутинную часть возьмёт на себя компьютер. Вот это будет реальная революция.
    • 0
      Весьма странно слышать подобные заявления от профессионального музыканта.

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

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

      И уж современная музыка — вам ли не знать — в плане гармонии не представляет из себя ничего выдающегося, если вы, конечно, вы не склонны в пассажах Мессиана усматривать сложнейшие формулы. Послушайте Ленинградскую симфонию Шостаковича и, например, фугу из BWV 537 и прислушайтесь к ощущуениям.
  • +2
    Написал пост о своей реализации музыкального генератора.

    habrahabr.ru/post/185154/
    • –2
      А вот вы, кстати, двигаетесь в более правильном направлении.

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

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.