Hello there,
Hope everybody is fine.
I have a problem with my launchcontrol, when I use it with my template i created in GP, everything works good, but I don’t know why the 4th knob from the 2nd line cannot be midi learned.
I checked in an external app called MIDI Monitor, and the midi info does exist, so it’s not a hardware issue.
Can somebody help ? =)
Thanks
dhj
November 23, 2022, 8:27pm
2
Dextroze:
midi info does exist
I don’t suppose you’d like to tell us what the MIDI message is?
1 Like
20:48:19.568 From Launch Control XL Control 9 Bank Select (fine) 116
dhj
November 23, 2022, 8:49pm
4
Dextroze:
Bank Select
Yep, that explains it….you cannot learn bank select messages as they’re used to select banks in Gig Performer. You should change that particular knob to use a different CC message … don’t use 32 or 0
Thank you very much !!!
Now I just have to find how to do that ;))
Two solutions:
you change this behavior in the configuration software of the LaunchControl (if it is possible)
I think I already proposed a Gig Script to another user where I converted the CC0/CC32 any other CC#
EDIT: Oh I found it, it is even more clever (understand more complicated than necessary) than I remember it being, but still untested I think :
There is perhaps a solution using this GIG script I made just for the fun :
var
AxEdge : MidiInDeviceAlias // Define AxEdge as a RigManager alias to the real controller
state : Integer=0;
CC0_mem, CC32_mem : ControlChangeMessage;
PC_mem : ProgramChangeMessage;
time : Double = TimeSinceStartup();
stateDelay : Double = 10.0; //in ms
//
CC0_remap : Integer = 1; // CC0 will be remapped to this value
CC32_remap : Integer = 33; // CC32 will be remapped to this value
Initialization
SetTimersRunning(true); // We could also stop the timers when not necessary at State 0
End
On ControlChangeEvent(m : ControlChangeMessage) Matching 0 from AxEdge
Select
state == 0 Do state = 1;
CC0_mem = m;
time = TimeSinceStartup();
state == 1 Do InjectMidiEventViaRigManager(AxEdge, WithCCNumber(CC0_mem, CC0_remap));
CC0_mem = m;
time = time - stateDelay;
true Do InjectMidiEventViaRigManager(AxEdge, WithCCNumber(m, CC0_remap));
End
End
On ControlChangeEvent(m : ControlChangeMessage) Matching 32 from AxEdge
Select
state == 1 && (TimeSinceStartup() < (time + 2*stateDelay))
Do state = 2;
CC32_mem = m;
state == 2 Do state = 0;
InjectMidiEventViaRigManager(AxEdge, WithCCNumber(CC0_mem, CC0_remap));
InjectMidiEventViaRigManager(AxEdge, WithCCNumber(CC32_mem, CC32_remap));
InjectMidiEventViaRigManager(AxEdge, WithCCNumber(m, CC32_remap));
true Do InjectMidiEventViaRigManager(AxEdge, WithCCNumber(m, CC32_remap))
End
End
On ProgramChangeEvent(m : ProgramChangeMessage) from AxEdge
If state == 2
Then
state = 0;
InjectMidiEventViaRigManager(AxEdge, CC0_mem);
InjectMidiEventViaRigManager(AxEdge, CC32_mem);
InjectMidiEventViaRigManager(AxEdge, PC_mem);
End
PC_mem = m;
End
// Called by timer ticking
On TimerTick(ms : double)
Select
state == 1 && (TimeSinceStartup() > (time + 2*stateDelay))
Do state = 0;
InjectMidiEventViaRigManager(AxEdge, WithCCNumber(CC0_mem, CC0_remap));
state == 2 && (TimeSinceStartup() > (time + 3*stateDelay))
Do state = 0;
InjectMidiEventViaRigManager(AxEdge, WithCCNumber(CC0_mem, CC0_remap));
InjectMidiEventViaRigManager(AxEdge, WithCCNumber(CC32_mem, CC32_remap));
End
End
It is supposed to convert all CCO and CC32 but not those part of a MSB+LSB+PC sequence. I couldn’t really test it because none of my controllers accept to send a CC0 or CC32. But, I have great hope that it should work.
4 Likes
Thank you very much ! I will test that next week normaly