Synthesia 可以很好地播放 midi 文件,没有任何音符关闭事件?

问题描述 投票:0回答:1

我有一个

.mid
文件 - this 一个。除了标头块之外,这里还有 MIDI 的相关部分。第一个轨道块仅包含元事件,并被描述为

4D 54 72 6B 00 00 00 52 // Track chunk #1 info

00 FF 58 04 04 02 18 08 // Meta event

00 FF 59 02 00 00 // Meta event

00 FF 51 03 15 CC 5B // Meta event

81 88 70 FF 51 03 16 E3 60 // Meta event

81 70 FF 51 03 1A 28 6E // Meta event

81 70 FF 51 03 1C 9C 38 // Meta event

81 70 FF 51 03 1E 84 80 // Meta event

81 70 FF 51 03 20 B2 89 // Meta event

81 70 FF 51 03 23 36 6C // Meta event

81 70 FF 51 03 2B 98 B7 // Meta event

00 FF 2F 00 // Meta event. End of track #1

这是第二个轨道块,仅包含注意事件:

4D 54 72 6B 00 00 04 02 // Track chunk #2 info

00 FF 21 01 00 // Meta event

00 FF 03 1F 53 69 6E 66 6F 6E 69 
61 20 66 72 6F 6D 20 4B 61 6E 74 61 74 61 20 23 
31 30 36 20 2D 4A 53 20 // Meta event

00 C0 4A // Midi event

00 B0 07 7C // Midi event

00 B0 0A 52 // Midi event

00 B0 5B 4B // Midi event

96 40 90 4B 50 // Midi "Note on" event

81 63 4B 00 // Midi "Note on" event because of running status 

... // No note offs event in this track chunk.

FF 2F 00 // Meta event. End of track #2

这是曲目#3:

4D 54 72 6B 00 00 03 27 // Track chunk #3 info

... // Some meta and non-note-on, non-note-off midi events

96 40 91 4B 50 // "Note on" event

81 63 4B 00 // Another "Note on" event

... // No note offs

FF 2F 00 // End of track #3

轨道块#4、#5和#6与#3具有相同的结构; #7 仅包含两个元事件。

请注意,每个不只包含元事件的轨道块都以两个 Note on 事件开头,并且其中没有一个包含单个 Note off 事件。

但这就是synthesia(MIDI 播放器)在加载文件时看到的,就在歌曲的开头:

此 midi 的结构将是同一轨道块中的 Note on 事件,后跟 Note off 事件,但这不会发生。

这里发生了什么事?

midi file-format
1个回答
12
投票
96 40
      90 4B 50 // Midi "Note on" event
81 63
         4B 00 // Midi "Note on" event because of running status
            ^^

MIDI 规范 说:

MIDI 提供了两种大致相同的关闭音符(声音)的方法。可以通过为相同的音符编号和通道发送音符关闭消息,或者通过为该音符和通道发送速度值为零的音符打开消息来关闭音符。使用“零速度注释”的优点是,它可以避免在使用“运行状态”时发送额外的状态字节。

由于这种效率,发送速度值为零的 Note-On 消息是最常用的方法。

© www.soinside.com 2019 - 2024. All rights reserved.