Oh my MPD

dexter

2010-07-06 01:10:52

Hi guys,
I'm a happy MPD24 owner since 2007. My controller lives a lot, sees many party and experiments ...
My great friend MidiOX watches the input ... now I'll move the K1 knob - CH3 #10 controller ...

Code: Select all

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 0000422C   5  --     B2    0A    01    3  ---  CC: PAN               
 00004262   5  --     B2    0A    02    3  ---  CC: PAN               
 00004341   5  --     B2    0A    03    3  ---  CC: PAN               
 000043B1   5  --     B2    0A    04    3  ---  CC: PAN               
 00004411   5  --     B2    0A    05    3  ---  CC: PAN               
 000044A2   5  --     B2    0A    06    3  ---  CC: PAN               
 0000454F   5  --     B2    0A    07    3  ---  CC: PAN               
 000045FC   5  --     B2    0A    08    3  ---  CC: PAN               
Noting strange. Realy. Now, let's press down the so widely discussed MMC, then CC << button :

Code: Select all

         
 00039A98   5  --     B0    73    7F    1  ---  Control Change        
Great! My cables are well connected!
If you ares still here, you already asking : WTF?

Next, let's use our MidiOX and dump the magic sysex code below : (on the MPD, not your MidiYoke)

Code: Select all

F0 47 00 68 30 00 04 01 00 27 38 F7
Now, let's move the same knob, K1, starting from 0 and going upwards:

Code: Select all

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 00095F87   5  --     B1    0A    01    2  ---  CC: PAN               
 00095F88   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 68 F7
 000961D0   5  --     B1    0A    02    2  ---  CC: PAN               
 000961D0   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 69 F7
 000962B0   5  --     B1    0A    03    2  ---  CC: PAN               
 000962B0   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 6A F7
 000964B8   5  --     B1    0A    04    2  ---  CC: PAN               
 000964B9   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 6B F7
 000965A1   5  --     B1    0A    05    2  ---  CC: PAN               
 000965A1   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 6C F7
 00096821   5  --     B1    0A    06    2  ---  CC: PAN               
 00096822   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 6D F7
What is going here? The still sends it's actual position, the B1 oo 05, and a SYSEX code SYSX: F0 47 00 68 41 00 02 oo pp F7, where oo is the controller code 1-7 for the knobs, 8 - 0D for the faders and pp is the controller value, from 0 to 7F. All the sysex data dumped is common for ALL presets.

Now, let's press the << button :

Code: Select all

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 000DA0AD   5  --     B0    73    7F    1  ---  Control Change        
 000DA0AD   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 40 00 02 0A 01 F7
 000DA55B   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 40 00 02 0A 00 F7


The B0 Control Change value, which depends from the preset is here, but we have the press up and down position also as SYSEX ... :D

Now press ANY of the other buttons, like FULL LEVEL, Preview, ABCD ... :D

La vie est belle, non?

I'll let you discover the oo et pp values of the Sysex code for each button.
Stay connected for few seconds more before rewriting your Bome's rules.

Let's go back to the K1 knob. push it downwards ... in a "normal mode, noting happens, the B0 goes to 00 (in my preset). But now he continues to send its position :

Code: Select all

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 001308ED   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 7F F7
 00130C26   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 7E F7
 00130EA0   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 7D F7
 0013117A   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 7C F7
 00131416   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 7B F7
 00131690   5  --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 47 00 68 41 00 02 00 7A F7
What does it means? That's right, A REAL INFINITE CONTROLLER :
Now, my example : making a 4 channel EQ, on for channels :
A snapshot will explain this better :

Image

Each send button, in the following order ECDB (standing for lo-lowmid-himid-hi) sends to a return channel with a lowpass-bandpass-bandpass-hipass 48db/oct filters, with a phase compensation, exciters, separate comp per channel etc. Sending all of them to Master, the A send remains unused. I'll not explain in more depth the setup of Ableton Live.All sends are set as Relative (lin) Signed bit 2. This is important for the following bome's setup :

How Does it works: You press and hold PREVIEW and select Between ABCD, for example A and C will route the K1-3-5-7 to the sends of channel 1 in live, and the K2-4-6-8 to channel 3 in ableton. Pressing Prev AB=ch 1 - 2, CD = 34 etc etc ...
Pressing only preview inits the setup; the FULL LEVEL also plays as another shift: FL + A sends all values to max, as relative controllers it sends few times the controller upwards; FL + 3 does the same with ch 3 etc... My PRESET button is set as a global SHIFT, and I use it to send a KILL EQ actions:

Here comes the Bome code. Come parts are inspired from this topic : http://www.bome.com/forums/viewtopic.php?f=3&t=2347

Code: Select all

---------------------------------------------------------------

Translator 35: 1_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 00 pp F7 
Rules: 
  if h1==127 then exit rules, skip Outgoing Action
  qq=h1
  ss=hc+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 00 h0 

Translator 36: 3_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 02 pp F7 
Rules: 
  if h3==127 then exit rules, skip Outgoing Action
  qq=h3
  ss=hc+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 02 h0 

Translator 37: 5_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 04 pp F7 
Rules: 
  if h5==127 then exit rules, skip Outgoing Action
  qq=h5
  ss=hc+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 04 h0 

Translator 38: 7_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 06 pp F7 
Rules: 
  if h7==127 then exit rules, skip Outgoing Action
  qq=h7
  ss=hc+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 06 h0 

================

Translator 40: 2_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 01 pp F7 
Rules: 
  if h2==127 then exit rules, skip Outgoing Action
  qq=h2
  ss=hd+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 00 h0 

Translator 41: 4_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 03 pp F7 
Rules: 
  if h4==127 then exit rules, skip Outgoing Action
  qq=h4
  ss=hd+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 02 h0 

Translator 42: 6_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 05 pp F7 
Rules: 
  if h6==127 then exit rules, skip Outgoing Action
  qq=h6
  ss=hd+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 04 h0 

Translator 43: 8_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 07 pp F7 
Rules: 
  if h8==127 then exit rules, skip Outgoing Action
  qq=h8
  ss=hd+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 06 h0 

================

Translator 45: 1_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 00 pp F7 
Rules: 
  if h1==0 then exit rules, skip Outgoing Action
  qq=h1
  ss=hc+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 00 h9 

Translator 46: 3_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 02 pp F7 
Rules: 
  if h3==0 then exit rules, skip Outgoing Action
  qq=h3
  ss=hc+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 02 h9 

Translator 47: 5_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 04 pp F7 
Rules: 
  if h5==0 then exit rules, skip Outgoing Action
  qq=h5
  ss=hc+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 04 h9 

Translator 48: 7_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 06 pp F7 
Rules: 
  if h7==0 then exit rules, skip Outgoing Action
  qq=h7
  ss=hc+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 06 h9 

================

Translator 50: 2_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 01 pp F7 
Rules: 
  if h2==0 then exit rules, skip Outgoing Action
  qq=h2
  ss=hd+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 00 h9 

Translator 51: 4_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 03 pp F7 
Rules: 
  if h4==0 then exit rules, skip Outgoing Action
  qq=h4
  ss=hd+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 02 h9 

Translator 52: 6_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 05 pp F7 
Rules: 
  if h6==0 then exit rules, skip Outgoing Action
  qq=h6
  ss=hd+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 04 h9 

Translator 53: 8_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 07 pp F7 
Rules: 
  if h8==0 then exit rules, skip Outgoing Action
  qq=h8
  ss=hd+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 06 h9 

================

Translator 55: VALUE & DETECTIONS
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 xx qq F7 
Rules: 
  if xx>7 then exit rules, skip Outgoing Action
  if xx==0 then h1=qq
  if xx==1 then h2=qq
  if xx==2 then h3=qq
  if xx==3 then h4=qq
  if xx==4 then h5=qq
  if xx==5 then h6=qq
  if xx==6 then h7=qq
  if xx==7 then h8=qq
Outgoing: (none)

Translator 56: MANUAL
Options: stop=false
Incoming: MIDI F0 47 00 68 40 00 02 02 pp F7 
Rules: 
  Label "def valies : 7 et 71"
  if pp==0 then h0=7
  if pp==0 then h9=71
  Label "pedal down = KILL"
  if pp==1 then h0=63
  if pp==1 then h9=127
Outgoing: (none)

---------------------------------------------------------------

Translator 58: CHANNEL SELECT ABCD
Options: stop=false
Incoming: ABCD, GA SETTING
Rules: 
  if ha==1 then exit rules, skip Outgoing Action
  if hf==1 then exit rules, skip Outgoing Action
  if oo<6 then Goto "EXIT"
  if oo>9 then Goto "EXIT"
  if oo==6 then qq=101
  if oo==7 then qq=102
  if oo==8 then qq=103
  if oo==9 then qq=104
  if oo==16 then qq=105
  ga=qq-100
  exit rules, execute Outgoing Action
  Label "EXIT"
  exit rules, skip Outgoing Action
Outgoing: MIDI 90 qq 7F 80 qq 00 

Translator 59: PRESET BUTTON
Options: stop=false
Incoming: MIDI F0 47 00 68 40 00 02 10 pp F7 
Rules: 
  ha=pp
  if pp==1 then Goto "DOWN-ASSIGN"
  if pp==0 then Goto "UP-CLEAR"
  exit rules, skip Outgoing Action
  Label "DOWN-ASSIGN"
  hb=0
  hc=1
  hd=2
  exit rules, execute Outgoing Action
  Label "UP-CLEAR"
  ha=0
Outgoing: (none)

Translator 60: CHANNEL EQ 1 - PREVIEW MODE
Options: stop=false
Incoming: ABCD, GA SETTING
Rules: 
  if ha==0 then exit rules, skip Outgoing Action
  if he==hc then exit rules, skip Outgoing Action
  if pp==0 then exit rules, skip Outgoing Action
  Label ""
  if oo<6 then Goto "EXIT"
  if oo>9 then Goto "EXIT"
  if oo==6 then qq=101
  if oo==7 then qq=102
  if oo==8 then qq=103
  if oo==9 then qq=104
  if oo==16 then qq=105
  ga=qq-100
  hc=ga+1
  he=ga+1
  exit rules, execute Outgoing Action
  Label "EXIT"
  exit rules, skip Outgoing Action
Outgoing: (none)

Translator 61: CHANNEL EQ 2 - PREVIEW MODE
Options: stop=false
Incoming: ABCD, GA SETTING
Rules: 
  if ha==0 then exit rules, skip Outgoing Action
  if pp==0 then exit rules, skip Outgoing Action
  if hc==0 then exit rules, skip Outgoing Action
  if oo<6 then Goto "EXIT"
  if oo>9 then Goto "EXIT"
  if oo==6 then qq=101
  if oo==7 then qq=102
  if oo==8 then qq=103
  if oo==9 then qq=104
  if oo==16 then qq=105
  ga=qq-100
  hd=ga+1
  exit rules, execute Outgoing Action
  Label "EXIT"
  exit rules, skip Outgoing Action
Outgoing: (none)

---------------------------------------------------------------

Translator 63: EQ RESET - FULL LEVEL SHIFT
Options: stop=false
Incoming: setting HF global
Rules: 
  hf=pp
Outgoing: (none)

Translator 64: EQ RESET - MIDI OUT
Options: stop=false
Incoming: MIDI F0 47 00 68 40 00 02 oo pp F7 
Rules: 
  if hf==0 then exit rules, skip Outgoing Action
  if pp==0 then exit rules, skip Outgoing Action
  if oo<6 then Goto "EXIT"
  if oo>9 then Goto "EXIT"
  if oo==6 then qq=101
  if oo==7 then qq=102
  if oo==8 then qq=103
  if oo==9 then qq=104
  if oo==16 then qq=105
  ss=qq+77
  exit rules, execute Outgoing Action
  Label "EXIT"
  exit rules, skip Outgoing Action
Outgoing: MIDI ss 00 7F ss 02 7F ss 04 7F ss 06 7F ss 00 7F ss 02 7F ss 04 7F ss 06 7F ss 00 7F ss 02 7F ss 04 7F ss 06 7F ss 00 7F ss 02 7F ss 04 7F ss 06 7F ss 00 7F ss 02 7F ss 04 7F ss 06 7F 


Enjoy
Note that this is a first cut, now I'm preparing an ableton Control Surface Setup in Python to handle all that mess. It will take a while to complete it !
And, at last, there is another sysex to dump :

Code: Select all

F0 47 00 68 30 00 04 01 00 27 08 F7
It sends only the buttons sysex, not the controllers

I sniffed a lot more code from the MPD, but the first one is the greatest one :wink:

Join me at lacagedesrats {at} free {dot} fr

None of this information comes from AKAI, VYZOR or any other. The code was recuperated using MidiOX, MidiYoke, SendSyex from Bome and the Vyzex editor.

funkeeflow

2010-09-23 18:59:20

Hey Dexter,

are still woking on this project ?

I bought a MPD 32 recently and with your post i managed to get the magic sysex code for it:

Code: Select all

F0 47 00 6C 30 00 04 01  00 27 38 F7
Any progress on your ableton python script ?

I'm planing on developing something for this as well, but i'm pretty much new to the ableton python api and python in general.

I'am trying to figure out all the sys ex dump data from Vyzex.

If your in sysex mode and move a knob/fader or push a button, the mpd sends something like:

Code: Select all

F0 47 00 6C 41 00 02 00  62 F7 
( for knob K1 for example)

Which should be read as follows:

Code: Select all

F0 = start sysex data
47 = vendor ID ( AKAI )
00 = nothing
6C = product ID ( MPD 32 / 68 for the MPD 24 i guess )
41 = some kind of Mode ( 41 for knobs / 40 for buttons  i guess )
00 = dont know yet / most of the time it's zero
02 = how many bytes to come
00 and 62 = actuel data ( here 00 for knob 1 and 62 for its value )
F7 = end of sysex data
this is what i got for now...
cheers,
funkeeflow

johanpollefoort

2011-02-15 13:56:27

hey guys

thanks for the sysex code, but I don't know how to use the sysex information to have real infinite encoders :
I made a python script with copy/paste other script to have my own,. it work with cc but knob don't act like infinite encoder when I switch to another device there are jumping value.
in the generic script they say

""" The following consts should be substituted with the Sys Ex messages for requesting
a controller's ID response and that response to allow for automatic lookup"""
ID_REQUEST = 0
ID_RESP = 0
GENERIC_ENC1 = 22
GENERIC_ENC2 = 23
GENERIC_ENC3 = 24
GENERIC_ENC4 = 25
GENERIC_ENC5 = 26
GENERIC_ENC6 = 27
GENERIC_ENC7 = 28
GENERIC_ENC8 = 29

but I don't understand how to manage it with sysex

is there someone who know to have a script for mpd's knob act like infinite encoder with device's parameters (sysex or nrpn shit)?

dexter

2011-02-17 12:20:47

Hey dudes,
funkeeflow, thanks for this major update, all those MPD32 owners should be happy!
I Stopped any future development of my py scrips, first because python is (or was?) nor so friendly with sysex processing, and also, debuggin in Ableton is heeeel!
Few mounts ago I started building my own midi controllers using AMTEL AMT 385, all the maths, shifts and processing is done by a hardware, with a ns delay. I also started to completely transform my MPD24 with this technology. My Works, schematics and code are posted under Creative Commons on the Arduino's forum.

johanpollefoort, the tricky part is to detect if a pot moves up or down. It works by comparing current values with a global variable, and this resolves the "zero cross". This is tricky, and it works :) The code for this detection, bome syntax was already published in the main post:
Here are some cuts for pot 1 as example:

Code: Select all

Translator 35: 1_UP
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 00 pp F7
Rules:
  if h1==127 then exit rules, skip Outgoing Action
  qq=h1
  ss=hc+176
  if pp<qq then exit rules, execute Outgoing Action
  if pp>=qq then exit rules, skip Outgoing Action
Outgoing: MIDI ss 00 h0 

Code: Select all

Translator 45: 1_DOWN
Options: stop=false
Incoming: MIDI F0 47 00 68 41 00 02 00 pp F7
Rules:
  if h1==0 then exit rules, skip Outgoing Action
  qq=h1
  ss=hc+176
  if pp<=qq then exit rules, skip Outgoing Action
  if pp>qq then exit rules, execute Outgoing Action
Outgoing: MIDI ss 00 h9 

Code: Select all

Incoming: MIDI F0 47 00 68 41 00 02 xx qq F7
Rules:
  if xx>7 then exit rules, skip Outgoing Action
  if xx==0 then h1=qq
  if xx==1 then h2=qq
  if xx==2 then h3=qq
  if xx==3 then h4=qq
  if xx==4 then h5=qq
  if xx==5 then h6=qq
  if xx==6 then h7=qq
  if xx==7 then h8=qq
Outgoing: (none)
h0 and h9 are first set in a start-up script, they define the inc/dec level. Also, I nodded them temporary with a shift to produce kill EQ pots with wery small movement. It may be much easier to write this in Py, especially if you use tables and objects.

Hope this helps
Enjoy your day!

johanpollefoort

2011-02-18 18:11:35

hey Dexter

thanks for helping
but it's too difficult for me to programming. I don't understand this language, so I found another solution, I put knobs on the mpd into nrpn, and then with bome I put them back in cc but in LinearBinaryOffset . And so it works, Ableton can understand that kind of message and there are no more jump

thanks for all

dexter

2011-02-19 11:18:15

Hey johanpollefoort,
This is not a specific program language, simply an exported as text bome's script. Bome rules and presets, noting more :)

greetings

Magnuzoid

2015-11-10 21:24:19

Hi and sorry for reviving an old thread!
I've been trying for hours now to adapt the sysex messages for my MPD24,
but without luck! :/
Can't use the Vysex software either because of retina display I guess.

What would I have to do to turn the encoders to do infinite controller in the year 2015?

Thanks and have a nice day!

Magnuzoid

2016-01-21 23:50:10

Ok guys, in the year 2016, I finally found out how to get the messages described in this thread. Fantastic!
I had Lasse Munk (Rumkraft.dk) guide me through this via Max (not Max4Live, since it can't do sysex).
I've made a functioning Max Patch for you to use. Much easier than trying to send a sysex message from elsewhere (I tried Logic and Sysex Librarian), and the Max trial is 30 days, so you should be able to get this going.
I attached the patch as a file for you guys.

Don't let old hardware die!

Best regards!
Attachments
Sysex for MPD24.maxpat.zip
Max patch file to send sysex message described in this thread - yay!
(1.49 KiB) Downloaded 151 times

florian

2016-01-28 12:10:03

you can also just use Send SX to send the sys ex string to the MPD!

Magnuzoid

2016-01-28 12:32:47

florian wrote:you can also just use Send SX to send the sys ex string to the MPD!
Ah yes, my issue was I couldn't find a way to do it on OS X :)

florian

2016-01-28 12:43:57

doh!

guess we'll need to offer Send SX for OS X, too!
Thanks,
Florian

denoiser

2016-12-10 14:03:53

Hi,

i did little research of new line of akai's mpd. Here is a list of sysex codes for mpd232:

Code: Select all

Unlock (unlocks mpd to send sysex on port4 for every button/pad/fader): F0 47 00 36 30 00 04 01 00 00 38 F7
Demo Mode 	F0 47 00 36 30 00 04 01 00 01 xx F7	- xx = (00 off, 01 on)
Preset change 	F0 47 00 36 30 00 04 01 00 02 xx F7	- xx = num of preset
Lock			F0 47 00 36 30 00 04 01 00 0E xx F7	- xx = (00 off, 01 on)
Full level 		F0 47 00 36 30 00 04 01 00 11 xx F7	- xx = (00 off, 01 on)
16 Level		F0 47 00 36 30 00 04 01 00 12 xx F7	- xx = (00 off, 01 on)
Note Repeat	F0 47 00 36 30 00 04 01 00 13 xx F7	- xx = (00 off, 01 on)
Pad Banks		F0 47 00 36 30 00 04 01 00 14 xx F7	- xx = (00 A, 01 B, 02 C, 03 D)
Control Banks	F0 47 00 36 30 00 04 01 00 15 xx F7	- xx = (00 A, 01 B, 02 C)
Time Division	F0 47 00 36 30 00 04 01 00 16 xx F7	- xx = (00 off, 01 on)
Seq on/off		F0 47 00 36 30 00 04 01 00 17 xx F7	- xx = (00 off, 01 on)
Seq Rec		F0 47 00 36 30 00 04 01 00 19 xx F7	- xx = (00 off, 01 on)
Step Bank		F0 47 00 36 30 00 04 01 00 1A xx F7	- xx = (00 01-16, 01 17-32)
Sequence Lights  F0 47 00 36 30 00 04 01 01 79 xx F7 to F0 47 00 36 30 00 04 01 02 00 xx F7
Sequence buttn   F0 47 00 36 31 00 04 01 0B 0E xx F7 to F0 47 00 36 31 00 04 01 0B 2D xx F7
Display ASCII	F0 47 00 36 31 00 04 01 00 xx yy F7	- xx = Start number, yy = Letter in ASCII
Greets
d