0

我很难使用 Python 的 MIDI 库 MIDO 在 MIDI 文件中编写和弦。

我有一个包含 100 个和弦的列表,列表中存储了音符。所以下面代码中的每个和弦都是 [60, 63, 67] ,就像在 Cmin 中一样。每个以秒为单位的时间存储在 chordTimes 列表中。

我在列表中迭代,

for i in range(1, len(chords)): 
    chordNotes = chordMidiNotes(chords[i], extraBass= False)[0]
    chordSymbol = chordMidiNotes(chords[i], extraBass= False)[1]
    for note_value in chordNotes: # result has chord notes
        track.append(Message('note_on', note=note_value, velocity=100, time=0))
    for note_value in chordNotes: # result has chord notes
        track.append(Message('note_off', note=note_value, velocity=127, time=time_in_ticks(chordTimes[i], mo)))
mo.save("songWithChords.mid") 

但是当我打开文件时,和弦同时开始,但是,高音在最后一个和弦之前结束,下面的一个在此之前结束,后面的一个在它之前的几个节拍再次停止,....正如你在图片中看到的那样。我正在使用 1 型 midi 文件。

和弦不会同时结束

4

1 回答 1

1

MIDO 文档说:

所有消息都必须标有增量时间(以滴答为单位)。(增量时间是在下一条消息之前等待多长时间。)

因此,除第一个之外的所有音符消息的增量时间必须为零。

于 2020-04-19T10:56:08.417 回答