Проект для генерации музыки в формате MIDI с использованием марковских цепей на основе анализа существующих MIDI-файлов.
Этот скрипт анализирует коллекцию MIDI-файлов, строит марковские модели для каждого канала и генерирует новые музыкальные последовательности с соблюдением структуры исходных данных.
· Автоматический анализ MIDI-файлов: извлекает нотные последовательности из каждого канала
· Марковские цепи: строит вероятностные модели переходов между нотами для каждого канала
· Контролируемая генерация: параметры для управления полифонией, количеством каналов и длительностью
· Чистый вывод: генерирует структурированные MIDI-файлы с правильными таймингами
· Python 3.6+
· Библиотека mido: pip install mido
- Клонируйте репозиторий:
git clone https://github.com/Erech14/stream_music_generator
cd stream_music_generator- Установите зависимости:
pip install mido- Поместите исходные MIDI-файлы в папку midi/
- Запустите скрипт:
python genv1.0.py- Сгенерированный MIDI-файл будет сохранен в audio/generated_clean.mid
В начале скрипта можно настроить следующие параметры:
INPUT_DIR = 'midi' # Папка с исходными MIDI-файлами
OUTPUT_DIR = 'audio' # Папка для сохранения результатов
OUTPUT_FILE = 'generated_clean.mid' # Имя выходного файла
MAX_GLOBAL_POLY = 5 # Максимальное количество одновременных нот
MAX_CHANNELS = 5 # Максимальное количество используемых каналов
GRID = 240 # Длительность шага в тиках (при 480 TPB = 1/8 ноты)
BARS = 32 # Длина генерируемой секции в тактах
ONSET_PROB = 0.55 # Вероятность начала ноты на шаге- Загрузка и анализ: Скрипт загружает все MIDI-файлы из указанной папки и извлекает нотные последовательности для каждого канала.
- Построение моделей: Для каждого канала строится марковская модель, где состояние - текущая нота, а переходы - вероятности следующей ноты.
- Генерация: Используя построенные модели, скрипт генерирует новую последовательность нот, чередуя каналы и контролируя полифонию.
- Сохранение: Результат сохраняется как новый MIDI-файл с сохранением программ (инструментов) для каждого канала.
# Поместите MIDI-файлы в папку midi/
ls midi/
# song1.mid, song2.mid, song3.mid
# Запустите генерацию
python3 genv1.0.py
# Проверьте результат
ls audio/
# generated_clean.mid· Скрипт работает только с каналами, содержащими нотные события
· Не учитывает изменения темпа в пределах одного файла
· Генерация основана на статистике переходов между нотами, без учета гармонии
GPL-3.0
Pull requests приветствуются. Для крупных изменений, пожалуйста, сначала откройте issue для обсуждения предлагаемых изменений.
v1.0