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:
0?Ax xxxx

pattern meaning
00 external clock
20 internal clock
4,5 Min MIDI velocity scale (values 0 - 127)
Byte 4,5:
0?xA AAAA 0AAx xxxx

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: 
0xxA xxxx

pattern meaning
00 inactive
10 active

5,6 Max MIDI velocity scale (0-127)
Byte 5,6:
0xxx AAAA 0AAA xxxx

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:
0xxx AAAA 0AAA Axxx

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:
0xxx xAxx

pattern meaning
00 local off
04 local on

7 Keyboard mode (0=active, 1=inactive)
Byte 7:
0xxx xxAx

pattern meaning
00 active slots
02 selected slot

7 Pedal polarity (0=normal, 1=inverted)
Byte 7:
0xxx xxxA

pattern meaning
00 normal
01 inverted


8 Global sync (1-32,  offset of 1 -> 00=1 )

Byte 8:
0AAA AAxx

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:
0xxx xxAA 0AAA AAAx

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:
0xxx xxxA

pattern meaning
00 rx off
01 rx on

10 Knob mode (0=immediate, 1=hooked)
Byte 10:
0??? ?xA?

pattern meaning
00 immediate
20 hook

10 Program change, Send (0=off, 1=on)
Byte 10:
0???  ?Ax?

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.