-
StackOverflow 文档
-
arduino 教程
-
MIDI 通讯
-
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 |
|
重启。将系统中的所有接收器重置为开机状态。这应该谨慎使用,最好在人工控制下使用。特别是,它不应该在上电时发送。 |