What's new

FlexRouter: Flexible keyswitch router for Kontakt 5 - version 2.2.3 released

however I can't switch back to any or any other articualtion without manually bypassing Flexrouter then un-bypassing and then itll reset back.
I think I understand why this is happening.

Do you just have a single keyswitch for spicatto? If this is the case then FlexRouter won't know that it needs to route back to channel 1 for the other UACCs. Routing is only changed based on keyswitch events, so if you don't have a keyswitch configured for the other CC32 values, it'll be stuck on channel 2 after you trigger spiccato.

It's possible to solve this by creating two "catch-all" keyswitches for CC32 values 0-41 and another one for CC32 values 43-127, both with a passthrough KS action and setting the target to [A]1 (or your rule default). Alternatively, if you don't mind CC32 value 42 being fired into your combination palette on channel 1 -- and you wouldn't because you've unloaded spiccato there -- then you can create a single catch-all for CC32 values 0-127.

It turns out that this exact recipe can be used to do it the way you originally wanted (keeping Spitfire spiccato in the combination palette and only loading in LASS spiccato on channel 2). The only difference is you don't need to unload spiccato in your combination palette or load the standalone patch on channel 2.

In other words:

1. Create a keyswitch on CC32 values 0-127, default target ([A]1) and set the KS action to passthrough.

ks1.png

2. Create a keyswitch on CC32 value 42, target [A]2 and set the KS action to block.

ks2.png

You can repeat #3 for all such layers you'd like to have.

When you trigger spiccato via CC32/42, the first keyswitch executes (because value 42 is within the 0-127 range), setting up a route to channel 1 and passing the CC32/42 event to the Spitfire patch, and then the second keyswitch executes (because value 42 is within the 42-42 range), which adds channel 2 to the routing targets.

When you trigger a UACC other than 42, only the first keyswitch executes, which first resets all routing (undoing the routing to channels 1 and 2), and then sets routing back up to channel 1, again passing the UACC event onto the patch on channel 1.

Hope that helps!
 
Last edited:
Do you just have a single keyswitch for spicatto?
Hope that helps!

I was just using a single key switch for spiccato but the new way you described it worked perfectly! I can keep spitfire all in the combination palette and just load LASS spicc or anything else I want on a different track. This is perfect thank you so much for your quick response, helping me out, and writing this script. :D
 
You can repeat #3 for all such layers you'd like to have.

So its working but I'm a little confused because its not what you said when adding a 3rd or 4th articulation and I want to ask in case I run into problems down the road I'm not aware of.

Adding spiccato worked perfectly so now for some parts I want to add spicc+staccato. And you said just repeat the same process however having the KS Action set to BLOCK doesn't work when adding a 3rd articulation. I have to set each rule to passthrough otherwise spitfire when I add the second stacc doesn't like to reset back. But if everything is on passthrough it works. Is this okay or something I'm doing wrong?

Like I said it works on passthrough I just want to make sure its not gonna cause problems down the road lol.

P.S.

Is it possible to setup velocities triggers with flexrouter? In the aspect that usign spitfire strings it would be cool if I can hit a velocity range of 115-127 on the spiccato patch that instead of playing LASS Spiccato it could play LASS Stacc SLAM for those high notes. Is this possible? Sorry for all the questions I've watched your vids and noticed velocity keyswitch is possible but not sure if velocity on note input works? Thanks!
 
Sorry for all the posts, Is this normal the delay? Maybe this is the cause of the passthrough but the staccato isn't switching over at the same time as Spitfirestrings as seen here. I'm using expression maps and with fast 8ths triplets at 120 bpm the staccato activates on spitfire but the LASS is delayed to the 2nd note not on the first with spitfire.

fc412b004e328206c9e5978e990c5d2f.gif
 
Adding spiccato worked perfectly so now for some parts I want to add spicc+staccato. And you said just repeat the same process however having the KS Action set to BLOCK doesn't work when adding a 3rd articulation.
You mean using Spitfire staccato from the combination palette and LASS spiccato on channel 2? Or perhaps LASS staccato on channel 3? Yes, this should work exactly the same way. If it's not, I'm still not ruling out bugs. :)

But if you meant spiccato from the SF combination patch and LASS staccato, the recipe won't work.


Is it possible to setup velocities triggers with flexrouter? In the aspect that usign spitfire strings it would be cool if I can hit a velocity range of 115-127 on the spiccato patch that instead of playing LASS Spiccato it could play LASS Stacc SLAM for those high notes. Is this possible?
I think it should be possible (again I'm not currently in front of my DAW to test) but now things are starting to get ugly, and it'll only work if you go back to the initial idea of unloading spiccato on the combination palette and having both SF/LASS individual spiccato patches loaded on channel 2, and using separate catch-all rules that avoid covering UACC 42.

Because for it to work while keeping spiccato on the combination palette, for high velocity notes, FlexRouter would need to have the concept of non-latched keyswitches, remembering the prior state. In ot
her words, when it sees a high velocity note, it'd have to send UACC 42 for spiccato, and for lower velocity notes, your expected behavior is presumably for it to send the UACC for the last articulation you were on. It doesn't currently support this idea of previous state to simulate a non-latching articulation.

So, off the top of my head, I think it'd look something like:
  • Create keyswitch for CC 32 values 0-41 with passthrough the channel 1
  • Create keyswitch for CC 32 values 43-127 with passthrough to channel 1
  • Create keyswitch for notes with velocity 1-114 with passthrough to channel 1
  • Create keyswitch for notes with velocity 115-127 with passthrough to channel 2
If you're doing a lot of these customizations for UACC, you may be better off creating individual keyswitches for each separate UACC value and passing through, then reconfiguring (or duplicating as needed) a UACC keyswitch where you want to do something different.


Sorry for all the posts, Is this normal the delay? Maybe this is the cause of the passthrough but the staccato isn't switching over at the same time as Spitfirestrings as seen here.
There shouldn't be any delay, no. I think I'll need to look a bit closer at what you're doing. Can you save your slot out as a .nkp and email it to me at [email protected]?
 
You mean using Spitfire staccato from the combination palette and LASS spiccato on channel 2? Or perhaps LASS staccato on channel 3? Yes, this should work exactly the same way. If it's not, I'm still not ruling out bugs.

Yes, Because I'm using VEPRO to manage my channels I have an instance of Kontakt For Violin 1 Longs channel 1, Violin 1 Shorts channel 2 etc... I then have each kontakt instrument on OMNI so I can easily move the channels of everything inside kontakt using VEPRO without having to change each individual track within kontakt.

That being said, I'm Violins 1 Core Techniques from Symphonic Strings and Violin 1 Core Techniques from Spitfire Chamber Strings both on UACC on OMNI channel. I then have spiccato from LASS on 1 and Staccato on 2. ((I use B so I know it doesnt confuse with my A channels since I'm using [A] 1-16.)) I then use UACC #32 value 42 for spicc to layer LASS spic with spitfire and it works great. I use #32 value 50 to layer LASS Stacc with spitfire's "short 0'5" since they've strayed from stacc but I like having staccato. That's where having both 42 & 50 on ks BLOCKED doesn't work because spitfire won't switch back articulations however on passthrough it works.

Here is an image in case I was confusing lol.

6607abc6e51cc0d2244a2a60333b3424.png


Also if it matters I am using expression maps to trigger the UACC for the keyswitches.

If you're doing a lot of these customizations for UACC, you may be better off creating individual keyswitches for each separate UACC value and passing through, then reconfiguring (or duplicating as needed) a UACC keyswitch where you want to do something different.

I'll try this and get back to you as this as you said might be easier and just use individual articulations to achieve this outside of the combination palette.

I've emailed you the .nkp as I might be messing something up lol. Let me know if I can be clearer or you need anything else :D
 
I just dropped version 2.2.2, another maintenance release with a couple fixes:
  • Handle CC123 (All Notes Off)
    • This should fix inconsistencies with Cubase expression maps using note-based keyswitches.
  • Fix a bug where notes could hang if the sustain pedal was being chased across more than 1 target channel

Get it here. (Or see the project page on Github.)
Hi Tack,

Thanks for the update. Is the "Get it here" link updated to the flexrouter 2.2.2 script as I noticed in the script it still says 2.2.1?

If it is the same I tried copying the raw data from the project page but Im getting errors copying/pasting it in. I'm doing something wrong I imagine lol.

https://gyazo.com/15f3c67823318327375ed78491d8eb5a
15f3c67823318327375ed78491d8eb5a
 
Thanks for the update. Is the "Get it here" link updated to the flexrouter 2.2.2 script as I noticed in the script it still says 2.2.1?
Hm, the link looks good here. Perhaps you've browser cache issues? Maybe shift-reload to bypass the browser cache?

From a Linux shell:
Code:
$ curl -s https://urandom.ca/flexrouter/latest | grep set_script_title
set_script_title("FlexRouter 2.2.2")


If it is the same I tried copying the raw data from the project page but Im getting errors copying/pasting it in. I'm doing something wrong I imagine lol.
It looks like you're pasting the original uncompiled code, which Kontakt definitely won't like. The latest compiled script is what you want to paste in.
 
Hm, the link looks good here. Perhaps you've browser cache issues? Maybe shift-reload to bypass the browser cache?

From a Linux shell:
Code:
$ curl -s https://urandom.ca/flexrouter/latest | grep set_script_title
set_script_title("FlexRouter 2.2.2")



It looks like you're pasting the original uncompiled code, which Kontakt definitely won't like. The latest compiled script is what you want to paste in.
Yes! That was it... man I feel silly that I didn't think of that.. thanks for helping and thank you so much for the update. :D
 
Hi,

I just implemented your flex router into my Sibelius playback configuration and I am very happy with what it can do. I have one feature request though. Is it possible to add a plus sign underneath the target channel. It would be great if you can route incoming midi to multiple midi channels after pressing certain key switches. I want to double my sustained/legato patches with a staccato patch when there is an accent articulation used in Sibelius.
 
Is it possible to add a plus sign underneath the target channel. It would be great if you can route incoming midi to multiple midi channels after pressing certain key switches. I want to double my sustained/legato patches with a staccato patch when there is an accent articulation used in Sibelius.
I'll take a look. It may require a surprising amount of redesign under the hood, but if not I'll consider adding support for multiple destination channels per keyswitch. For now the solution is to create two separate keyswitches for the same MIDI event that have the different routing details.
 
Hi, I'm trying to use 2.2.2 and, from using Kontakt's MIDI Monitor in series after it, I see that it's multiplying a CC & value (which I am meaning to send, but only once) dozens of times. Bypassing FR brings it back to the expected number of times, but I can't for the life of me figure out where FR is doing this multiplication.

Any ideas?
 
@teammwrp does it to this even with an empty, unconfigured instance of FR? If not (and an out-of-box instance doesn't do this), can you save out your multiscript instance as a .nkp and PM it to me? I'll take a look (probably tomorrow evening though). Suffice it to say that's not expected behavior :)

Also what CC event are you sending?
 
Hi,

Was wondering if someone could help me with my script. I've been working on it for hours and I can't figure out what I'm doing wrong. I feel it should be doable and must be a certain order or button I'm not seeing.

I'm looking for the following:

[A1] Legato
[A2] Sustains with/without vibrato (then cc2 controls without, romantic, strong vibrato switching to A2, B1, B2 for the different patches)
[A3] Shorts

Basically, I'm trying to reduce my keyswitches to 3 or 4 max channels. Then when I keyswitch on that specific channel, it'll open up various possibilities for different keyswitches that will only correspond when I'm on that channel. Which should work with flexrouter if I'm not mistaken?

I've attached my script for reference.

https://www.dropbox.com/s/ekw9irx5dhrhtkt/_Strings Channel Switching.nkp?dl=0
 
Basically, I'm trying to reduce my keyswitches to 3 or 4 max channels. Then when I keyswitch on that specific channel, it'll open up various possibilities for different keyswitches that will only correspond when I'm on that channel. Which should work with flexrouter if I'm not mistaken?
The misunderstanding here is thinking that CC2 will get routed to a new target channel by the Channel Switching rule, so that the Sustain Vibrato rule can use the target from the Channel Switching rule as its own source channel.

The source channel always refers to the originating MIDI coming into the multiscript -- there's no internal routing flow that performs internal translations to be processed by later rules

I think the easy solution here is to have two instances of FlexRouter: the first one is your Channel Switching rule, and the second one does the switching by CC2. In this case, the first instance will route CC2 to the appropriate channel as it leaves the multiscript, and then the input to the second multiscript instance will indeed have the expected source channel.
 
@DMDComposer your nkp has reminded me that I actually need to cut a new release of FlexRouter. It had an off-by-one error that I fixed a while ago in the beta version, which results in some weird behaviour when removing keyswitches. This leaves the keyswitch array in a wonky state. You can see this problem when you try to delete the C7 keyswitch in your Sustain Vibrato rule.
 
Top Bottom