| ORI_FOLDER = ""
|
| DES_FOLDER = ""
|
|
|
| import os
|
| import math
|
| import random
|
| import subprocess
|
| from tqdm import tqdm
|
| from multiprocessing import Pool
|
|
|
|
|
| def convert_xml2abc(file_list):
|
| cmd = 'python xml2abc.py -d 8 -c 6 -x '
|
| for file in tqdm(file_list):
|
| filename = os.path.basename(file)
|
| os.makedirs(DES_FOLDER, exist_ok=True)
|
|
|
| try:
|
| p = subprocess.Popen(cmd + '"' + file + '"', stdout=subprocess.PIPE, shell=True)
|
| result = p.communicate()
|
| output = result[0].decode('utf-8')
|
|
|
| if output == '':
|
| with open("logs/xml2abc_error_log.txt", "a", encoding="utf-8") as f:
|
| f.write(file + '\n')
|
| continue
|
| else:
|
| with open(os.path.join(DES_FOLDER, filename.rsplit('.', 1)[0] + '.abc'), 'w', encoding='utf-8') as f:
|
| f.write(output)
|
| except Exception as e:
|
| with open("logs/xml2abc_error_log.txt", "a", encoding="utf-8") as f:
|
| f.write(file + ' ' + str(e) + '\n')
|
|
|
|
|
| if __name__ == '__main__':
|
| file_list = []
|
| os.makedirs("logs", exist_ok=True)
|
|
|
|
|
| for root, dirs, files in os.walk(os.path.abspath(ORI_FOLDER)):
|
| for file in files:
|
| if file.endswith((".mxl", ".xml", ".musicxml")):
|
| filename = os.path.join(root, file).replace("\\", "/")
|
| file_list.append(filename)
|
|
|
|
|
| random.shuffle(file_list)
|
| num_files = len(file_list)
|
| num_processes = os.cpu_count()
|
| file_lists = [file_list[i::num_processes] for i in range(num_processes)]
|
|
|
|
|
| with Pool(processes=num_processes) as pool:
|
| pool.map(convert_xml2abc, file_lists) |