Spaces:
Build error
Build error
"""preprocess_musicnet.py""" | |
import os | |
import glob | |
import csv | |
import json | |
from typing import Dict, List, Tuple | |
import numpy as np | |
from utils.audio import get_audio_file_info | |
from utils.midi import midi2note | |
from utils.note2event import note2note_event | |
from utils.note_event_dataclasses import Note | |
# yapf: disable | |
MUSICNET_SPLIT_INFO = { | |
'train_mt3': [], # the first 300 songs are synth dataset, while the remaining 300 songs are acoustic dataset. | |
'train_mt3_synth' : [], # Note: this is not the synthetic dataset of EM (MIDI Pop 80K) nor pitch-augmented. Just recording of MusicNet MIDI, split by MT3 author's split. But not sure if they used this (maybe not). | |
'train_mt3_acoustic': [], | |
'validation_mt3': [1733, 1765, 1790, 1818, 2160, 2198, 2289, 2300, 2308, 2315, 2336, 2466, 2477, 2504, 2611], | |
'validation_mt3_synth': [1733, 1765, 1790, 1818, 2160, 2198, 2289, 2300, 2308, 2315, 2336, 2466, 2477, 2504, 2611], | |
'validation_mt3_acoustic': [1733, 1765, 1790, 1818, 2160, 2198, 2289, 2300, 2308, 2315, 2336, 2466, 2477, 2504, 2611], | |
'test_mt3_acoustic': [1729, 1776, 1813, 1893, 2118, 2186, 2296, 2431, 2432, 2487, 2497, 2501, 2507, 2537, 2621], | |
'train_thickstun': [], # the first 320 songs are synth dataset, while the remaining 320 songs are acoustic dataset. | |
'test_thickstun': [1819, 2303, 2382], | |
'test_thickstun_em': [1819, 2303, 2382], | |
'test_thickstun_ext': [1759, 1819, 2106, 2191, 2298, 2303, 2382, 2416, 2556, 2628], | |
'test_thickstun_ext_em': [1759, 1819, 2106, 2191, 2298, 2303, 2382, 2416, 2556, 2628], | |
'train_mt3_em': [], # 300 synth + 293 tracks for MT3 acoustic train set - 7 EM tracks are missing: [2194, 2211, 2227, 2230, 2292, 2305, 2310]. | |
'train_thickstun_em': [], # 320 synth + 313 tracks for Thickstun acoustic train set - 7 EM tracks are missing. | |
'validation_mt3_em': [1733, 1765, 1790, 1818, 2160, 2198, 2289, 2300, 2308, 2315, 2336, 2466, 2477, 2504, 2611], # ours | |
'test_mt3_em': [1729, 1776, 1813, 1893, 2118, 2186, 2296, 2431, 2432, 2487, 2497, 2501, 2507, 2537, 2621], # ours | |
'test_em_table2' : [2191, 2628, 2106, 2298, 1819, 2416], # strings and winds from Cheuk's split, using EM annotations | |
'test_cheuk_table2' : [2191, 2628, 2106, 2298, 1819, 2416], # strings and winds from Cheuk's split, using Thickstun's annotations | |
'test_thickstun_ext_em': [1759, 1819, 2106, 2191, 2298, 2303, 2382, 2416, 2556, 2628], | |
} | |
# Table 4 of EM is not included here. | |
# yapf: enable | |
MUSICNET_DISCARD_INFO = ['test_labels_midi/1759.mid', | |
'test_labels_midi/1819.mid'] # duplicated midi files | |
MUSICNET_EM_MISSING_IDS = set(['2194', '2211', '2227', '2230', '2292', '2305', '2310']) | |
MUSICNET_FS = 44100 | |
def create_note_event_and_note_from_label(label_file: str, id: str): | |
"""Extracts note or note_event and metadata from a label file. | |
Returns: | |
notes (dict): note events and metadata. | |
note_events (dict): note events and metadata. | |
""" | |
program_numbers = set() | |
notes = [] | |
with open(label_file, 'r', newline='', encoding='utf-8') as c: | |
csv_reader = csv.reader(c) | |
for i, row in enumerate(csv_reader): | |
if i == 0: | |
continue | |
start_frame, end_frame, program, pitch, _, _, _ = row | |
new_note = Note( | |
is_drum=False, | |
program=int(program), | |
onset=float(start_frame) / MUSICNET_FS, | |
offset=float(end_frame) / MUSICNET_FS, | |
pitch=int(pitch), | |
velocity=1) | |
notes.append(new_note) | |
program_numbers.add(int(program)) | |
program_numbers = list(program_numbers) | |
return { # notes | |
'musicnet_id': id, | |
'program': program_numbers, | |
'is_drum': [0]*len(program_numbers), | |
'duration_sec': notes[0].offset, | |
'notes': notes, | |
}, { # note_events | |
'musicnet_id': id, | |
'program': program_numbers, | |
'is_drum': [0]*len(program_numbers), | |
'duration_sec': notes[0].offset, | |
'note_events': note2note_event(notes), | |
} | |
def create_note_event_and_note_from_midi(mid_file: str, id: str) -> Tuple[Dict, Dict]: | |
"""Extracts note or note_event and metadata from midi: | |
Returns: | |
notes (dict): note events and metadata. | |
note_events (dict): note events and metadata. | |
""" | |
notes, dur_sec = midi2note( | |
mid_file, | |
binary_velocity=True, | |
ch_9_as_drum=False, | |
force_all_drum=False, | |
force_all_program_to=None, | |
trim_overlap=True, | |
fix_offset=True, | |
quantize=True, | |
verbose=0, | |
minimum_offset_sec=0.01, | |
drum_offset_sec=0.01) | |
return { # notes | |
'musicnet_id': id, | |
'program': [], | |
'is_drum': [], | |
'duration_sec': dur_sec, | |
'notes': notes, | |
}, { # note_events | |
'musicnet_id': id, | |
'program': [], | |
'is_drum': [], | |
'duration_sec': dur_sec, | |
'note_events': note2note_event(notes), | |
} | |
def preprocess_musicnet16k(data_home=os.PathLike, dataset_name='musicnet') -> None: | |
""" | |
Writes: | |
- {dataset_name}_{split}_file_list.json: a dictionary with the following keys: | |
{ | |
index: | |
{ | |
'musicnet_id': musicnet_id, | |
'n_frames': (int), | |
'mix_audio_file': 'path/to/mix.wav', | |
'notes_file': 'path/to/notes.npy', | |
'note_events_file': 'path/to/note_events.npy', | |
'midi_file': 'path/to/midi.mid', | |
'program': List[int], | |
'is_drum': List[int], # 0 or 1 | |
} | |
} | |
""" | |
# Directory and file paths | |
base_dir = os.path.join(data_home, dataset_name + '_yourmt3_16k') | |
output_index_dir = os.path.join(data_home, 'yourmt3_indexes') | |
os.makedirs(output_index_dir, exist_ok=True) | |
# Search for files with .mid and .wav (synth / acoustic) extensions | |
label_pattern = os.path.join(base_dir, '*_labels', '*.csv') | |
mid_em_pattern = os.path.join(base_dir, '*_em', | |
'*.mid') # EM annotations for real performances (wav) | |
mid_pattern = os.path.join(base_dir, '*_midi', '*.mid') | |
wav_synth_pattern = os.path.join(base_dir, '*_synth', '*.wav') | |
wav_acoustic_pattern = os.path.join(base_dir, '*_data', '*.wav') | |
label_files = glob.glob(label_pattern, recursive=True) | |
mid_em_files = glob.glob(mid_em_pattern, recursive=True) # 323 files, not 330! | |
mid_files = glob.glob(mid_pattern, recursive=True) | |
wav_synth_files = glob.glob(wav_synth_pattern, recursive=True) | |
wav_acoustic_files = glob.glob(wav_acoustic_pattern, recursive=True) | |
# Discard duplicated files | |
for file in MUSICNET_DISCARD_INFO: | |
mid_files.remove(os.path.join(base_dir, file)) | |
assert (len(mid_files) == len(label_files) == len(wav_synth_files) == len(wav_acoustic_files) == | |
330) | |
# Sort files by id | |
musicnet_ids = [] | |
for label_file in label_files: | |
musicnet_ids.append(os.path.basename(label_file).split('.')[0]) | |
musicnet_ids.sort() | |
assert (len(musicnet_ids) == 330) | |
musicnet_em_ids = [] | |
for mid_em_file in mid_em_files: | |
musicnet_em_ids.append(os.path.basename(mid_em_file).split('.')[0]) | |
assert (len(musicnet_em_ids) == 323) | |
def search_file_by_musicnet_id(musicnet_id, files): | |
file_found = [f for f in files if musicnet_id in f | |
] # this only works in 4-digits file names of MusicNet | |
assert (len(file_found) == 1) | |
return file_found[0] | |
# yapf: disable | |
musicnet_dict = {} | |
for i in musicnet_ids: | |
musicnet_dict[i] = { | |
'wav_acoustic_file': search_file_by_musicnet_id(i, wav_acoustic_files), | |
'wav_synth_file': search_file_by_musicnet_id(i, wav_synth_files), | |
'mid_file': search_file_by_musicnet_id(i, mid_files), | |
'mid_em_file': search_file_by_musicnet_id(i, mid_em_files) if i in musicnet_em_ids else None, | |
'label_file': search_file_by_musicnet_id(i, label_files), | |
'program': [], | |
'is_drum': [], | |
'duration_sec': 0., | |
'notes_file_acoustic': '', | |
'note_events_file_acoustic': '', | |
'notes_file_synth': '', | |
'note_events_file_synth': '', | |
'notes_file_em': '', | |
'note_events_file_em': '', | |
} | |
# yapf: enable | |
# Process label files | |
for i in musicnet_ids: | |
notes, note_events = create_note_event_and_note_from_label( | |
label_file=musicnet_dict[i]['label_file'], id=i) | |
notes_file = os.path.join(musicnet_dict[i]['label_file'][:-4] + '_notes.npy') | |
np.save(notes_file, notes, allow_pickle=True, fix_imports=False) | |
print(f'Created {notes_file}') | |
note_events_file = os.path.join(musicnet_dict[i]['label_file'][:-4] + '_note_events.npy') | |
np.save(note_events_file, note_events, allow_pickle=True, fix_imports=False) | |
print(f'Created {note_events_file}') | |
# update musicnet_dict | |
musicnet_dict[i]['program'] = notes['program'] | |
musicnet_dict[i]['is_drum'] = notes['is_drum'] | |
musicnet_dict[i]['duration_sec'] = notes['duration_sec'] | |
musicnet_dict[i]['notes_file_acoustic'] = notes_file | |
musicnet_dict[i]['note_events_file_acoustic'] = note_events_file | |
# Process MIDI files | |
for i in musicnet_ids: | |
# musicnet | |
notes, note_events = create_note_event_and_note_from_midi( | |
mid_file=musicnet_dict[i]['mid_file'], id=i) | |
notes['program'] = musicnet_dict[i]['program'].copy() | |
notes['is_drum'] = musicnet_dict[i]['is_drum'].copy() | |
notes_file = os.path.join(musicnet_dict[i]['mid_file'][:-4] + '_notes.npy') | |
np.save(notes_file, notes, allow_pickle=True, fix_imports=False) | |
print(f'Created {notes_file}') | |
note_events['program'] = musicnet_dict[i]['program'].copy() | |
note_events['is_drum'] = musicnet_dict[i]['is_drum'].copy() | |
note_events_file = os.path.join(musicnet_dict[i]['mid_file'][:-4] + '_note_events.npy') | |
np.save(note_events_file, note_events, allow_pickle=True, fix_imports=False) | |
print(f'Created {note_events_file}') | |
# update musicnet_dict | |
musicnet_dict[i]['duration_sec'] = max(notes['duration_sec'], | |
musicnet_dict[i]['duration_sec']) | |
musicnet_dict[i]['notes_file_synth'] = notes_file | |
musicnet_dict[i]['note_events_file_synth'] = note_events_file | |
# musicnet_em | |
if i in musicnet_em_ids: | |
notes, note_events = create_note_event_and_note_from_midi( | |
mid_file=musicnet_dict[i]['mid_em_file'], id=i) | |
notes['program'] = musicnet_dict[i]['program'].copy() | |
notes['is_drum'] = musicnet_dict[i]['is_drum'].copy() | |
notes_file = os.path.join(musicnet_dict[i]['mid_em_file'][:-4] + '_notes.npy') | |
np.save(notes_file, notes, allow_pickle=True, fix_imports=False) | |
print(f'Created {notes_file}') | |
note_events['program'] = musicnet_dict[i]['program'].copy() | |
note_events['is_drum'] = musicnet_dict[i]['is_drum'].copy() | |
note_events_file = os.path.join(musicnet_dict[i]['mid_em_file'][:-4] + | |
'_note_events.npy') | |
np.save(note_events_file, note_events, allow_pickle=True, fix_imports=False) | |
print(f'Created {note_events_file}') | |
# update musicnet_dict: use the longest duration | |
musicnet_dict[i]['duration_sec'] = max(notes['duration_sec'], | |
musicnet_dict[i]['duration_sec']) | |
musicnet_dict[i]['notes_file_em'] = notes_file | |
musicnet_dict[i]['note_events_file_em'] = note_events_file | |
# Process audio files | |
pass | |
# Complete split dictionary | |
split_dict = MUSICNET_SPLIT_INFO.copy() | |
# Convert each list in the dictionary to a list of strings | |
for key in split_dict: | |
split_dict[key] = [str(item) for item in split_dict[key]] | |
# Convert each list to a sorted tuple of strings to preserve the original order | |
for key in split_dict: | |
split_dict[key] = tuple(sorted(split_dict[key])) | |
# Create sets and subtract sets to create new sets | |
whole_set = set(musicnet_ids) | |
split_dict['train_mt3'] = whole_set - set(split_dict['validation_mt3']) - set( | |
split_dict['test_mt3_acoustic']) | |
split_dict['train_mt3_synth'] = split_dict['train_mt3'] | |
split_dict['train_mt3_acoustic'] = split_dict['train_mt3'] | |
split_dict['train_thickstun'] = whole_set - set(split_dict['test_thickstun_ext']) | |
split_dict['train_thickstun_synth'] = split_dict['train_thickstun'] | |
split_dict['train_mt3_em'] = whole_set - set(split_dict['validation_mt3']) - set( | |
split_dict['test_mt3_acoustic']) - MUSICNET_EM_MISSING_IDS | |
split_dict['train_thickstun_em'] = whole_set - set( | |
split_dict['test_thickstun_ext']) - MUSICNET_EM_MISSING_IDS | |
# Convert each tuple back to a list of strings | |
for key in split_dict: | |
split_dict[key] = [str(item) for item in split_dict[key]] | |
# Write MT3 file_list | |
for split in ('train_mt3_synth', 'validation_mt3_synth'): | |
file_list = {} | |
for i, musicnet_id in enumerate(split_dict[split]): | |
file_list[i] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_synth_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_synth_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_synth'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_synth'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
assert (len(file_list) == len(split_dict[split])) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
for split in ('train_mt3_acoustic', 'validation_mt3_acoustic', 'test_mt3_acoustic'): | |
file_list = {} | |
for i, musicnet_id in enumerate(split_dict[split]): | |
file_list[i] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_acoustic_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_acoustic_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_acoustic'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_acoustic'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
assert (len(file_list) == len(split_dict[split])) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
split = 'train_mt3' | |
merged_file_list = {} | |
index = 0 | |
file_list_train_mt3_synth = json.load( | |
open(os.path.join(output_index_dir, 'musicnet_train_mt3_synth_file_list.json'))) | |
file_list_train_mt3_acoustic = json.load( | |
open(os.path.join(output_index_dir, 'musicnet_train_mt3_acoustic_file_list.json'))) | |
for d in [file_list_train_mt3_synth, file_list_train_mt3_acoustic]: | |
for key, value in d.items(): | |
new_key = f'{index}' | |
merged_file_list[new_key] = value | |
index += 1 | |
assert (len(merged_file_list) == 600) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(merged_file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
# Write ThickStun file_list | |
split = 'train_thickstun' | |
file_list = {} | |
for i, musicnet_id in enumerate(split_dict[split]): | |
file_list[i] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_synth_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_synth_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_synth'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_synth'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
file_list[i + 327] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_acoustic_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_acoustic_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_acoustic'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_acoustic'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
assert (len(file_list) == len(split_dict[split]) * 2) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
for split in ('test_thickstun', 'test_thickstun_ext'): | |
file_list = {} | |
for i, musicnet_id in enumerate(split_dict[split]): | |
file_list[i] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_acoustic_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_acoustic_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_acoustic'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_acoustic'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
assert (len(file_list) == len(split_dict[split])) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
# Write EM file_list | |
for split in ('train_thickstun_em', 'train_mt3_em'): | |
file_list = {} | |
for i, musicnet_id in enumerate(split_dict[split]): | |
file_list[i] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_acoustic_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_acoustic_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_em'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_em'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_em_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
synth_ids = split_dict['train_mt3'] if split == 'train_mt3_em' else split_dict[ | |
'train_thickstun'] | |
for i, musicnet_id in enumerate(synth_ids): | |
file_list[i + len(split_dict[split])] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_synth_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_synth_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_synth'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_synth'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
if split == 'train_thickstun_em': | |
assert (len(file_list) == 320 + 313) | |
if split == 'train_mt3_em': | |
assert (len(file_list) == 300 + 293) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
for split in ('validation_mt3_em', 'test_mt3_em', 'test_em_table2', 'test_thickstun_em', | |
'test_thickstun_ext_em'): | |
file_list = {} | |
for i, musicnet_id in enumerate(split_dict[split]): | |
file_list[i] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_acoustic_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_acoustic_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_em'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_em'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_em_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
assert (len(file_list) == len(split_dict[split])) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
# Write Cheuk file_list | |
for split in ['test_cheuk_table2']: | |
file_list = {} | |
for i, musicnet_id in enumerate(split_dict[split]): | |
file_list[i] = { | |
'musicnet_id': musicnet_id, | |
'n_frames': get_audio_file_info(musicnet_dict[musicnet_id]['wav_acoustic_file'])[1], | |
'mix_audio_file': musicnet_dict[musicnet_id]['wav_acoustic_file'], | |
'notes_file': musicnet_dict[musicnet_id]['notes_file_acoustic'], | |
'note_events_file': musicnet_dict[musicnet_id]['note_events_file_acoustic'], | |
'midi_file': musicnet_dict[musicnet_id]['mid_file'], | |
'program': musicnet_dict[musicnet_id]['program'], | |
'is_drum': musicnet_dict[musicnet_id]['is_drum'], | |
} | |
assert (len(file_list) == len(split_dict[split])) | |
output_index_file = os.path.join(output_index_dir, f'musicnet_{split}_file_list.json') | |
with open(output_index_file, 'w') as f: | |
json.dump(file_list, f, indent=4) | |
print(f'Created {output_index_file}') | |
if __name__ == '__main__': | |
from config.config import shared_cfg | |
data_home = shared_cfg['PATH']['data_home'] | |
preprocess_musicnet16k(data_home=data_home, dataset_name='musicnet') |