System Exclusive messages are special MIDI messages of variable size. They are used for device-specific communication. In particular, lots of physical devices that are known as MIDI controllers can usually be configured by sending specially crafted SYSEX MIDI messages.
SYSEX messages are of variable size. They are formed of a prefix byte F0
and a suffix byte F7
. All bytes between these two markers can only be coded on 7 bits, i.e. bytes values should always be <= 127.
F0 .. .. .. .. F7
Usually a device aware of SYSEX messages respond to a generic SYSEX ID request.
The Identity Request message is formed of the following bytes:
Byte | Description |
---|---|
F0 | SysEx |
7E | Non-Realtime |
7F | The SysEx channel. Could be from 0x00 to 0x7F. Here we set it to "disregard channel". |
06 | Sub-ID -- General Information |
01 | Sub-ID2 -- Identity Request |
F7 | End of SysEx |
See https://www.midi.org/specifications-old/item/manufacturer-id-numbers for a list of manufacturer IDs
(F0
and F7
prefix/suffix bytes are omitted in the following)
Byte | Description |
---|---|
7E | Non-Realtime |
00 | |
06 | Sub-ID -- General Information |
02 | Sub-ID2 -- Identity Reply |
00 20 6B | Arturia manufacturer ID |
02 00 04 02 aa bb cc dd | Minilab mk ii Model ID |
aa bb cc dd = 53 09 00 01 => firmware version 1.0.9.83 | |
aa bb cc dd = 0e 02 01 01 => firmware version 1.1.2.1166 |
Specific SYSEX commands are always prefixed by the following byte sequence:
00 20 6B 7F 42
The byte following this sequence is the command to execute.
This command asks the device to output part of its internal state.
The general form of a read value command is (prefix ommited):
Value | Description |
---|---|
01 | Read value |
00 | |
pp | Parameter pp |
bb | Button ID bb |
The "button" ID bb refers to which knob or pad a parameter is to be retrieved.
This command updates the internal state by changing a parameter value of a knob or pad.
The general form of a write value command is (prefix ommited):
Value | Description |
---|---|
02 | Write value |
00 | |
pp | Parameter pp |
bb | Button ID bb |
vv | Value vv |
Knobs 2 to 8 and 10 to 16 are regular knobs, or rotary encoders. Their main purpose is to send a CC midi message when they are rotated.
bb = "Button" ID | Designation |
---|---|
01 | Knob 2 |
02 | Knob 3 |
03 | Knob 4 |
04 | Knob 5 |
05 | Knob 6 |
06 | Knob 7 |
07 | Knob 8 |
08 | Knob 10 |
09 | Knob 11 |
0A | Knob 12 |
0B | Knob 13 |
0C | Knob 14 |
0D | Knob 15 |
0E | Knob 16 |
30 | Knob 1 |
32 | Knob 1 + shift |
33 | Knob 9 |
35 | Knob 9 + shift |
Available parameters for regular knobs:
pp = Parameter | Description | Possible values | RW |
---|---|---|---|
00 | Current CC value | 0 - 127 | RW |
01 | Mode | 00 = OFF | RW |
01 = Control (default) | |||
04 = NRPN | |||
02 | Channel | MIDI channel | RW |
03 | CC number / NRPN data entry | If mode = Control | RW |
0-127: CC number | |||
If mode = NRPN | |||
00 = 1:128 | |||
01 = 1:64 | |||
02 = 1:32 | |||
03 = 1:16 | |||
04 = 1:8 | |||
05 = 1:4 | |||
06 = 1:2 | |||
07 = 1:1 | |||
04 | If mode = NRPN, LSB | 0-127 | RW |
05 | If mode = NRPN, MSB | 0-127 | RW |
06 | Option | If mode = Control | RW |
00 = Absolute | |||
01 = Relative 1 | |||
02 = Relative 2 | |||
03 = Relative 3 |
bb = "Button" ID | Designation |
---|---|
10 | Oct - |
11 | Oct + |
2E | Shift |
2F | Button "Pad 1-8/9-16" |
Buttons send their state when they are pressed / released.
Available parameters for buttons:
pp = Parameter | Description | Possible values | RW |
---|---|---|---|
00 | Current state | 00 = released | R |
7F = pressed |
The Shift button is a simple button with two states: released or pressed.
"Oct -" and "Oct +" buttons allow us to change the current octave of the piano keyboard. Open question: is there a way to get the current selected octave ? to set it ?
The last button allows to switch between pads 1-8 and pads 9-16. Open question: is there a way to get the current pads selection ? to set it ?
bb = "Button" ID | Designation |
---|---|
41 | Pitch bend |
pp = Parameter | Description | Possible values | RW |
---|---|---|---|
00 | Current state | 0-127 | RW |
01 | Mode | 00 = OFF | RW |
10 = Picth bend | |||
06 | Option | 00 - Default | RW |
01 - Hold | |||
??
bb = "Button" ID | Designation |
---|---|
31 | Knob 1 button |
34 | Knob 9 button |
bb = "Button" ID | Designation |
---|---|
70 | Pad 1 |
71 | Pad 2 |
72 | Pad 3 |
73 | Pad 4 |
74 | Pad 5 |
75 | Pad 6 |
76 | Pad 7 |
77 | Pad 8 |
78 | Pad 9 |
79 | Pad 10 |
7A | Pad 11 |
7B | Pad 12 |
7C | Pad 13 |
7D | Pad 14 |
7E | Pad 15 |
7F | Pad 16 |
pp = Parameter | Description | Possible values | RW |
---|---|---|---|
00 | Current state | 0-127 | RW |
01 | Mode | 00 = OFF | RW |
07 = MMC | |||
08 = Switched | |||
09 = MIDI note | |||
0B = Patch change | |||
02 | Channel | 0X = Channel X | RW |
0x41 = Channel "Keyboard" (?) | |||
03 | CC / Note | If mode in [08,09] => note | RW |
Else => CC | |||
04 | Off value | 0-127 | RW |
05 | On value | 0-127 | RW |
06 | Option | 00 = Toggle | RW |
01 = Gate | |||
If mode = MMC | |||
01 = Stop | |||
02 = Play | |||
03 = Deferred play | |||
04 = Fast forward | |||
05 = Rewind | |||
06 = Record Strobe | |||
07 = Record Exit | |||
08 = Record Ready | |||
09 = Pause | |||
0A = Eject | |||
0B = Chase | |||
0C = InList Reset | |||
10 | Set color | 00 = Black / None | W |
01 = Red | |||
04 = Green | |||
05 = Yellow | |||
10 = Blue | |||
11 = Purple | |||
14 = Cyan | |||
7F = White | |||
10 | Set toggle color | 00 = Black / None | W |
01 = Red | |||
04 = Green | |||
05 = Yellow | |||
10 = Blue | |||
11 = Purple | |||
14 = Cyan | |||
7F = White |
FIXME: also modulation ? (slider)
bb = ID | Designation |
---|---|
40 | Special ID for global settings |
pp = Parameter | Description | Possible values | RW |
---|---|---|---|
02 | Modulation channel | ? | RW |
06 | Keyboard channel | ? | RW |
19 | Key velocity curve | 00 = Linear | RW |
01 = Logarithmic | |||
02 = Exponential | |||
03 = Full (?) | |||
1A | Pad velocity curve | 00 = Linear | RW |
01 = Logarithmic | |||
02 = Exponential | |||
03 = Full (?) | |||
1B | Knob acceleration | 00 = Slow | RW |
01 = Medium | |||
02 = Fast | |||
1D (new in 1.1.2) | Octave button blink | 00 = OFF | RW |
7F = ON | |||
1E (new in 1.1.2) | Pad off backlight | 00 = OFF | RW |
7F = ON |