MIDI 文件中的 MIDI 音符长度
Midi note length in midi file
对 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"s 就有意义了。看看 pitch=60 音符是如何从中途开始的。但是 "Note Off"s 与它们的 "Note On"s 在相同的 "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
谢谢,
明曼
MIDI 文件使用增量时间,即节拍值相对于轨道中的前一个事件。
如@CL 所述,MIDI 节拍与前一个事件相关。有一个很好的 Whosebug 答案解释了 tick/absolute time conversion in a bit more depth。
如果多个事件同时发生,则第一个事件之后的每个事件的刻度值都将为 0。第一个事件的值可能大于 0,除非它发生在排列的开始.
对 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"s 就有意义了。看看 pitch=60 音符是如何从中途开始的。但是 "Note Off"s 与它们的 "Note On"s 在相同的 "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
谢谢, 明曼
MIDI 文件使用增量时间,即节拍值相对于轨道中的前一个事件。
如@CL 所述,MIDI 节拍与前一个事件相关。有一个很好的 Whosebug 答案解释了 tick/absolute time conversion in a bit more depth。
如果多个事件同时发生,则第一个事件之后的每个事件的刻度值都将为 0。第一个事件的值可能大于 0,除非它发生在排列的开始.