MIDI controller knob/slider value "catch up"?
Not sure what else to call this , but here's what I'm trying to do: I have a Launch Control XL that I'm setting up to control a whole plethora of things with, over multiple user templates and CC numbers. What I want to be able to do is set it up so that, when I turn one physical knob on different CC numbers, when I return to each of those, the MIDI info output doesnt change until the knob is around the same position it was last in.
So, for example, I have a patch using knob 1 to control CC 1 and CC 30, on different templates. What I'd want to do is move CC1 to 20, change templates, move CC30 to 100, and then switch back to CC1, and be able to bring the knob down to 20 again without there being a jump in the numbers that it's outputing.
Hopefully I'm explaining this well enough!!
Midi match is what You describe.
Compare current value
with value received from slider.
If they match pass slider.
If not, wait till they match.
But if You move sliders too fast, maybe some
hysteresis arround matched value, like +- 2
should be used.
Sorry I'm just getting back to this - I don't think I'm understanding the patch you posted. Connecting a ctlin to either slider doesn't prevent it from jumping back and forth when switching CC outputs on my controller. Where exactly should I be plugging the ctlin output into??
ctlin to left slider.
If left slider does not match the right slider,
gate should close.
That works if right slider gets changed by recalling preset,
or manualy.
I still can't seem to get this working. No matter what I do, whenever I change back to CC1 on the left slider, the right slider jumps to whatever number the knob was set at on the other CC
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 133 382 62 9109513 route 3;
#P newex 27 547 103 9109513 t i i;
#P newex 422 245 55 9109513 t i b i;
#P comment 428 591 100 9109513 parameter;
#P number 379 591 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P comment 252 123 100 9109513 GUI;
#P newex 27 577 83 9109513 prepend set 1;
#P newex 163 514 62 9109513 t 1;
#P newex 491 301 62 9109513 2;
#P newex 572 281 62 9109513 loadbang;
#P newex 27 321 62 9109513 gate 2;
#P newex 491 402 62 9109513 0;
#P newex 572 382 62 9109513 loadbang;
#P newex 185 482 62 9109513 buddy;
#P newex 185 452 115 9109513 select 1 2;
#P newex 185 422 62 9109513 change;
#P newex 185 341 229 9109513 expr ($i1>$i2) + ($i1<$i2)*2 + ($i1==$i2)*3;
#P user multiSlider 211 42 30 180 0. 127. 1 2921 47 0 0 1 0 0 1;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P user multiSlider 22 42 30 180 0. 127. 1 2921 47 0 0 1 0 0 1;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P comment 63 123 100 9109513 hardware;
#P connect 17 1 11 0;
#P connect 17 1 8 0;
#P connect 12 0 9 0;
#P connect 11 0 9 0;
#P connect 9 0 18 0;
#P connect 18 0 13 0;
#P connect 1 0 9 1;
#P connect 3 0 19 0;
#P connect 19 0 12 0;
#P connect 6 0 12 0;
#P connect 9 1 3 0;
#P connect 19 1 4 0;
#P connect 8 0 4 0;
#P connect 4 0 5 0;
#P connect 5 0 6 0;
#P connect 13 0 2 0;
#P connect 5 1 6 1;
#P connect 18 1 15 0;
#P connect 17 2 15 0;
#P connect 17 0 3 1;
#P connect 2 0 17 0;
#P connect 10 0 11 0;
#P connect 7 0 8 0;
#P window clipboard copycount 20;
This one seems to be giving me the same issues - move knob 1/CC1 to 20, move knob 1/CC30 to 50, when I switch back to knob 1/CC1 it jumps straight to 50 :(
make sure you separated stuff from each other. inside the max patch different CC numbers should not be connected to each other in any way.
whether the novation controller sends all controllers last status after you changed template shouldnt matter with my patch.
I see the problem, read the original post again.
If ctlin gets disconnected from gate,
it leaves it in matched state, which allows values to come through.
So You need to feed the gate with ctlin allways, even if it is sent to some other
destination.
In this example there is a range of 2 (difference)
to match 2 values.
You can change it if needed.
That one did it!! I tweaked it a bit with an if message that (I think) will set it to close the gate whenever the controller sends a message via any CC other than the designated one. Thanks for all yr help yall!
Good that it finaly works for You.
instead of that if ($i1 > 1) || ($i1 < 1) then 0 else 1 one could use != 1
It does the same, but is easier to type and set number to check against.
I am not sure if in a fast midi stream and many controllers
closing that gate whenever non matching CC on any channel is sent is optimal.
Simpler would be to use single ctlin for both tasks, control and switch.