问题描述
midi_obj = miditoolkit.MidiFile(midi_path)一直抛出BaseException异常,midi_path也没有任何问题
解决
查看源码可知miditoolkit这个工具其实调用了mido包,找到parse.py中加载乐器这个地方:
# load instruments
self.instruments = self._load_instruments(mido_obj)
顺藤摸瓜找到_load_instruments这个函数,然后会发现:
for track_idx, track in enumerate(midi_data.tracks):
# Keep track of last note on location:
# key = (instrument, note),
# value = (note-on tick, velocity)
last_note_on = collections.defaultdict(list)
# Keep track of which instrument is playing in each channel
# initialize to program 0 for all channels
current_instrument = np.zeros(16, dtype=np.int)
ped_list = []
没错,current_instrument = np.zeros(16, dtype=np.int)
这句居然用了已经被弃用的np.int。。把它换成int,问题就解决了。。
(为浪费掉的一个上午流泪Q_Q)