Skip to content

wingedsheep/music-generation-toolbox

Repository files navigation

music-generation-tools

Toolbox for generating music

usage

See the examples folder for more examples.

Training your model and generating music:

from mgt.datamanagers.remi_data_manager import RemiDataManager
from mgt.models.transformer_model import TransformerModel

import os
import glob

# Collect midi paths
midi_path = 'YOUR MIDI PATH'
midi_path = os.path.join(os.path.dirname(__file__), midi_path)
midis = glob.glob(midi_path + '*.mid')

# Create datamanager and prepare the data
datamanager = RemiDataManager()
dataset = datamanager.prepare_data(midis)

# Create and train the model
model = TransformerModel(dataset.dictionary)
model.train(x_train=dataset.data, epochs=50, stop_loss=0.1)

# Generate music
output = model.generate(1000)

# Restore MIDI file from output and save it
midi = datamanager.to_midi(output)
midi.save("result.midi")

samples

thanks to

Great transformers implementations from lucidrains

Pop music transformer and REMI format

Compound word transformer

Pop909 dataset

Lakh midi dataset

Issues

There are still some issues with the reformer model implementation. It often does not learn how to generate the beginning of the songs well. This is still a work in progress.