我一直在编写一个程序来分析midi并使用Mido。
处理 note_on 事件一直做得很好。但是,只有一个文件无法很好地处理。
发现
为什么在我的实际数据开始之前就找到幽灵note_on数据? (无效的midi文件与可以正常工作的文件类型相同:即0 =单轨。)
起作用的midi文件与不起作用的midi文件之间的唯一区别是,起作用的是我在钢琴卷上画了音符,而另一个midi文件是在和我的MIDI控制器。
这是两个midi文件。一种可以正确解析,另一种可以在开始时找到虚假note_on事件: https://drive.google.com/drive/folders/1CUgTJNH-jD5rPJEmT0aSwRp4PhaatxYq?usp=sharing
这是我得到的解析错误:
File "midipy.py", line 107, in convertthefile
Ians_notearray[Ians_numberofnotes]=Ians_notestring
IndexError: list assignment index out of range
这是无法使用的midi文件在我的DAW(收割机)中的样子。它会正确显示正确的注释,并在视觉上显示正确的注释。这两个midi文件的type = 0相同,都是单曲。
这是我的代码,它将打开文件并进行解析。
#import midi functionality
from mido import MidiFile
from mido import MetaMessage
...
Ians_midi = MidiFile(name_of_input_file)
...
for i, track in enumerate(Ians_midi.tracks):
for msg in track:
if msg.type == 'note_on':
if msg.note >= Ians_rootnote:
Ians_notevalue = msg.note - Ians_rootnote
Ians_notevalue = Ians_notevalue / 12
Ians_notestring=Ians_notestring[:6]
Ians_notearray[Ians_numberofnotes]=Ians_notestring
最后一行是有时给我错误的那一行。