Насколько я понимаю весь алгоритм вертится вокруг цепей Маркова. В свое время с помощью них писал генератор текстов. Там ещё был такой момент — для англоязычных текстов для удобоваримого результата словарь надо было строить по 2 предыдущим словам, для русскоязычного — по трем.
Когда-то давно пытался написать что-то подобное, правда все было гораздо проще — выбираем тонику, а от нее в минорной гамме начинаем строить рандомную мелодию. Правила просты — 3 вида ритма 1\2, 1\4 и 1\8. Переходы +- 2, 3, 5 полутонов + повторять и пытаться заполнить до 2 или 4-х тактов, проиграть пару раз.
На выходе получался абсолютный и немного управляемый рандом (если уж пошли в плюс — так, пару раз прибавить в тоне к примеру до такта или половины, а после обратно. В итоге после получаса такой вот генерациии можно было найти пару прикольно и довольно приятно звучащих моментов. Но с музыкальной точки зрения считаю что они не несли в себе ничего — что-то подобное у меня получалось когда я сам сидел и под метроном пытался импровизировать в ля-миноре по часу или полтора, находя «правильные» и красивые фразы.
А вообще считаю что врядли можно заменить полноценного композитора, уж слишком безграничная эта область. Если и получиться что-то подобное, то на выходе будем получать обыкновенный «корм», который и так есть в 90% в любом стиле. Пытаться найти новое звучание — тоже не вариант, оно каждый день находится сотней школьников, которые считают что за год игры на инструменте они всему научились и теперь могут творить.
не, гораздо проще, софтинка эта писалась еще на паскале, и писала в очень простой формат — высота и длительность, а после это все скарливалось какой-то сторонней звуковой библиотечке для того же паскаля.
Why MIDI? Есть же MOD (и не только он), который обеспечивает всё то же, и ещё больше, а качество музыки зависит только от качества сэмплов. Но вообще-то интересно, спасибо :)
все предельно просто: midi это всемирный стандарт записи и передачи нот в цифре. его поддерживает подавляющее большинство устройств (будь то realtek за 1$ с програмным синтезом в вашей материнке или синтезатор за 5k$, эмулирующий поведение аналогового) и софта (начиная от винампа, заканчивая всеми цифровыми DAW), он универсален. смысла переходить на что либо другое или использовать для некоторых целей другой формат нет, и вряд ли появится.
Примерно подобрал. В composition controls выставляем: generator
rule type: 62
height: 25 instrumentation
Grand Piano — Chords 1
Grand Piano — Chords 2
Synth Bass — Bass 1
Synth Bass — Bass 2
Electric Piano 2 — Polyphonic
перкуссия Metronome или Hip-Hop time controls
208 bpm
2 notes per beat
Еще можно надо поиграться с pitch mapping.
P.S.: пока игрался, чуть с ума не сошёл от этой какофонии)
У меня коллега на работе, в качестве кандидатской писал нечто подобное. Только у него строилась матрица вероятностей нот. У него нет аккаунта на Хабре, но он сейчас посмотрел Ваш код и проект и сказал, что плюсом у Вас является анализ в дереве предыдущих нот, тогда как у него — следующая нота строится лишь в зависимости от текущей, но, зато, у него учитывается вероятности ноты появления ноты в оригинальном произведении (не просто рандомом берётся). Если вдруг заинтересуетесь, могу скинуть его аську.
Спасибо огромное за то, что узнал про формат MusicXML. Уже давно ношу в голове несколько идей (правда о генерации гармонии, а не мелодии), но все мои попытки разобраться в формате MIDI не увенчались успехом (хотя сам формат хорош). А тут старый добрый XML. Супер!
в своё время мы пробовали применить его для музыки,
но с фиксированной глубиной дерева (длинной левой части), и midi файлы ковырять не умели, поэтому «обучали» генерилку, вводя партитуры руками,
соотвественно, в правилах были только ноты мелодии, и их было весьма немного.
а в результате получалась, вообще говоря, лажа,
но очень похожая на твою :)
было бы интересно совместить эти два метода,
например, используя вероятностный в качестве «рандомом или каким-то другим методом»
Среди друзей-диджеев ходит прибаутка о том, как Tiesto пишет свои шедевры. Он просто открывает любой аудио редактор и нажимает File → Create new track и сохраняет в MP3, так вот о каком способе шла речь :)
Генерация музыки на основе заданного стиля