MIDI 消息定义

通常,MIDI 协议被分解为消息。一般有 4 类消息:

  • 频道语音
  • 频道模式
  • 系统常见
  • 系统实时消息

消息以高于 0x80 的字节值开头。低于 0x7F 的任何值都被视为数据。实际上意味着 127 是可以编码为单个 MIDI 数据字节的最大值。要编码较大的值,需要两个或更多 MIDI 数据字节。

需要指出的是,必须在不中断的情况下始终发送消息… EXCEPT …系统实时消息,它是一个单字节,可以在任何消息的中间注入。

频道语音留言

状态 D7..D0 数据字节 描述
1000nnnn 0kkkkkkk 0vvvvvvv 注意关闭事件。当释放(结束)注释时发送此消息。 (kkkkkkk)是关键(注释)号码。 (vvvvvvv)是速度。
1001nnnn 0kkkkkkk 0vvvvvvv 注意事件。按下音符(开始)时会发送此信息。 (kkkkkkk)是关键(注释)号码。 (vvvvvvv)是速度。
1010nnnn 0kkkkkkk 0vvvvvvv 和弦键压力(触后)。此消息通常是在降至最低点后按下键发送的。 (kkkkkkk)是关键(注释)号码。 (vvvvvvv)是压力值。
1011nnnn 0ccccccc 0vvvvvvv 控制变化。当控制器值更改时,将发送此消息。控制器包括诸如踏板和杠杆的装置。控制器号 120-127 保留为通道模式消息(下面)。 (ccccccc)是控制器编号(0-119)。 (vvvvvvv)是控制器值(0-127)。
1100nnnn 0ppppppp 计划变更。当修补程序编号更改时发送此消息。 (ppppppp)是新的程序编号。
1101nnnn 0vvvvvvv 通道压力(触摸后)。此消息通常是在降至最低点后按下键发送的。此消息与复音后触摸不同。使用此消息发送单个最大压力值(所有当前按下的键)。 (vvvvvvv)是压力值。
1110nnnn 0lllllll 0mmmmmmm 弯曲变化。发送此消息表示弯音机(通常为车轮或控制杆)发生变化。通过十四位值测量弯音器。中心(没有音高变化)是 2000H。灵敏度是接收器的函数,但可以使用 RPN 0 设置。(lllllll)是最不重要的 7 位。 (mmmmmmm)是最重要的 7 位。

频道模式消息

状态 D7..D0 数据字节 描述
1011nnnn 0ccccccc 0vvvvvvv 频道模式消息。这与 Control Change(上面)相同,但通过使用保留的控制器号 120-127 实现模式控制和特殊消息。命令是:
所有声音关闭。当收到所有声音关闭时,所有振荡器将关闭,并且它们的音量包络将尽快设置为零。c = 120,v = 0:全部声音关闭
重置所有控制器。收到重置所有控制器后,所有控制器值都将重置为其默认值。 (有关默认值,请参阅具体的建议措施)。
c = 121,v = x:除非在特定的推荐实践中另有规定,否则值必须为零。
本地控制。当本地控制关闭时,给定通道上的所有设备将仅响应通过 MIDI 接收的数据。播放的数据等将被忽略。Local Control On 恢复普通控制器的功能。
c = 122,v = 0:本地控制关闭
c = 122,v = 127:本地控制开启
所有笔记关闭。收到 All Notes Off 后,所有振荡器都将关闭。
c = 123,v = 0:所有音符关闭(有关实际模式命令的说明,请参阅文本。)
c = 124,v = 0:Omni Mode Off
c = 125,v = 0:Omni Mode On
c = 126,v = M:单声道模式开(Poly Off),其中 M 是通道数(Omni Off)或 0(Omni On)
c = 127,v = 0:Poly 模式开启(单声道关闭)(注意:这四条信息也会导致所有音符关闭)

系统常见消息

状态 D7..D0 数据字节 描述
11110000 0iiiiiii [0iiiiiii 0iiiiiii] 0ddddddd — — 0ddddddd 11110111 系统独家。此消息类型允许制造商创建自己的消息(例如批量转储,补丁参数和其他非规范数据),并提供用于创建其他 MIDI 规范消息的机制。制造商的 ID 代码(由 MMA 或 AMEI 分配)为 1 字节(0iiiiiii)或 3 字节(0iiiiiii 0iiiiiii 0iiiiiii)。1 个字节 ID 中的两个保留用于称为通用专用消息的扩展,这些扩展不是特定于制造商的。如果设备将 ID 代码识别为自己的(或支持的通用消息),它将侦听消息的其余部分(0ddddddd)。否则,将忽略该消息。 (注意:只有实时消息可以与 System Exclusive 交错。)
11110001 0nnndddd MIDI 时间码四分之一帧。nnn =消息类型 dddd =值
11110010 0lllllll 0mmmmmmm 歌曲位置指针。这是一个内部 14 位寄存器,可以保存自歌曲开始以来的 MIDI 节拍数(1 拍= 6 个 MIDI 时钟)。l 是 LSB,MSB。
11110011 0sssssss 歌曲选择。歌曲选择指定要播放的序列或歌曲。
11110100 未定义。 (保留)
11110101 未定义。 (保留)
11110110 调整请求。收到调谐请求后,所有模拟合成器都应调谐其振荡器。
11110111 独家结束。用于终止 System Exclusive 转储(参见上文)。

系统实时消息

状态 D7..D0 数据字节 描述
11111000 时钟。需要同步时,每季度发送 24 次注释(参见文本)。
11111001 未定义。 (保留)
11111010 开始。开始播放当前序列。 (此消息将跟随定时时钟)。
11111011 继续。在序列停止的位置继续。
11111100 停止。停止当前序列。
11111101 未定义。 (保留)
11111110 主动感应。此消息旨在重复发送,以告知接收方连接是否存在。使用此消息是可选的。当最初接收时,接收器将期望每 300ms(最大)接收另一个 Active Sensing 消息,如果没有,则它将假定连接已经终止。在终止时,接收器将关闭所有声音并返回正常(非活动感测)操作。
11111111 重启。将系统中的所有接收器重置为开机状态。这应该谨慎使用,最好在人工控制下使用。特别是,它不应该在上电时发送。