在MIDI音乐中,关于音符长度有一些误解。我在Ableton Live中制作了一个简单的2全音符MIDI文件(整个文件只有1小节),然后将其导出并使用Python脚本(mididump.py)进行分析。
midi.Pattern(format=0, resolution=96, tracks=\
[midi.Track(\
[midi.TrackNameEvent(tick=0, text='examplemidi\x00', data=[101, 120, 97, 109, 112, 108, 101, 109, 105, 100, 105, 0]),
midi.TimeSignatureEvent(tick=0, data=[4, 2, 36, 8]),
midi.TimeSignatureEvent(tick=0, data=[4, 2, 36, 8]),
midi.NoteOnEvent(tick=0, channel=0, data=[65, 127]),
midi.NoteOnEvent(tick=192, channel=0, data=[60, 100]),
midi.NoteOffEvent(tick=0, channel=0, data=[65, 64]),
midi.NoteOffEvent(tick=192, channel=0, data=[60, 64]),
midi.EndOfTrackEvent(tick=0, data=[])])])
数据参数为[pitch,volume],已确认正确。我不理解的是“tick”。如果midi文件长度为284,则“Note On”会有意义。因为pitch = 60的音符从中间开始。但是,“Note Off”与它们的“Note On”在同一个“tick”上,而且曲目结束事件也在tick 0上。我认为我对midi定时工作方式的基本理解存在误解,但我无法看出如何从这些数据中推导出有关定时的信息。请帮忙解答。以下是该midi的十六进制代码,供感兴趣的人参考:
4d54 6864 0000 0006 0000 0001 0060 4d54
726b 0000 0039 00ff 0301 0000 ff58 0404
0224 0800 ff58 0404 0224 0800 9040 6460
903c 6400 8040 4060 803c 4000 9040 6460
8040 4000 9043 6460 8043 4000 ff2f 00
请和谢谢你,Mingman