MIDI信息在比特/字节方面的解剖结构是什么?
答案 0 :(得分:4)
YES!我在这里为自己做了一个。它可能对其他人有用!
https://drive.google.com/file/d/0B3RK-KfkucDQT0J0aGFOb3pWeU0/view
每个midi消息长3个字节:1个状态字节后跟2个数据字节。 每个字节的第一位用于标识它是状态字节还是数据字节。 所有状态字节均以1开头,所有数据字节均以0
开头1??? ???? 0??? ???? 0??? ????
因此,在十六进制中,状态字节为80及以上,数据字节为7F及以下。
对于状态80 ... EF,状态消息中的第二个十六进制数字是通道编号。 16个MIDI通道映射到0到F.
示例:80 ... 8F是16个MIDI通道中每个通道的所有音符关闭命令。
第一个十六进制数字指定它的消息类型。状态以8到E开头 (7个可能的值)是特定于通道的消息。第一个十六进制是消息的类型和 第二个十六进制是通道。 F0 ... FF映射到各种全局和sysex消息。
8_ note off 9_ note on A_ poly aftertouch B_ control/mode change C_ program change D_ channel aftertouch E_ pitch bend
FO System Exclusive F8 Timing clock F1 MIDI Time Code Qtr. Fram F9 Undefined (Reserved) F2 Song Position Pointer FA Start F3 Song Select (Song #) FB Continue F4 Undefined (Reserved) FC Stop F5 Undefined (Reserved) FD Undefined (Reserved) F6 Tune request FE Active Sensing F7 end of SysEx (EOX) FF System Reset
由于数据字节浪费了第一位,使其为0,因此我们有128个可能的值 这是7位:
00 … 7F which is 0 … 127 in decimal
前三种类型的消息是复音的。第二个字节(第一个数据字节)指定音符。 由于第一位被浪费,我们有7位,它给我们128个值和128个不同的音符。
____Status Byte_____|_Data Byte 1__ |_Data Byte 2__ 8_ note off | note (0-127) |Velocity (0-127) 9_ note on | note (0-127) |Velocity (0-127) A_ poly aftertouch | note (0-127) |Pressure (0-127)
____Status Byte_____|_Data Byte 1__ |_Data Byte 2__ B_ CC message | CC# (0-127) | CC Value (0-127)
最常定义(因此最常用)控制变更(CC编号)
0 Bank Select (MSB) (followed by cc32 & Program Change) 1 Modulation Wheel 4 Foot Pedal (MSB) 6 Data Entry (MSB if you follow cc100=0 & cc101=0 this is pitch bend range 7 Volume (MSB) Note: CC7 and 11 both adjust the volume. Use cc7 as you would the control on the amplifier - set it and leave it at the beginning of the MIDI track 10 Pan position(MSB) 11 Expression (MSB) Note: CC7 and 11 both adjust the volume. Use cc11 for volume changes during the track (crescendo, diminuendo, 32 Bank Select (LSB) (see cc0) 64 Hold Pedal (on/off) Nearly every synth will react to 64 (sustain pedal) 65 Portamento (on/off) 71 Resonance (aka Timbre) 74 Frequency Cutoff (aka Brightness ) 91 Reverb Level 93 Chorus Level It's probably best not to use the group below for assigning controllers. 96 Data Button increment 97 Data Button decrement 98 Non-registered Parameter (LSB) 99 Non-registered Parameter (MSB) 100 Registered Parameter (LSB) 101 Registered Parameter (MSB) Do not use these no matter what unless you want to invoke these functions 120 All Sound Off 121 All Controllers Off 122 Local Keyboard (on/off) You might actually crash your keyboard. 123 All Notes Off
这些消息都不使用最后一个字节,即第二个数据字节。因此他们只是 将自己标识为程序更改消息(C_)或触后(D_),后跟_中的通道编号。
____Status Byte_____|_Data Byte 1__ |_Data Byte 2__ C_ Program Change |Program(0-127) | none D_ Aftertouch |Pressure(0-127)| none
弯音是不寻常的,因为它使用两个数据字节来获得更精细的分辨率。第一位是 当然仍然浪费但我们留下14位工作,这可能是16,384 如果一个弯音轮跨越两个八度音程,一个向上,一个向下, 每半步我们将有682个可能的值,即每分7个。还不错!
____Status Byte_____|_Data Byte 1__ |_Data Byte 2__ E_ Pitch Bend | LSB (0-127) | MSB (0-127)
以下是通道1中的中间C的完整消息,速度为60:
90 3C 3C
以下是该注释的注释消息:
80 3C 3C