如何解析MIDI文件中的音高、时值、bpm等信息并格式化?

新手上路,请多包涵

题目描述

解析midi文件并格式化为音高和时值,多按音符同时按下不分割,空格分割抬起动作,如 G6A6B6,100ms G6,100ms G6,200ms

相关代码

import sys
import 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全部提取出来,然后逐一进入循环判断音高并写入新的变量但还是遇到很多错误,涉及到休止符,多按键连按,多轨道同步

阅读 2.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题