44 lines
1.5 KiB
Python
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) |