I did, but it doesn’t work
So you have to check if there is a setup to be done for the nanokontrol 2.
Seems you have to enable LED mode on the nanokontrol.
I had to change LED mode from Internal to External.
Thank you again!
I followed and used this thread to help create my first ‘synced’ light button on my Novation Launchpad for muting/unmuting my headset mic via my XR18 and it is VERY cool. If only I could do the same for latching and lighting on notes I map from other buttons on my Launchpad… without scripting it. My gpscript skills are still pretty rudimentary
Have the same problem with Faderfox UC44, I cannot adjust Encoder 1 and Knob 1 to anything, because of CC0 and CC32. Remapping is not an option, because the controller can switch in 16 banks. Is there no way to change this behaviour (as a flag for a special setting)?
You could do this with a Gig Script
var
MySurface : MidiInDeviceAlias // Define MySurface as an RigManager alias to the real surface
On ControlChangeEvent(m : ControlChangeMessage) Matching 0 from MySurface
InjectMidiEventViaRigManager(MySurface, WithCCNumber(m, 1)) // Change any CC 0 number to CC 1
End
On ControlChangeEvent(m : ControlChangeMessage) Matching 32 from MySurface
InjectMidiEventViaRigManager(MySurface, WithCCNumber(m, 33)) // Change any CC 32 number to CC 33
End
Note that doing this will prevent Gig Performer from responding to CC0/32 bank select
What happens when you additionally inject cc 0 and cc 32?
Well, then moving a slider on the control surface would not only show up as CC1 (or CC33) but it would also end up doing a bank select - which you probably don’t want!
New to this topc…I put it in a scriplet, compiled it and got this error: °Scriptlet (Scriptlet) - Semantic error in “Main”: Line 4, Col 4: Not valid in this script entity. An explicit plugin name is not allowed here°.
Is this the right way to implement the code?
Can you show your code?
Yes, I said a Gig Script, not a scriptlet!
KORG KONTROL Editor works well to remap the CC# on the hardware side before it gets to GP to change things like this.
I don’t think he’s using a KORG device
You’re right @dhj … it’s a “KORK” device
I have the same device and using the kontrol editor solved the issue for me.
You’re looking at the original post — the user who posted recently (klangschmied) is using a Faderfox UC44, not a Korg
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.