Page 1 of 3

Quickly switching MIDI Mappings

Posted: Thu Sep 26, 2019 9:31 am
by sefable
Hello,

I have a max for live device with 32 knobs.

I have a Midi controller with 16 physical knobs.

Is there a way to map the 16 physical knobs to the first 16 virtual ones, store that mapping, then map the 16 physical knobs to the last 16 virtual knobs, store that mapping, and then quickly switch between the first and second mapping.

This way, I have a physical control of all the parameter by switching between mappings.

If it's not possible natively, would you have any workaround?

Thanks for your help.

Re: Quickly switching MIDI Mappings

Posted: Thu Sep 26, 2019 5:31 pm
by S4racen
ClyphX Pro has an add on product called Bindings that allows you to do this.

Https://isotonikstudios.com/clyphx-pro

https://isotonikstudios.com/product/cly ... -bindings/

Cheers
D

Re: Quickly switching MIDI Mappings

Posted: Wed Oct 09, 2019 4:10 pm
by sefable
Thanks for your answer.

I'm looking for a free way to do it.

I'm a developer, but I just can't find the right documentation to build the python remote script.

Anyone could point me to the right direction?

Re: Quickly switching MIDI Mappings

Posted: Wed Oct 09, 2019 4:31 pm
by sefable
This is my max for live device : 

Image
hergeur d image

When I click en "One", I want my 16 physical knobs to be mapped on the 16 first knobs in the device.

When I click en "Two", I want my 16 physical knobs to be mapped on the 16 last knobs in the device.

Re: Quickly switching MIDI Mappings

Posted: Thu Oct 10, 2019 6:57 pm
by S4racen
As other people are likely to search for a solution similarly, this is the set up that I used at this weekends Synthfest show...

Took about 20 minuets to set top so it may save someone some time....

Bindings Code for 2 x MIDI Fighter Twister

MF_ENC_1 = 1, 0, ABSOLUTE, TRUE, SEL/DEV(SEL) P1

MF_ENC_2 = 1, 1, ABSOLUTE, TRUE, SEL/DEV(SEL) P2

MF_ENC_3 = 1, 2, ABSOLUTE, TRUE, SEL/DEV(SEL) P3

MF_ENC_4 = 1, 3, ABSOLUTE, TRUE, SEL/DEV(SEL) P4

MF_ENC_5 = 1, 4, ABSOLUTE, TRUE, SEL/DEV(SEL) P5

MF_ENC_6 = 1, 5, ABSOLUTE, TRUE, SEL/DEV(SEL) P6

MF_ENC_7 = 1, 6, ABSOLUTE, TRUE, SEL/DEV(SEL) P7

MF_ENC_8 = 1, 7, ABSOLUTE, TRUE, SEL/DEV(SEL) P8

MF_ENC_9 = 1, 8, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P1

MF_ENC_10 = 1, 9, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P2

MF_ENC_11 = 1, 10, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P3

MF_ENC_12 = 1, 11, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P4

MF_ENC_13 = 1, 12, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P5

MF_ENC_14 = 1, 13, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P6

MF_ENC_15 = 1, 14, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P7

MF_ENC_16 = 1, 15, ABSOLUTE, TRUE, SEL/DEV(SEL) B2 P8

MF_2_ENC_1 = 1, 0, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P1

MF_2_ENC_2 = 1, 1, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P2

MF_2_ENC_3 = 1, 2, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P3

MF_2_ENC_4 = 1, 3, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P4

MF_2_ENC_5 = 1, 4, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P5

MF_2_ENC_6 = 1, 5, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P6

MF_2_ENC_7 = 1, 6, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P7

MF_2_ENC_8 = 1, 7, ABSOLUTE, TRUE, SEL/DEV(SEL) B3 P8

MF_2_ENC_9 = 1, 8, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P1

MF_2_ENC_10 = 1, 9, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P2

MF_2_ENC_11 = 1, 10, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P3

MF_2_ENC_12 = 1, 11, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P4

MF_2_ENC_13 = 1, 12, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P5

MF_2_ENC_14 = 1, 13, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P6

MF_2_ENC_15 = 1, 14, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P7

MF_2_ENC_16 = 1, 15, ABSOLUTE, TRUE, SEL/DEV(SEL) B4 P8

MACRO for switching between first 32 parameters and the second 32 across both controllers...

$BANK1to4$ = BIND MF_ENC_1 SEL/DEV(SEL) P1 ; BIND MF_ENC_2 SEL/DEV(SEL) P2 ; BIND MF_ENC_3 SEL/DEV(SEL) P3 ; BIND MF_ENC_4 SEL/DEV(SEL) P4 ; BIND MF_ENC_5 SEL/DEV(SEL) P5 ; BIND MF_ENC_6 SEL/DEV(SEL) P6 ; BIND MF_ENC_7 SEL/DEV(SEL) P7 ; BIND MF_ENC_8 SEL/DEV(SEL) P8 ; BIND MF_ENC_9 SEL/DEV(SEL) B2 P1 ; BIND MF_ENC_10 SEL/DEV(SEL) B2 P2 ; BIND MF_ENC_11 SEL/DEV(SEL) B2 P3 ; BIND MF_ENC_12 SEL/DEV(SEL) B2 P4 ; BIND MF_ENC_13 SEL/DEV(SEL) B2 P5 ; BIND MF_ENC_14 SEL/DEV(SEL) B2 P6 ; BIND MF_ENC_15 SEL/DEV(SEL) B2 P7 ; BIND MF_ENC_16 SEL/DEV(SEL) B2 P8 ; BIND MF_2_ENC_1 SEL/DEV(SEL) B3 P1 ; BIND MF_2_ENC_2 SEL/DEV(SEL) B3 P2 ; BIND MF_2_ENC_3 SEL/DEV(SEL) B3 P3 ; BIND MF_2_ENC_4 SEL/DEV(SEL) B3 P4 ; BIND MF_2_ENC_5 SEL/DEV(SEL) B3 P5 ; BIND MF_2_ENC_6 SEL/DEV(SEL) B3 P6 ; BIND MF_2_ENC_7 SEL/DEV(SEL) B3 P7 ; BIND MF_2_ENC_8 SEL/DEV(SEL) B3 P8 ; BIND MF_2_ENC_9 SEL/DEV(SEL) B4 P1 ; BIND MF_2_ENC_10 SEL/DEV(SEL) B4 P2 ; BIND MF_2_ENC_11 SEL/DEV(SEL) B4 P3 ; BIND MF_2_ENC_12 SEL/DEV(SEL) B4 P4 ; BIND MF_2_ENC_13 SEL/DEV(SEL) B4 P5 ; BIND MF_2_ENC_14 SEL/DEV(SEL) B4 P6 ; BIND MF_2_ENC_15 SEL/DEV(SEL) B4 P7 ; BIND MF_2_ENC_16 SEL/DEV(SEL) B4 P8

$BANK5to8$ = BIND MF_ENC_1 SEL/DEV(SEL) B5 P1 ; BIND MF_ENC_2 SEL/DEV(SEL) B5 P2 ; BIND MF_ENC_3 SEL/DEV(SEL) B5 P3 ; BIND MF_ENC_4 SEL/DEV(SEL) B5 P4 ; BIND MF_ENC_5 SEL/DEV(SEL) B5 P5 ; BIND MF_ENC_6 SEL/DEV(SEL) B5 P6 ; BIND MF_ENC_7 SEL/DEV(SEL) B5 P7 ; BIND MF_ENC_8 SEL/DEV(SEL) B5 P8 ; BIND MF_ENC_9 SEL/DEV(SEL) B6 P1 ; BIND MF_ENC_10 SEL/DEV(SEL) B6 P2 ; BIND MF_ENC_11 SEL/DEV(SEL) B6 P3 ; BIND MF_ENC_12 SEL/DEV(SEL) B6 P4 ; BIND MF_ENC_13 SEL/DEV(SEL) B6 P5 ; BIND MF_ENC_14 SEL/DEV(SEL) B6 P6 ; BIND MF_ENC_15 SEL/DEV(SEL) B6 P7 ; BIND MF_ENC_16 SEL/DEV(SEL) B6 P8 ; BIND MF_2_ENC_1 SEL/DEV(SEL) B7 P1 ; BIND MF_2_ENC_2 SEL/DEV(SEL) B7 P2 ; BIND MF_2_ENC_3 SEL/DEV(SEL) B7 P3 ; BIND MF_2_ENC_4 SEL/DEV(SEL) B7 P4 ; BIND MF_2_ENC_5 SEL/DEV(SEL) B7 P5 ; BIND MF_2_ENC_6 TRUE, SEL/DEV(SEL) B7 P6 ; BIND MF_2_ENC_7 SEL/DEV(SEL) B7 P7 ; BIND MF_2_ENC_8 SEL/DEV(SEL) B7 P8 ; BIND MF_2_ENC_9 SEL/DEV(SEL) B8 P1 ; BIND MF_2_ENC_10 SEL/DEV(SEL) B8 P2 ; BIND MF_2_ENC_11 SEL/DEV(SEL) B8 P3 ; BIND MF_2_ENC_12 SEL/DEV(SEL) B8 P4 ; BIND MF_2_ENC_13 SEL/DEV(SEL) B8 P5 ; BIND MF_2_ENC_14 SEL/DEV(SEL) B8 P6 ; BIND MF_2_ENC_15 SEL/DEV(SEL) B8 P7 ; BIND MF_2_ENC_16 SEL/DEV(SEL) B8 P8

X-Control for switching between the two banks via the top two buttons of the first MIDI Fighter Twister

MF_BTN_1 = CC, 2, 0, 0, 127, $BANK1to4$
MF_BTN_2 = CC, 2, 1, 0, 127, $BANK5to8$

Cheers
D

Re: Quickly switching MIDI Mappings

Posted: Thu Oct 10, 2019 7:04 pm
by sefable
This is using ClyphX right?

Is there anyway to switch banks using the keyboard using ClyphX? Pressing 1 on the keyboard for bank 1 and etc?

Midi fighter side buttons are not as comfortable to use as a simple keyboard key.

Re: Quickly switching MIDI Mappings

Posted: Thu Oct 10, 2019 7:33 pm
by chapelier fou
You could make a “dummy” interface just to map your controller to 16 dials. Then make your patch route the dials to the correct “real” ones, with offsets set by your live.tab.
It looks quite easy to do.

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 6:23 am
by S4racen
sefable wrote:
Thu Oct 10, 2019 7:04 pm
This is using ClyphX right?

Is there anyway to switch banks using the keyboard using ClyphX? Pressing 1 on the keyboard for bank 1 and etc?

Midi fighter side buttons are not as comfortable to use as a simple keyboard key.
Yes it's using CLyphX Pro and the Bindings add on, I agree the side buttons are not the most comfortable option.

The simplest way would be to write the macro name into a clip and trigger that from the 1 key of the keyboard....

Cheers
D

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 6:30 am
by sefable
S4racen wrote:
Fri Oct 11, 2019 6:23 am

The simplest way would be to write the macro name into a clip and trigger that from the 1 key of the keyboard....

Cheers
D
Would it then still be possible to use the session view as usual? What's your suggested way of making sure it doesn't interfere with the session view? Maybe using a dummy track for that clip?

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 6:31 am
by sefable
chapelier fou wrote:
Thu Oct 10, 2019 7:33 pm
You could make a “dummy” interface
Would you elaborate how you would make such an interface?
chapelier fou wrote:
Thu Oct 10, 2019 7:33 pm
make your patch route the dials to the correct “real” ones
Would you elaborate how you would "route dials"?

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 7:03 am
by sefable
chapelier fou wrote:
Thu Oct 10, 2019 7:33 pm
You could make a “dummy” interface just to map your controller to 16 dials. Then make your patch route the dials to the correct “real” ones, with offsets set by your live.tab.
It looks quite easy to do.
I think I got it.

The idea would be to add 16 knobs in my device, that correspond to the 16 physical knobs.

These first 16 knobs, depending on the offset, would update (using a conditional max msp connection I guess) the right virtual knobs.

Updating the virtual knobs (and loading presets), depending on the offset, would update the first 16 "physical" knobs.

Is this the idea? Sounds quite awesome.

Except, I'm guessing, that these 16 knobs need to be visible so they can be mapped.

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 10:07 am
by chapelier fou
That’s the idea. I’m away from home and replying from my phone. But check the ‘thispatcher’ object and the ‘front’ message going to it. It will allow to hide the dummy knobs.

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 10:08 am
by chapelier fou
The other thing to consider is to send the dials value to update the dummy ones when you select them.

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 12:10 pm
by sefable
chapelier fou wrote:
Fri Oct 11, 2019 10:07 am
That’s the idea. I’m away from home and replying from my phone. But check the ‘thispatcher’ object and the ‘front’ message going to it. It will allow to hide the dummy knobs.
Thanks for the idea, I'll try it this weekend.

If the knobs are hidden, I wouldn't know how to map them in ableton since one need to click on it before mapping it with the hardware.

Did you have maybe an idea of a different way they could be mapped to the midi controller?

There's the UserConfiguration.txt but it's only possible to map 8 knobs.

Re: Quickly switching MIDI Mappings

Posted: Fri Oct 11, 2019 12:13 pm
by chapelier fou
Thispatcher allows you to make a floating window.