Skip to content

Erech14/stream_music_generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

STREAM MUSIC GENERATOR

Проект для генерации музыки в формате MIDI с использованием марковских цепей на основе анализа существующих MIDI-файлов.

Описание

Этот скрипт анализирует коллекцию MIDI-файлов, строит марковские модели для каждого канала и генерирует новые музыкальные последовательности с соблюдением структуры исходных данных.

Особенности

· Автоматический анализ MIDI-файлов: извлекает нотные последовательности из каждого канала

· Марковские цепи: строит вероятностные модели переходов между нотами для каждого канала

· Контролируемая генерация: параметры для управления полифонией, количеством каналов и длительностью

· Чистый вывод: генерирует структурированные MIDI-файлы с правильными таймингами

Требования

· Python 3.6+

· Библиотека mido: pip install mido

Установка

  1. Клонируйте репозиторий:
git clone https://github.com/Erech14/stream_music_generator
cd stream_music_generator
  1. Установите зависимости:
pip install mido

Использование

  1. Поместите исходные MIDI-файлы в папку midi/
  2. Запустите скрипт:
python genv1.0.py
  1. Сгенерированный 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         # Вероятность начала ноты на шаге

Принцип работы

  1. Загрузка и анализ: Скрипт загружает все MIDI-файлы из указанной папки и извлекает нотные последовательности для каждого канала.
  2. Построение моделей: Для каждого канала строится марковская модель, где состояние - текущая нота, а переходы - вероятности следующей ноты.
  3. Генерация: Используя построенные модели, скрипт генерирует новую последовательность нот, чередуя каналы и контролируя полифонию.
  4. Сохранение: Результат сохраняется как новый MIDI-файл с сохранением программ (инструментов) для каждого канала.

Пример

# Поместите MIDI-файлы в папку midi/
ls midi/
# song1.mid, song2.mid, song3.mid

# Запустите генерацию
python3 genv1.0.py

# Проверьте результат
ls audio/
# generated_clean.mid

Ограничения

· Скрипт работает только с каналами, содержащими нотные события

· Не учитывает изменения темпа в пределах одного файла

· Генерация основана на статистике переходов между нотами, без учета гармонии

Лицензия

GPL-3.0

Автор

Erech14 TG

Вклад в проект

Pull requests приветствуются. Для крупных изменений, пожалуйста, сначала откройте issue для обсуждения предлагаемых изменений.

Последняя версия

v1.0

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages