Automate a MIDI Port Change?

I am brand new to Cubase, but have been using Steinberg’s Dorico for a couple of years. One thing I find handy in Dorico is the ability for one track (or stave) to access multiple VST’s. In Dorico’s case it involves switching “layers” [edit: they are actually called “voices”] and assigning each layer [voice] a different VST. I am wondering if something similar is possible in Cubase.

A little explanation of my system: I host Kontakt Instruments in Vienna Ensemble Pro which is accessed from a Cubase VST Rack with multiple midi ports. If possible I would like one midi track to, for example, switch between Spitfire Symphonic Strings and Chamber Strings so I don’t need to split out the material over multiple tracks. (Symphonic and Chamber are on different midi ports.)

At first I thought maybe I could automate a midi port switch, but I would also want the track to potentially switch expression maps (and probably some other track-specific stuff I haven’t thought of yet…)

Any suggestions on how to accomplish this?
Could I automate BOTH midi port and expression map changes?
Or maybe there is some kind of region alias hack that’s available?
Thanks for your thoughts.

I don’t have an answer for you, but I know of someone who very likely can answer you. His name is Tormod and he runs a channel called Sifter Studios. He’s a media composer/film scorer and Cubase guru.
Here’s an invite to his Discord https://discord.gg/c2FY5P3
Here’s his YouTube channel
https://www.youtube.com/channel/UC0mPb-lPz99BX-APxOrOakw

1 Like

Did a little digging and maybe this will accomplish what you want:
https://steinberg.help/cubase_ai/v10/en/cubase_nuendo/topics/using_midi_devices/midi_devices_using_program_change_and_bank_select_about_c.html

1 Like

I suppose if I could link the Program Change lane to Vienna Ensemble Pro’s Ports then this would work (w/o the Expression map change, of course.) I can’t think of a way to accomplish that, but I’ll mull it over.

Is there a way to create custom Controller lanes that go beyond the usual MIDI CC list?

Approaching it from the other way… Could I assign my Cubase track midi port and expression maps as values in an undefined MIDI CC channel?

It’s almost like I want to have multiple midi tracks as a kind of “Articulations/Dynamics” controller lane.

It’s all fascinating…

Came across this discussion at KVR on this topic:

This analogous (sort of) to using MIDI track Sends. Once you familiarize yourself with that, you’ll have to finesse a way to stop midi data going to port 1 while sending to port 2. There are a few ways to do this, depending on the use case.

Ok I’ll look into this. Sounds like it will work. If I can get it to be as elegant as the Articulations/Dynamics lane I’ll be a happy camper.

That’ll be the challenge, off the top of my head I’d suggest trying to create one big expression map that has all the things you need, while making sure messages meant for one port don’t do anything on the other port.

Channels might be a way to go… I have a feeling this discussion is not yet over. :wink: :smiley:

You could put the note(s) for the alternate port in the score track and mute them, while having a copy of it living on a different track pointing to the correct VST. At first it might seem like a lot of extra work, but once you get going it shouldn’t be all that hard. A few mouse/key strokes to copy it to the other track, then mute the ones in the main score track.

Alternatively, assign the different instruments a unique MIDI channel. Just clone the score track and filter or delete the stuff that should not play. Don’t even connect the Score track(s) to any instrument. In short…you’d keep EVERYTHING in the score track, but not really use that for ‘play-back’. For playback, you’d have dedicated MIDI or Instrument Tracks for each endpoint instrument.

If you happen to have something like Bidule, you could host the plugins in that, and make events such as key-switches/program changes/whatever, to reroute MIDI events to the proper VST plugins.

If you have Cubase Pro, or Nuendo, it might be possible to use AUX MIDI sends (MIDI tracks only, as Instrument tracks don’t have these AUX sends) in combination with MIDI transformers to reroute MIDI events according to channel number. Or rather, have filters set up post-track to FILTER events on the wrong MIDI channel.

It might be possible to make a generic controller for Cubase that can toggle the active MIDI output for a track in real time. To make that work, you’d need to use a virtual MIDI port and route things through a special MIDI track that uses that Virtual MIDI port, routed into the Cubase Generic Remote controller to automate things in Cubase that doesn’t have native automation tracks.

P.S.

Back to a Virtual MIDI Port option that’s far simpler. Why didn’t I mention this before?

I’m on a Windows PC, and personally I like and use loopMIDI. I also have Cubase Pro, which has MIDI transformer inserts available where MIDI events can be filtered or transformed on the fly…pre-or-post track.

Here’s how it works:
In your score track…be sure to use different channel numbers for each VSTi you wish to have involved. Set the output of this score track to your Virtual MIDI port.

Next, make MIDI or Instrument tracks for each VSTi involved, and point each of those to the respective VSTi or MIDI port. The INPUT of these tracks will be your virtual MIDI port. You won’t actually put any data in these tracks. You’ll just be using the MIDI transformers to filter out the data from MIDI channels that don’t belong before sending it on to the plugin for playback.

If you want to use the same controller for all of the channels, be sure to let the CCs pass through the filters.

This seems like the way to go. The inspector makes this a great solution since I can quickly unhide staves to divy out the playback material - and hide them again keeping my track count down while I work. I’ll try it.

I’m also still intrigued by the possibilities of midi sends.

I’ll try to make a simple project to demonstrate the concept for you.

At this point I’m thinking…forget the AUX Sends, and just use a virtual port to dump the stave into several tracks at once (no data in them, just using them for routing purposes). Transformers can filter out anything not on the proper channel(s).

I am using Spitfire’s UACC protocol which requires all the instruments within an instance of (in this case) Kontakt to be in OMNI mode. I believe, however, that I could assign each port to receive on a different midi channel. VE Pro recommends you keep them set to receive on “all.”

Would the midi transformer be able to filter among multiple ports if each one had it’s own midi channel?

I think so. In this case, don’t host Spitfire in any instrument track. Instead host it in rack mode.

If the UACC thing doesn’t work over a virtual MIDI port for some reason, can you not just use multiple 16 channel instances in the Rack instead of a single 64+ channel instance?

Interesting, ok. I’ll have to revisit this later, but I’ll give it a try.

I’m not yet sure what exactly a “score track” is. Is that a Cubase thing? Or do you just mean the master midi track where all of my material is?

Yes, I mean whichever tracks you have touched with the Score Editor, and intend to keep quantized and such so it looks good on paper.

Of course when getting to a more advanced mock-up it’s pretty typical to clone those later, mute/hide them unless you’re editing the look of the score, and off on other tracks get more ‘musical’ with groves, timing, extra expression data, maybe evening doubling things for the sake of a computerized score that you would not do in the real world on a real stage with real musicians, etc.

Here’s a project that demonstrates using a Virtual Port to route back into tracks where they can be directed into different VSTi plugins.
RoutingDemo.zip (533.2 KB)

It’s not a fancy mix or anything. I just threw it together real quickly using the SE Basic sounds that ship with all versions of Cubase/Nuendo/Dorico to show the routing trick, so a thousand pardons that the arrangement/mix/etc. isn’t all that great. Also a warning…the dynamic range is pretty big, it starts quite soft but DOES get quite a bit louder so be careful on the volume!

Sorry, I don’t have a UACC plugin that I know of (HALion 6 can do way more than 16 channels, but not sure if it uses UACC or something else to achieve this), and I’ll have to look up the protocol to see how that works. Meanwhile, I’d just double up on 16 channel instances of plugins if you’re building a multi-timberal setup that needs more than 16 channels.

In this case here’s what I’ve done:

  1. I’m using loopMIDI with a virtual port that I’ve named loop1.

  2. I’ve imported a SMF of a ballet and modded it a bit for this demo. No, I haven’t made a score layout for it, sorry. Just showing a method to reroute things if you ever do find yourself needing to bounce off to a different PLUGIN from a single score track.

  3. I set up 3 instances of HALion SE. One holds the winds and piano sounds. A second holds the arco strings. A third holds pizzicato strings. The string tracks will do some bouncing between two different plugins (HALion SE instances) for arco and pizzicato transitions.

  4. I routed the winds and piano directly to the first instance since there will be no plugin bouncing for any of those tracks. The string sections are all routed so their outputs connect to the virtual port loop1. Notice how I’ve got the string tracks set to channel ‘any’. Vln 1 arco uses channel 1. Vln 1 pizz uses channel 2. Vln 2 arco uses channel 3. Vln 3 pizz uses channel 4. And so on…

  5. I made 10 empty MIDI tracks and set their inputs to my virtual port loop1. Each one has a MIDI Transformer in the track inspector’s “MIDI Inserts” panel, where I simply have the transformer ‘delete’ everything coming in that is not on the channel that track is supposed to be listening for. The output endpoints go to the respective plugin, and I set the exact channel for the router track to it should be sending to trigger the sound I want in the plugin.

Note, there are a LOT of potential ways to do this depending on the complexity of your score and staves. You could use more than one virtual port and more instances if that makes things easier. You can use fewer router tracks with more complicated logic in the transformer insert, or spread it all out using lots of tracks and lots of virtual ports. (On reason I like loopMIDI so much, is because it’s easy to add/remove more ports to the driver at will, and name them anything you like)

The main point here is that in using a Virtual MIDI port you can loop things back into tracks and reroute them. So, it’s not hard to make a folder that serves as a sort of MIDI Patch Bay, where you can use a combination of Transformer Inserts, and toggling the monitor/record buttons.

Note, it’s also possible to assign a virtual port as the input for a generic remote map and automate almost every thing in Cubase via MIDI track(s)! It comes in handy if you want to use a MIDI track to fudge an automation lane for things that Cubase doesn’t have lanes for. I.E. Muting/soloing tracks and/or plugins. Toggling the record/monitor status of tracks on/off. Launch a macro via MIDI event from a MIDI track. Move loop points around. Use the MIDI LFO insert to build a curve in real time to pump some VST control. All sorts of things. Can also run your favorite MIDI controller through such tracks>generic remote and record every DAW remote controller movement you make in real time (take advantage of introspective MIDI recording, set the DAW looping and do different takes on each loop stored in MIDI tracks, etc.). I’ve even used the method to emulate organ stops/ranks on a track-by-track basis using an MPC controller.

1 Like

Wow, thanks for putting this together. I think I understand the concept. Some version of this should work in my setup. I am on Mac so I would need a substitute for loopMIDI (Bidule?).

There are a couple of things that are fundamentally different in my setup. All of my instances of Kontakt are hosted within an instance of Vienna Ensemble Pro. Therefore, all of the re-routing is among various midi ports within one VST Rack.

I don’t think the UACC protocol is relevant here since I’m not asking Cubase to re-route any of my instruments within a Kontakt instance.

The screen shot shows my list of Rack outputs. Each one represents an instance of Kontakt. In a normal set up I would have a different midi track for each instance/output. What I am looking for is a master midi track for Violin 1 - which could switch between Symphonic (sym), chamber (cha), and Solo (solo). (The reason I have multiple chamber and solo tracks is so that I can have a 3-way divisi with legato patches, which are not polyphonic). I would make similar master midi tracks for Violin 2, Viola, and on down.

Something like you describe here would be wonderful. I could have a lane similar to “Articulation/Dynamics” that could switch between Kontakt instances. Ideally I could name them Symphonic, Chamber, and Solo.

I need to do some research on Virtual Ports and Transformers to fully grasp how this works. Thanks again for your help!

PS…Here is some info on UACC if you’re interested:

If you use Bidule, then you don’t have to go to all this trouble.

The full/paid version of Bidule can run as plugin itself (plugin types supported besides just VST/VSTi…can even mix and match them in the same instance), and then you’d host plugins in this ‘host within a host’. You’d make little ‘control bidules’ to control the routing of MIDI and Audio inside (using key switches, program changes, cc events, or whatever MIDI or VST event(s) you like), and draw little wires to plug it all up. It has a variety of control bidules to control the flow of incoming MIDI events such as gates, switchers, matrixes and list builders, as well as transformer bidules for when you need to transform things on the fly. If one prefers, it’s also possible to control things routing/mixing straight from VST automation lanes instead of using MIDI events.

Alternatively, you can hook it up to a DAW using REWIRE instead of running it as a plugin. Or, run it stand alone, and use real patch cables, virtual ports, and/or networking bridges to connect it to anything in your studio. (These methods are not as flexible in terms of linking controls directly to VST lanes in a DAW). This rewire setup can also come in handy if you need to bridge 32bit plugins into a 64bit only environment, or vice/verse.

The free Demo of Bidule doesn’t come as a plugin, but it should work as a REWIRE slave. The registered variant allows you to grab plugin versions too (several, not just VST).

There’s much more to Bidule. The interface itself is simple and kind of ugly, but it’s extraordinarily useful for building a huge universal soundset for ALL of your DAWS in one place. Really nice diagnostic and stream/event status tools (for event streams AND the actual audio streams). Transform/echo/filter MIDI and audio events in real time. Has stacks of basic audio mixing matrixes to choose from and cobble together into more complex mixing consoles. It can also be an OSC server/client, provides an interesting list of native MIDI event generators (ARPS and such), can record/host/trigger samples/audio tracks. And more. It’s a big swiss army knife of a host on its own, and quite an enhancement for any DAW (fills in huge missing feature gaps). You’re not limited to controlling your control bidules with MIDI events…as you can also create VST controls that your DAW can see and manipulate with its native VST/VSTi controller lanes. OSC is an option for controlling things as well.

It’s also pretty cool as a central sound server on its own for people who like using the same plugin setup with more than one DAW and/or Notation package. Really helpful for cases like having a well balanced/staged orchestra spread across multiple plugins/libraries all tweaked out and ready to go, no matter what DAW you fire up to make scores and mockups with.

Here’s a link on virtual ports for Mac. Seems like the OS has it built in?
Virtual MIDI on Mac