Oh my MPD ...

Share your favorite Ableton Live tips, tricks, and techniques.
Post Reply
akaratz
Posts: 17
Joined: Thu Aug 30, 2007 2:30 pm
Contact:

Oh my MPD ...

Post by akaratz » Tue Jul 06, 2010 12:11 pm

Originaly posted on Bome's Midi Translator forum

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.

Post Reply