AGU/prepare_dataset.py
2020-05-26 22:10:33 +02:00

44 lines
1.5 KiB
Python

from glob import glob
from argparse import ArgumentParser
from os import system, path
import csv
parser = ArgumentParser(description="Prepare dataset from midi files for later use in onsets and frames.")
parser.add_argument('--dry', '-d', dest='dry', action='store_true', help="Dry run, print commands instead of executing them")
parser.add_argument('--no-convert', '-m', dest='no_convert', action='store_true', help="Only create manifest.")
parser.add_argument('--soundfont', '-f', default='/usr/share/sounds/sf2/FluidR3_GM.sf2', help="Path to soundfont.")
parser.add_argument('-n', type=int, help="Max midi files to process")
args = parser.parse_args()
execute = print if args.dry else system
processed = 0
if not args.no_convert:
for midi in glob("dataset/midi/*.mid"):
wav = midi.replace('.mid', '.wav').replace('/midi/', '/wav/')
processed = processed + 1
if args.n is not None and processed > args.n:
break
if path.isfile(wav):
continue
print(f"Converting {midi} to {wav}")
execute(f"fluidsynth -nli -r 48000 -T wav -F {wav} {args.soundfont} {midi} > /dev/null")
manifest = []
for wav in glob("dataset/wav/*.wav"):
midi = wav.replace('.wav', '.mid').replace('/wav/', '/midi/')
if path.isfile(midi):
manifest.append((path.basename(wav), path.basename(midi), 'test'))
with open('dataset/manifest.csv', 'w') as manifest_file:
writer = csv.writer(manifest_file)
writer.writerow(('audio_filename', 'midi_filename', 'split'))
writer.writerows(manifest)