Need help with solutions to a MIDI routing setup for orchestral libraries/expression maps

This is a simplified overview of what I’m trying to do:

I want to send the MIDI data from the MIDI track (“Violins I”) to different instrument tracks, depending on the articulation. Using expression maps, it’s my understanding that the MIDI can be sent to differnet MIDI channels of the track’s output (see this tutorial video for an example), which with some orchestral VST libraries, can trigger keyswitches to switch between articulations, if that instrument is receiving input from said MIDI track.
However, I can’t figure out a possible way to set up expression maps that can direct MIDI data to completely separate outputs/instrument channels.

Why do I want to do it this way you may ask?
I like to blend multiple orchestral libraries together depending on the sound I want. Most people would usually set up a separate instrument track for each library, either having a keyswitchable patch or different articulation patches all loaded within the same instance of Kontakt. This is okay, but it means I need to have separate MIDI tracks for the 7+ orchestral libraries I have, and for each separate instrument as well.
I also do not want to load every articulation patch for every library into a single instance of Kontakt - for obvious reasons like CPU usage, and the fact that I couldn’t fit them all into one instance anyway.

The main advantage for this is also workflow - being able to use a single MIDI track for all libraries saves a lot of time and makes editing way easier.

I’m trying to figure out a way to use expression maps to route the MIDI data to separate instrument channels, which all have patches for that articulation for each library loaded into that Kontakt instance. I would then route all instances via group tracks to create master ouputs of each instrument/section. This means I can quickly & easily disable/enable instrument tracks of any articualtions which I need or do not need, and will ultimately save an immense amount of CPU usage whilst also cutting down on project save times.

To my knowledge I haven’t found a way to do this natively in Cubase. If that’s not possible, are there any other methods/third party plugins/programs I could use to acheive this? I imagine there must be a way to intercept, convert and then send MIDI messages through multiple outputs, or something.

Any help would be appreciated!

Yeah there’s no mechanism in Expression Maps to do anything directly with routing - so basically the Channel number is what you’ve got.

I assume you are using the MIDI Sends on MIDI Tracks to route to your various Instrument Tracks. One possible approach might be to go ahead and route all the data to the Instrument Track(s) and then use its Input Transformer to filter out what you don’t want to go there.

This seems promising, I’ll give it a go - however, how can I route MIDI to more than 5 instrument tracks in total?

From what I understand, there is the main output for the channel, then up to 4 send tracks. Is there a workaround if I had say, 7 instrument tracks that all needed to receive the MIDI data?

I’m also not sure if I’m setting up the input filter correctly - for example, I’m trying to make this track only listen to channel 2. However it’s still receiving and playing MIDI data from all channels?

You can nest the MIDI Tracks to get more Sends. If you route a MIDI Track’s Sends to 4 additional MIDI Tracks then you’ll have 16 MIDI Sends available.

On the Transformer I’m not at Cubase to get the jargon correct, so…

But at the bottom you don’t want to Transform (i.e. modify) the Notes. You want to delete them. Also I think this will work on all MIDI Messages and not just Notes but also cc messages etc. - which may or may not be what you want. Look at the example Presets that came with Cubase to see how to select just Notes.

Hmm, there doesn’t seem to be a ‘delete’ option on the input transformer:

By default, the preset left it set to ‘transform’ too.

If I try putting the Transfomer on the track as a MIDI Insert, the delete option is there - and this is what I tried:

Still doesn’t seem to be fitlering out the other notes though. Notes on all channels are still being picked up.

And you could elaborate on the MIDI track nesting? I created a new MIDI track and tried to set the output of the ‘Violins I’ track to the new MIDI track, but it doesn’t show up in the list of outputs for either the main output or MIDI sends.

Sorry, wasn’t at Cubase - use “Filter” which filters out (aka deletes) the data. It sounds like you might be trying to do this on the source Track? But remember the Input Transformer works on what is coming into a Track and not what is leaving a Track. So it needs to go on each destination Track so it can filter out Notes going into them.

Also make sure to take care of the Tracks’ Channel setting. You probably want to set it to “Any” so it retains the Channel value for each Note. If you set it to a number like 1, then when it plays back the recorded MIDI data, all the Notes will be converted to Channel 1 on playback even if they were a different Channel to begin with.

Okay, so this is how I have everything set up currently:

‘Violins I’ MIDI track has MIDI sends set to the two instrument tracks I’m using. All is good there.

But when I apply the input filters on the instrument tracks, it seems to have no effect. For example, this is the input filter for the staccato instrument track, which would have notes being sent on channel 2 via expression maps on the main MIDI track:

It is still playing notes that are received on any channel other than channel 2. I can’t figure out what i’m missing here

Nevermind, got the input filter working!

You can nest the MIDI Tracks to get more Sends. If you route a MIDI Track’s Sends to 4 additional MIDI Tracks then you’ll have 16 MIDI Sends available.

Again, could you elaborate on this once more? I’ve tired it (expalined in a post above) and it doesn’t seem to work that way

It’s hard to tell what’s going on without seeing everything. I’d start by putting MIDI Monitor Inserts on all the Tracks so you can see what’s happening on each Track.

Looking at your pics I’d expect it not to play anything. The Track with the MIDI Part on it is set to Channel 1, so your Input Transformer should filter out all the Notes since none of them would be on Channel 2.

You might consider using some Virtual MIDI Cables, I find them easier to use and more flexible than Sends. I use loopMIDI on PC not sure whats available for Mac.

Great. For anyone reading this later what was it?

Folks will use a send on a MIDI Track to route to another MIDI Track converting that single Send into four. I don’t know much about the details as I always use Virtual Cables instead.

@raino For splitting/merging virtual MIDI, do you use Bome’s MIDI Translator?

No. But then I’ve never had a reason to want to merge or split the virtual cables. However now that you bring it up merging the virtual cables would let us build the virtual equivalent of additional All MIDI Inputs (e.g. Some More MIDI Inputs and 3rd Rate MIDI Inputs).

Great. For anyone reading this later what was it?

What I ended up doing was using the built-in IAC Driver in MacOS. One I had that set as the output for the main MIDI track, I could then set the input of as many tracks as I wanted to receive that as an input.
It seems that only then the input transformer was working correctly.
This also solves the issue of needing more than 4 MIDI sends.

I’ve been tinkering with a virutal MIDI cable (the IAC driver for MacOS). There’s a few drawbacks I’m encountering using this method, because Cubase treats it as an external MIDI device:

  • Adjusting the buffer size of my audio interface in Cubase directly changes the latency I encounter. I can compensate for this with the track delay paramater, but this needs to be changed anytime I change the buffer size. For example:
    When buffer size is set to 128ms, I have a track delay on the MIDI track set to -440 (this seems to be the amount of delay introduced by the IAC driver). However, if my CPU is starting to struggle and I need to increase the buffer size to say, 768ms, I now have to manually change all the MIDI track delay paramaters (to something like -485) on each MIDI track that is using a virtual MIDI cable, becuase an extra ~40ms has now been introduced by changing the buffer size to something higher.

  • When exporting the project audio, Cubase will not bounce external MIDI inputs in offline export, and it’s not working with realtime export either.
    That means I first have to print all the audio of the instruments (that are using the virtual MIDI cable) onto a separate audio track, and then export the whole project after.

Maybe these aren’t huge drawbacks to some, but having to play around with buffer size/track delay for everything is a pain. Especially if I want to quickly switch between recording MIDI with my controller (which requires a low latency/buffer size), to then having to change the buffer size to something higher for editing, if my project is large and my CPU is having a hard time.

Is there some solution to the buffer size/latency issue? Some way to automatically change track delay based on buffer size, or something? This could all be avoided if Cubase supported more than 4 MIDI sends, but I can’t seem to find the solution you are talking about with nesting MIDI track sends.