Автокомпозитор мелодий Muzz — Доработка

Прошлая статья об автоматическом композиторе Muzz (https://habr.com/ru/post/184672/) была написана в 2013 году. С тех времен по 2022 год Muzz сочинял рандомные мелодии с рандомным аккомпанементом под барабанные ритмы рока. В некоторых случаях при необычной мелодии и ритме почти без барабанов результат был совсем не похож на рок. Чтобы сгенерировать хорошую мелодию надо было сначала сгенерировать 10–20(-30…) неудачных. И слушать их одну за одной.

Временами получались даже неплохие мелодии, но все в пределах рок-ритмов, одного стиля аккомпанемента на всю песню, единой громкости нот:

И вот осенью 2022 года накопилось несколько идей по доработке Muzz (как минимум расширить количество ритмов, аккомпанементов и добавить новые возможности рандомной генерации мелодий). Все они были реализованы в PaintCAD 4Windows версии 1.5.2. Теперь с новыми функциями Muzz сочиняет музыку гораздо более разнообразно (примеры сочиненных усовершенствованным Muzz мелодий — четыре youtube-ролика в самом конце статьи с разбивкой временной шкалы по отдельным мелодиям).

Расширение основного окна Muzz

Окно Muzz обычно не показывается пользователям (если только не запустить paintcad.exe с ключом -muzz). Пользователь сразу нажимает в основном окне Ctrl+P (или выбирает в меню паинткадовского главного окна Экстра — Генератор музыки Muzz — Играть) и Muzz начинает играть.

Подменю Muzz и команда Подменю Muzz и команда «Играть (Ctrl+P)»

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

Раньше окно Muzz было таким:

Старое окно Muzz в PaintCAD 4Windows 1.5.1Старое окно Muzz в PaintCAD 4Windows 1.5.1

С учетом всех осенних доработок оно расширилось, растолстело и потяжелело:

Расширенное окно Muzz в PaintCAD 4Windows 1.5.2Расширенное окно Muzz в PaintCAD 4Windows 1.5.2

Итак, что было добавлено:

1) Новые жанры

К стилям барабанов в стиле «Рок» были добавлены барабаны поп-музыки, хип-хопа и регги. Каждый набор стилей (радиокнопок) располагается на отдельной вкладке своего жанра.

4 набора стилей барабанов - для рока, поп-музыки, хип-хопа и регги4 набора стилей барабанов — для рока, поп-музыки, хип-хопа и регги

В настройках Muzz, лежащих в меню Экстра — Генератор музыки Muzz — Настройки (Ctrl+Shift+P) в главном окне PaintCAD 4Windows, добавилось подменю с жанрами. Можно выбрать конкретный жанр или случайный выбор жанра для каждой следующей генерируемой мелодии.

Пункт выбора жанра в настройках MuzzПункт выбора жанра в настройках MuzzПодменю выбора жанраПодменю выбора жанра

2) Увеличение количества нот в такте (или почему хип-хопа не было раньше)

Muzz разрабатывался с упором на 8 нот в такте. В пределах этих 8 нот дорожка барабанов могла дернуть 8 раз какой-нибудь барабан (или сочетание нескольких барабанов), дорожка аккомпанемента и дорожка мелодий — соответственно, дернуть ноту или сочетание нот своих инструментов. Для рока этого вполне достаточно. Для хип-хопа — очень и очень мало. Задержки между барабанами там имеют такие дробные смещения, что иной раз и нотами 1/16 (и даже 1/32 для сложных ритмов) не отделаешься.

Поэтому количество нот в такте теперь увеличено до 16. Теперь более живые ритмы с дробными задержками могут исполняться Muzz-ом (не настолько живые, конечно, как если бы стало 32 или 64 ноты в такте, но это уже не такие короткие 8 нот как раньше).

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

Пункт выбора размера в настройках MuzzПункт выбора размера в настройках Muzz

Любители вальсов могут выбрать размер 3/16, 6/16 или 12/16 и наслаждаться ими как раньше.

Подменю выбора размера мелодииПодменю выбора размера мелодии

3) Временная тишина в барабанах и аккомпанементе

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

Флажок отключения барабанов во всей мелодии и отдельные стили Флажок отключения барабанов во всей мелодии и отдельные стили «Тишина» для барабанов и аккомпанемента, создающие временную тишину только в текущем вступлении/куплете/припеве

Поэтому если флажок «Активировать» для барабанов текущей мелодии включен, то уже отдельно для вступлений, припевов и куплетов рандомно иногда выбирается отсутствие барабанов (если будет случайно выбран восьмой стиль барабанов «Тишина») или отсутствие аккомпанемента (если будет случайно выбран стиль аккомпанемента «Тишина»)

4) Новые простые аккомпанементы

Переборы, бой, просто аккорды — это хорошо. Но иногда хочется и простой аккомпанемент на 1–2 нотах текущего аккорда с определенной ритмикой. И он гораздо лучше подходит для хип-хопа и поп-музыки. Ну и для остальных стилей временами он хорош. Поэтому был добавлен набор простых аккомпанементов в дополнение к уже существующим более сложным.

Новые простые виды аккомпанементаНовые простые виды аккомпанемента

5) Новые сочетания опорной громкости барабанов, аккордов и мелодии

Раньше барабаны были самые тихие, громкость аккомпанемента — выше или равна громкости барабанов, громкость мелодии — выше или равна громкости аккомпанемента.

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

Движки опорной громкости с громкими барабанами, средними аккордами и тихой мелодиейДвижки опорной громкости с громкими барабанами, средними аккордами и тихой мелодией

6) Варьируемый аккомпанемент

Раньше стиль аккомпанемента выбирался при генерации в начале на всю мелодию и не менялся. Казалось что это поможет зафиксировать стиль мелодии и не менять его. Но почему бы и не менять его посреди мелодии? Так что теперь можно включить «Варьируемый аккомпамент» в настройках Muzz и тогда вступления, куплеты и припевы смогут иметь свои персональные стили аккомпанемента. Генерируемые мелодии смогут перетекать из лирических переборов в куплетах в долбежку одной нотой в припевах (на любителя, конечно, такие песни, поэтому пункт «Варьируемый аккомпанемент» по умолчанию выключен).

Пункт включения варьируемого аккомпанемента в настройках MuzzПункт включения варьируемого аккомпанемента в настройках MuzzПодменю вариантов включения варьируемого аккомпанементаПодменю вариантов включения варьируемого аккомпанемента

7) Варьируемая громкость инструментов, аккомпанемента, барабанов

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

Теперь для вступления, куплета, припева случайно выбирается последовательность громкостей нот в виде шестнадцати hex-цифр от 00 до FF. В итоге в поле «Мелодии» нового раздела «Варьируемая громкость» отображается 32 символа (16 нот по 2 символа), обозначающие громкость конкретных нот мелодии (относительно опорной громкости, выбранной движками на предыдущем скриншоте, FF — это опорная громкость х 1, а 00 — опорная громкость х 0, т.е. нулевая независимо от уровня опорной громкости, ну и промежуточные значения вроде 80 — это половина опорной громкости и т.д.).

Область, управляющая варьируемой громкостью отдельных нотОбласть, управляющая варьируемой громкостью отдельных нот

Аналогичные отдельные поля с последовательностями значений громкости теперь есть для аккомпанемента («Аккордов») и барабанов («Барабанов»). Для вступлений, куплетов и припевов могут быть как одинаковые последовательности громкости, так и различные (это выбирается рандомно при генерации мелодии).

Алгоритм варьирования громкости старается держать уровни громкости нот на высоких значениях (в пределах некоторого случайного диапазона), но иногда (случайным образом) специально зануляет громкости некоторых нот мелодии, аккомпанемента или барабанов:

6488c4d784312030325dc9744e7bdaba.png

Такое зануление громкостей как будто бы удаляет ноты из соответствующих дорожек мелодии, аккомпанемента и/или барабанов, это создает новые барабанные ритмы и стили аккомпанемента на базе существующих.

Вернуть всё взад (отключив «Варьируемую громкость») можно в настройках Muzz:

Пункт включения варьируемой громкости в настройках MuzzПункт включения варьируемой громкости в настройках MuzzПодменю вариантов включения варьируемой громкостиПодменю вариантов включения варьируемой громкости

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

8) Дублирование аккомпанемента на октаву вверх

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

Флажок дублирования аккомпанемента на октаву вверхФлажок дублирования аккомпанемента на октаву вверх

9) Выбор устройства вывода MIDI

В некоторых системах программный синтезатор MIDI — первое устройство. В таких системах Muzz проигрывал мелодии и раньше (выводил MIDI-команды в устройство номер 0). Теперь название MIDI-устройства для вывода отображается в пункте «MIDI-выход» настроек Muzz.

Отображение текущего MIDI-выходаОтображение текущего MIDI-выхода

В других системах программный синтезатор — не первое устройство. В этом случае Muzz не проигрывал ничего. Теперь стало можно переключить вывод MIDI-команд на другое устройство.

Например, в этой Windows 98 на скриншоте ниже, запущенной в эмуляторе LBochs на Android-телефоне, два устройства. Первое — MIDI-выход. Второе — программный синтезатор. И только второе проигрывает MIDI. Указываем второе и Muzz проигрывает мелодии корректно.

Этот MIDI-выход не поёт через программный синтезаторЭтот MIDI-выход не поёт через программный синтезаторВыбираем второй доступный выходВыбираем второй доступный выходА вот он уже поёт!А вот он уже поёт!

10) Отображение жанра проигрываемой мелодии на панели статуса

На панели статуса главного окна PaintCAD 4Windows кроме отображения окраса мелодий (мажор, норм или минор), номера текущего проигрываемого такта и общего количества тактов в мелодии теперь отображается и жанр — Рок, Поп, Хип-хоп или Регги.

Жанр и настроение мелодии, а также прогресс проигрывания Жанр и настроение мелодии, а также прогресс проигрывания «текущий такт/всего тактов»

11) Изменение структуры сохраняемых MID-файлов

Оказывается, все MIDI-события, связанные с темпом, рекомендуется записывать в отдельную дорожку в MID-файле (так написано в MIDI-спецификации). Поэтому теперь при сохранении понравившейся проигрываемой мелодии в MID-файл по Alt+P (или в меню Экстра — Генератор музыки Muzz — Сохранить проигрываемую мелодию в MID/QMP) создается файл с четырьмя дорожками (а не тремя как раньше): события темпа, мелодия, аккомпанемент и барабаны.

Пункт сохранения играющей сейчас мелодии в MID-файл или QMP-скрипт для редактора QmpotПункт сохранения играющей сейчас мелодии в MID-файл или QMP-скрипт для редактора QmpotВыбор сохранения только в MID-файл (без QMP)Выбор сохранения только в MID-файл (без QMP)

Также было обнаружено, что если укладывать в MID-файл ноты с минимальными смещениями в одно дельта-время, то:

  • под Windows сгенерированные Muzz-ом MID-мелодии играются как положено,

  • а под Android дефолтный движок проигрывания MIDI-мелодий проигрывает их сверхбыстро (раза в 4 быстрее положенного) почему-то.

Пробовал качать на телефон MIDI-плееры: те, кто используют стандартные способы проигрывания MIDI, играют слишком быстро. А те, кто на сторонних звуковых базах — играют в нормальном темпе. Попробовал открыть и сохранить сгенерированный MID-файл в стороннем редакторе (Cakewalk) — стал проигрываться на Android нормально во всех плеерах. После разбора внутренностей исправленного пересохранением MID-файла стало ясно, что все сдвиги в дельта-временах у него умножены на 12, и в полях тайминга соответствующие изменения (ускорение в 12 раз). Поставил аналогично в Muzz при сохранении в MID увеличенную скорость (по 12 новых дельта-времен в старом одном дельта-времени), умножил все задержки на 12 — и такой файл стал нормально проигрываться под Android. Чудеса, конечно, ну да ладно.

Теперь сгенерированные на телефоне в эмуляторе ПК (например, LBochs с Windows 98/XP) MID-файлы можно выкинуть из эмулятора наружу в обычную файловую систему андроида и слушать их в нормальном темпе, выбирая хорошие.

Мелодии, сгенерированные доработанным Muzz

а) 6 мелодий жанра Рок:

б) 6 мелодий жанра Поп:

в) 6 мелодий жанра Хип-хоп:

г) 6 мелодий жанра Регги:

Попробовать самому погенерировать музыку в Muzz

  1. Скачайте PaintCAD 4Windows по ссылке http://blackstrip.ru/pcw.zip
    (если по клику не качает — скопируйте ссылку и вставьте вручную в адресную строку новой вкладки вашего браузера, т.к. многие хромиум-подобные браузеры сегодня не любят http ссылки на https сайтах и не реагируют на клики на них),

  2. Распакуйте pcw.zip в любую папку,

  3. Запустите paintcad.exe

  4. При первом запуске пару раз нажмите Enter (первый раз — выбрать язык интерфейса, второй раз — закрыть окно краткого обучения).

  5. После появления главного окна нажмите Ctrl+P чтоб Muzz начал играть или Ctrl+Shift+P чтобы настроить Muzz. Также можно нажать 0 (ноль) и вручную попасть в меню, появившемся наверху главного окна, в раздел Экстра — Генератор музыки Muzz.

  6. Если играет мелодия, которая нравится — нажмите Alt+P и сохраните её в MID-файл.

    Интересных всем мелодий

© Habrahabr.ru