KORG nanoKONTROL 2 issues

I did, but it doesn’t work :frowning:

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!

1 Like

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

2 Likes

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?

@pianopaul: I pasted the code from above (dhj) in a scriplet and compiled it…

OK

" You could do this with a Gig Script"

Why did you use a scriptlet, that makes no sense.

1 Like

Yes, I said a Gig Script, not a scriptlet!

Sorry, new to this script things…
Thanks @dhj and @pianopaul for the instructions, got it to work.

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 :laughing:

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

@dhj yes it is Faderfox uc44, cou can change the CCs, but not with an editor, only on the hardware…

There is perhaps a solution using this GIG script I made just for the fun :nerd_face::

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. :nerd_face: