Mido MIDI库很好地解析了midi文件-除了该实例开始读取“幽灵笔记”的所有实例外,为什么..?

时间:2019-06-15 19:47:04

标签: python midi mido

我一直在编写一个程序来分析midi并使用Mido。

处理 note_on 事件一直做得很好。但是,只有一个文件无法很好地处理。

发现之前大约有五个音符开始了(我叫幽灵音符-见下文),甚至由于“列表分配索引超出范围”而崩溃了一次或两次。我尝试读取其中的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相同,都是单曲。
https://i.imgur.com/L4dAxyw.jpg

这是我的代码,它将打开文件并进行解析。

#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

最后一行是有时给我错误的那一行。

0 个答案:

没有答案