# -*- coding: utf-8 -*- # 伶伦 开发交流群 861684859 """ 音·创 (Musicreater) 演示程序 是一款免费开源的针对《我的世界》的midi音乐转换库 Musicreater (音·创) A free open source library used for convert midi file into formats that is suitable for **Minecraft**. 版权所有 © 2023 音·创 开发者 Copyright © 2023 all the developers of Musicreater 开源相关声明请见 ./License.md Terms & Conditions: ./License.md """ import os import Musicreater # 获取midi列表 midi_path = input(f"请输入MIDI路径:") # 获取输出地址 out_path = input(f"请输入输出路径:") conversion = Musicreater.midiConvert() def isMethodOK(sth: str): if int(sth) in range(1, len(conversion.methods) + 1): return int(sth) else: raise ValueError convert_method = int(input(f"请输入转换算法[1~{len(conversion.methods)}]:")) # 选择输出格式 fileFormat = int(input(f"请输入输出格式[BDX(1) 或 MCPACK(0)]:").lower()) playerFormat = int(input(f"请选择播放方式[计分板(1) 或 延迟(0)]:").lower()) # 真假字符串判断 def bool_str(sth: str) -> bool: try: return bool(float(sth)) except ValueError: if str(sth).lower() == "true": return True elif str(sth).lower() == "false": return False else: raise ValueError("布尔字符串啊?") debug = False if os.path.exists("./demo_config.json"): import json prompts = json.load(open("./demo_config.json", "r", encoding="utf-8")) if prompts[-1] == "debug": debug = True prompts = prompts[:-1] else: prompts = [] # 提示语 检测函数 错误提示语 for args in [ ( f"输入音量:", float, ), ( f"输入播放速度:", float, ), ( f"是否启用进度条:", bool_str, ), ( f"计分板名称:", str, ) if playerFormat == 1 else ( f"玩家选择器:", str, ), ( f"是否自动重置计分板:", bool_str, ) if playerFormat == 1 else (), ( f"作者名称:", str, ) if fileFormat == 1 else (), ( f"最大结构高度:", int, ) if fileFormat == 1 else (), ]: if args: prompts.append(args[1](input(args[0]))) conversion = Musicreater.midiConvert(debug=debug, enable_old_exe_format=False) print(f"正在处理 {midi_path} :") conversion.convert(midi_path, out_path) if debug: with open("./records.json", "a", encoding="utf-8") as f: json.dump(conversion.toDICT(), f) f.write(5 * "\n") conversion_result = ( ( conversion.to_mcpack(convert_method, *prompts) if playerFormat == 1 else conversion.to_mcpack_with_delay(convert_method, *prompts) ) if fileFormat == 0 else ( conversion.to_BDX_file(convert_method, *prompts) if playerFormat == 1 else conversion.to_BDX_file_with_delay(convert_method, *prompts) ) ) if conversion_result[0]: print( f" 指令总长:{conversion_result[1]},最高延迟:{conversion_result[2]}{f''',结构大小{conversion_result[3]},最末坐标{conversion_result[4]}''' if fileFormat == 1 else ''}" ) else: print(f"失败:{conversion_result}") exitSth = input("回车退出").lower() if exitSth == "record": import json with open("./demo_config.json", "w", encoding="utf-8") as f: json.dump(prompts, f) elif exitSth == "delrec": os.remove("./demo_config.json")