We recommend using Conda. You can create the environment with the following command.
conda env create -f environment.yml
Please download the Symbolic orchestral database (SOD). You may also download in command line directly by wget https://qsdfo.github.io/LOP/database/SOD.zip
.
We also support the following two datasets:
- Lakh MIDI Dataset (LMD)
- Download in command line directly via
wget http://hog.ee.columbia.edu/craffel/lmd/lmd_full.tar.gz
- SymphonyNet Dataset
- Download in command line directly via
gdown https://drive.google.com/u/0/uc?id=1j9Pvtzaq8k_QIPs8e2ikvCR-BusPluTb&export=download
Get a list of filenames for each dataset.
find data/sod/SOD -type f -name *.mid -o -name *.xml | cut -c 14- > data/sod/original-names.txt
Note: Change the number in the cut command for different datasets.
Convert the MIDI and MusicXML files into MusPy files for processing.
python convert_sod.py
Note: You may enable multiprocessing via the
-j {JOBS}
option. For example,python convert_sod.py -j 10
will run the script with 10 jobs.
Extract a list of notes from the MusPy JSON files.
python extract.py -d sod
Split the processed data into training, validation and test sets.
python split.py -d sod
Train a Multitrack Music Transformer model.
-
Absolute positional embedding (APE):
python mtmt/train.py -d sod -o exp/sod/ape -g 0
-
Relative positional embedding (RPE):
python mtmt/train.py -d sod -o exp/sod/rpe --no-abs_pos_emb --rel_pos_emb -g 0
-
No positional embedding (NPE):
python mtmt/train.py -d sod -o exp/sod/npe --no-abs_pos_emb --no-rel_pos_emb -g 0
Please run
python mtmt/train.py -h
to see additional options.
Evaluate the trained model.
python mtmt/evaluate.py -d sod -o exp/sod/ape -ns 100 -g 0
Please run
python mtmt/evaluate.py -h
to see additional options.
Generate new samples using a trained model.
python mtmt/generate.py -d sod -o exp/sod/ape -g 0
Please run
python mtmt/generate.py -h
to see additional options.