如何解析MIDI文件中的音高、时值、bpm等信息并格式化?
题目描述
解析midi文件并格式化为音高和时值,多按音符同时按下不分割,空格分割抬起动作,如 G6A6B6,100ms G6,100ms G6,200ms
相关代码
import sysimport json
import mido
def midifile_to_dict(mid):
tracks = []
for track in mid.tracks:
tracks.append([vars(msg).copy() for msg in track])
return {
'ticks_per_beat': mid.ticks_per_beat,
'tracks': tracks,
}
mid = mido.MidiFile('midi_file.mid')
dict = midifile_to_dict(mid)
tempo = dict['tracks'][1][0]['tempo']
if (bpm == 0):
bpm = mido.tempo2bpm(tempo)
else:
tempo = mido.bpm2tempo(bpm)
print(json.dumps(
{
'code': 200, 'data': dict, 'bpm': int(bpm)
},
indent=2))
遇到的困难
逻辑转不过来了,我将所有的note_on和note_off全部提取出来,然后逐一进入循环判断音高并写入新的变量但还是遇到很多错误,涉及到休止符,多按键连按,多轨道同步
以上是 如何解析MIDI文件中的音高、时值、bpm等信息并格式化? 的全部内容, 来源链接: utcz.com/a/158254.html