Decoded synth settings
Original by Elby (Mountain Man),
modified by Blue Hell to map better onto the MidiSpy
output, some extensions as well.
2002-12-25
Here's a sample sysex stream (34 bytes, but I skipped the introductory f0 33
and the trailing f7 (Jan)), with byte numbering beneath it:
7C |
06 |
41 |
01 |
60 |
1F |
76 |
0C |
0C |
01 |
40 |
26 |
5B |
6C |
47 |
2B |
31 |
42 |
72 |
00 |
01 |
63 |
30 |
40 |
6C |
12 |
1B |
05 |
06 |
60 |
51 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
Coding:
The bytes are shown as 8 bits, with 0 indicating that this bit must
always be zero, A indicating a position is assigned to that field,
x indicating the position is filled by another (known) field, and
? indicating the use of that bit has not
yet been determined.
The synrh name is encoded in this packet as 8 bit ASCII basically, but bit
shifted (a bit). Byte 11 has the 1st character's 7 bits - byte 12 bit 6 has bit
0 of the 1st character etc.
After unstuffing the last byte of the name string is a zero (00). Unless the
name has 16 characters, in that case the trailing \0 is stripped off. So at a
certain point in time Elby's NM was named : "Modular" wasn't that the
default ?
The bytes following the name, midi channel assignment info, is also bit
shifted ..
byte |
meanig |
-2 |
sysex start |
-1 |
manufacturer ID |
0 |
Opcode for this command group |
1 |
product id |
2 |
sub-code for this command |
3 |
probably record type 01 = NM-key |
4 Internal/external clock flag (0 = external, 1 = internal)
Byte 4:
pattern |
meaning |
00 |
external clock |
20 |
internal clock |
4,5 Min MIDI velocity scale (values 0 - 127) Byte
4,5:
pattern |
meaning |
00 00 |
0 |
00 20 |
1 |
00 40 |
2 |
00 60 |
3 |
01 00 |
4 |
... |
... |
0F 60 |
63 |
10 00 |
64 |
... |
... |
1F 60 |
127 |
5 LEDs active flag (0=inactive, 1=active)
Byte 5:
pattern |
meaning |
00 |
inactive |
10 |
active |
5,6 Max MIDI velocity scale (0-127) Byte 5,6:
pattern |
meaning |
00 00 |
0 |
00 10 |
1 |
00 20 |
2 |
00 30 |
3 |
00 40 |
4 |
00 50 |
5 |
00 60 |
6 |
00 70 |
7 |
01 00 |
8 |
... |
... |
0F 70 |
127 |
6,7 Tempo (0-255, interface only transmits 31-239) Byte
6,7:
pattern |
meaning |
01 78 |
31 |
02 00 |
32 |
02 08 |
33 |
02 10 |
34 |
... |
... |
02 70 |
46 |
02 78 |
47 |
03 00 |
48 |
... |
... |
0E 78 |
239 |
7 Local off (0=off, 1=on) Byte 7:
pattern |
meaning |
00 |
local off |
04 |
local on |
7 Keyboard mode (0=active, 1=inactive) Byte 7:
pattern |
meaning |
00 |
active slots |
02 |
selected slot |
7 Pedal polarity (0=normal, 1=inverted) Byte 7:
pattern |
meaning |
00 |
normal |
01 |
inverted |
8 Global sync (1-32, offset of 1 -> 00=1 )
Byte 8:
pattern |
meaning |
00 |
1 |
04 |
2 |
08 |
3 |
0c |
4 |
... |
... |
7c |
32 |
8,9 Master Tune (0 - 127, -128 - -1, in that order, interface only transmits
-100 - +100) Byte 8,9:
pattern |
meaning |
02 38 |
-100 |
... |
... |
03 7a |
-3 |
03 7c |
-2 |
03 7e |
-1 |
00 00 |
0 |
00 02 |
1 |
00 04 |
2 |
00 06 |
3 |
00 08 |
4 |
00 0a |
5 |
... |
... |
01 48 |
100 |
9 Program change, Receive (0=off, 1=on) Byte 9:
pattern |
meaning |
00 |
rx off |
01 |
rx on |
10 Knob mode (0=immediate, 1=hooked) Byte 10:
pattern |
meaning |
00 |
immediate |
20 |
hook |
10 Program change, Send (0=off, 1=on) Byte 10:
pattern |
meaning |
00 |
tx off |
04 |
tx on |
Two examples for the following bytes :
name set to ""
[ 7C 06 41 01 60 1F 78 26 7C 01 60
byte |
in bits |
septet->octet |
decoded byte |
meaning |
00 |
|000 0000 |
0000 0000 |
00 |
end of name |
00 |
0|00 0000 |
0000 0000 |
00 |
ch 1 (16 would be disable) |
03 |
00|0 0011 |
0001 1011 |
1b |
?? |
30 |
011| 0000 |
0000 0001 |
01 |
ch 2 |
08 |
000 1|000 |
0001 1011 |
1b |
?? |
6C |
110 11|00 |
0000 0010 |
02 |
ch 3 |
04 |
000 010|0 |
0001 1011 |
1b |
?? |
1B |
001 1011| |
|
|
|
01 |
|000 0001 |
0000 0011 |
03 |
ch 4 |
46 |
1|00 0110 |
0001 1011 |
1b |
?? |
60 |
11|0 0000 |
|
|
5 bits left over |
4E - checksum ]
name set to "0000000000000000" (16 zero's)
[ 7C 06 41 01 60 1F 78 26 7C 01 60
byte |
in bits |
septet->octet |
decoded byte |
meaning |
18 |
|001 1000 |
0011 0000 |
30 |
'0' 1 |
0C |
0|00 1100 |
0011 0000 |
30 |
'0' 2 |
06 |
00|0 0110 |
0011 0000 |
30 |
'0' 3 |
03 |
000| 0011 |
0011 0000 |
30 |
'0' 4 |
01 |
000 0|001 |
0011 0000 |
30 |
'0' 5 |
40 |
100 00|00 |
0011 0000 |
30 |
'0' 6 |
60 |
110 000|0 |
0011 0000 |
30 |
'0' 7 |
30 |
011 0000| |
|
|
|
18 |
|001 1000 |
0011 0000 |
30 |
'0' 8 |
0C |
0|00 1100 |
0011 0000 |
30 |
'0' 9 |
06 |
00|0 0110 |
0011 0000 |
30 |
'0' 10 |
03 |
000| 0011 |
0011 0000 |
30 |
'0' 11 |
01 |
000 0|001 |
0011 0000 |
30 |
'0' 12 |
40 |
100 00|00 |
0011 0000 |
30 |
'0' 13 |
60 |
110 000|0 |
0011 0000 |
30 |
'0' 14 |
30 |
011 0000| |
|
|
|
18 |
|001 1000 |
0011 0000 |
30 |
'0' 15 |
0C |
0|00 1100 |
0011 0000 |
30 |
'0' 16 16th, so end of name !! |
00 |
00|0 0000 |
0000 0000 |
00 |
ch 1 (16 would be disable) |
01 |
000| 0001 |
0001 1011 |
1b |
?? |
58 |
101 1|000 |
0000 0001 |
01 |
ch 2 |
04 |
000 01|00 |
0001 1011 |
1b |
?? |
36 |
011 011|0 |
0000 0010 |
02 |
ch 3 |
02 |
000 0010| |
|
|
|
0D |
|000 1101 |
0001 1011 |
1b |
?? |
40 |
1|00 0000 |
0000 0011 |
03 |
ch 4 |
63 |
11|0 0011 |
0001 1011 |
1b |
?? |
30 |
011| 0000 |
|
|
4 bits left over |
76 - checksum ]
fin.