2022-01-27 21:21:25 +08:00
|
|
|
|
"""音创系列的文件读取功能"""
|
|
|
|
|
|
|
|
|
|
# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日
|
|
|
|
|
# 统计:致命(三级)错误:0个;警告(二级)错误:3个;语法(一级)错误:22个
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from nmcsup.log import log
|
|
|
|
|
from nmcsup.const import notes
|
2022-01-31 13:53:38 +08:00
|
|
|
|
|
2022-01-27 21:21:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 从格式文本文件读入一个音轨并存入一个列表
|
|
|
|
|
def ReadFile(fn: str): # -> list
|
|
|
|
|
from nmcsup.trans import note2list
|
|
|
|
|
log('打开' + fn + "并读取音符")
|
|
|
|
|
try:
|
|
|
|
|
nat = open(fn, 'r', encoding='UTF-8').read().split(" ")
|
|
|
|
|
del fn
|
|
|
|
|
except FileNotFoundError:
|
|
|
|
|
log("找不到读取目标文件")
|
|
|
|
|
return False
|
|
|
|
|
Notes = []
|
|
|
|
|
log(str(nat) + "已读取")
|
|
|
|
|
for i in range(int(len(nat) / 2)):
|
|
|
|
|
Notes.append([nat[i * 2], float(nat[i * 2 + 1])])
|
|
|
|
|
Notes = note2list(Notes)
|
|
|
|
|
log('音符数据更新' + str(Notes))
|
|
|
|
|
return [Notes, ]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 从midi读入多个音轨,返回多个音轨列表
|
|
|
|
|
def ReadMidi(midfile: str): # -> list
|
|
|
|
|
import mido
|
|
|
|
|
from msctspt.threadOpera import NewThread
|
|
|
|
|
Notes = []
|
|
|
|
|
try:
|
|
|
|
|
mid = mido.MidiFile(midfile)
|
|
|
|
|
except FileNotFoundError:
|
|
|
|
|
log("找不到文件或无法读取文件" + midfile)
|
|
|
|
|
return False
|
|
|
|
|
# 解析
|
|
|
|
|
ks = list(notes.values())
|
|
|
|
|
|
|
|
|
|
def loadMidi(track1):
|
|
|
|
|
datas = []
|
|
|
|
|
for i in track1:
|
|
|
|
|
if i.is_meta:
|
|
|
|
|
log('元信息' + str(i))
|
|
|
|
|
pass # 不处理元信息
|
|
|
|
|
elif 'note_on' in str(i):
|
|
|
|
|
msg = str(i).replace("note=", '').replace("time=", '').split(" ")
|
|
|
|
|
log('音符on消息,处理后:' + str(msg))
|
|
|
|
|
if msg[4] == '0':
|
|
|
|
|
datas.append([ks[int(msg[2]) - 20][0], 1.0])
|
|
|
|
|
log('延续时间0tick--:添加音符' + str([ks[int(msg[2]) - 20][0], 1.0]))
|
|
|
|
|
else:
|
|
|
|
|
datas.append([ks[int(msg[2]) - 20][0], float(msg[4]) / 480])
|
|
|
|
|
log('延续时间' + msg[4] + 'tick--:添加音符' + str([ks[int(msg[2]) - 20][0], float(msg[4]) / 480]))
|
|
|
|
|
del msg
|
|
|
|
|
log('音符增加' + str(datas))
|
|
|
|
|
return datas
|
|
|
|
|
|
|
|
|
|
for j, track in enumerate(mid.tracks):
|
|
|
|
|
th = NewThread(loadMidi, (track,))
|
|
|
|
|
th.start()
|
|
|
|
|
Notes.append(th.getResult())
|
|
|
|
|
del ks
|
|
|
|
|
return Notes
|
|
|
|
|
|
|
|
|
|
|
2022-01-28 18:29:51 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-01-27 21:21:25 +08:00
|
|
|
|
def ReadOldProject(fn: str): # -> list
|
|
|
|
|
import json
|
|
|
|
|
from nmcsup.trans import note2list
|
|
|
|
|
log("读取文件:" + fn)
|
|
|
|
|
try:
|
|
|
|
|
with open(fn, 'r', encoding='UTF-8') as c:
|
|
|
|
|
dataset = json.load(c)
|
|
|
|
|
except FileNotFoundError:
|
|
|
|
|
print('找不到文件:' + fn + ",请查看您是否输入正确")
|
|
|
|
|
log("丢失" + fn)
|
|
|
|
|
return False
|
|
|
|
|
for i in range(len(dataset['musics'])):
|
|
|
|
|
dataset['musics'][i]['notes'] = note2list(dataset['musics'][i]['notes'])
|
|
|
|
|
# 返回 音轨列表 选择器
|
|
|
|
|
return dataset
|
|
|
|
|
|
|
|
|
|
|
2022-01-31 13:53:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-01-27 21:21:25 +08:00
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
# a = midi_conversion("L:\\0WorldMusicCreater-MFMS new edition\\框架\\v0.3.2\\Musicreater\\测试用\\同道殊途标准.mid")
|
|
|
|
|
# midi_conversion("L:\\0WorldMusicCreater-MFMS new edition\\框架\\v0.3.2\\Musicreater\\测试用\\"
|
|
|
|
|
# "Illusionary_Daytime_--------幻昼.mid")
|
|
|
|
|
# a = midi_conversion(r"C:\Users\lc\Documents\MuseScore3\乐谱\架子鼓.mid")
|
2022-01-31 13:53:38 +08:00
|
|
|
|
from bgArrayLib.reader import midi_conversion
|
2022-01-27 21:21:25 +08:00
|
|
|
|
a = midi_conversion(r"C:\Users\lc\Documents\MuseScore3\乐谱\stay2.mid")
|
|
|
|
|
# print(a)
|