Differences between MIDI CC, NRPN and Host Automation

I thought I would post this in the Cubase forum, as it would seem to be related more to music, so I am wondering which to use.

I am trying to automate a plug-in, called Trilian, which I believe is the best sounding bass module in existence however I am not sure which protocol to use.

I believe MIDI CC’s, offer the least resolution, however, does Host Automation offer finer-grained control or greater resolution that NRPN, and do all plug-in’s support either, both or all three?

I ask, since I currently use the plug-in, as a multi-timbral instance but I am leaning towards using Instrument Tracks, since that seems to be where the future lies in terms of technology but as far as I am aware, Instrument Tracks only offer a single stereo output, which is fine but if they offered more complex routing, then I would definitely use a multi-timbral instance instead.

I look forward to any replies.

Cheers Cubasers (and Nuendoites)!

Nah, that’s not the case. Multi-outs are not a problem.

Thank you, I wrote Trilian :grinning_face: .

There’s a fair bit of overlap between MIDI CC and host automation, but you’re right, automation provides greater resolution than typical MIDI CC. MIDI CC has the advantage that it’s easier to do remote control when playing live. Another key difference is the difference in features you find between automation and MIDI editors in Cubase.

Regarding instrument tracks, it generally works better to use Trilian in an instrument track. You can use it multiimbrally when it’s on an instrument track. For example, if you want to create a second midi track to trigger a second part on Trilian which goes to a distinct output, simply click on the multi-out button in the Cubase inspector to enable that second audio channel.

Well done.
So, any NRPN support? :grin:

A single Midi CC offers a 7 bit resolution (128 discrete values).
VST automation offers 32 bit float resolution, that’s millions of values.
NRPN is simply a bunch of Midi CCs put together. They offer 14 bit resolution (16384 values). They were unpopular in the times when midi was transmitted via DIN Sync as they clogged the midi port. I think they have not really recovered from losing the popularity contest back then.

Edit: All VST plugins support VST automation, passively. Ie. they don’t take care of automation, the host does.
Some plugins support Midi CC but it is up to the individual developer if they integrate such a support.
Hardly any plugin supports NRPNs, mostly due to a lack of necessity. They would only be useful if the plugin wants to support more than 128 CCs. When it comes to value resolution, as GlennO suggests below, many plugins are internally smoothing out the steps created by a 7 bit resolution.

That’s right. I would also add that 14 bit CC doesn’t necessarily require the use of NRPN.

First, the OP needs to clarify under what circumstances he needs the higher resolution. Is it playing live from a midi controller, or is when editing midi in Cubase? If it’s the former, does he even have a controller capable of transmitting 14 bit CC? Also, for certain key parameters, Omnisphere and Trilian apply smoothing, allowing you to get the benefit of higher resolution even when using MIDI.

Hi,

It seems from the information in this thread, that Host Automation is ideal (I am not performing live) for use in a DAW, and I don’t use a physical controller for any VSTi’s (only programming).

I have been using MIDI CC’s, and the plug-in, in a multi-timbral manner since I was under the impression that this may reduce the memory footprint, but as of now RAM isn’t so much of an issue.

I am trying to move Modulation and Expression CC information, from MIDI Tracks to Instrument Tracks so I have had to expose Host Automation parameters in Trilian to the DAW, but I am not sure as to their equivalents, i.e., what is the equivalent protocol for CC01, in Host Automation since Expression appears with an ID prior, e.g., 1Expression.

All in all, I love the sound Trilian makes, and with so many libraries out there that I have tried, I cannot believe how pale in comparison they actually are, that is, at the lower register, the sounds of Trilian are full-bodied, whereas in others, the sound is very thin. I use Avantone, so hearing this difference, I can’t wait to get on bigger monitors, after updating my computer.

Cheers

Give them all a try and see what better fits your work flow.

VST automation affords high controller resolution, and it tends to track nice if you want to use physical buttons, faders, and knobs to ‘play’ sounds in real time.

Whatever you’re using…you’re never ‘stuck’. You can always change on the fly for what works best and makes sense for the task at hand.

Cubase makes it really easy to convert automation lanes to CC lanes within MIDI parts, and or Note Expression. In this case you establish the range with the loop start/end indicators, set up an empty track, solo whatever track(s) you want to convert, and use some of the options of the “Merge MIDI in Loop” function. Your newly rendered track can have the VST Automation Tracks/Lanes converted into CCs on the new track (non destructive to the originals).

You can also do it the other way around (even easier). Extract MIDI CC from parts to VST automation lanes. In the main MIDI menu, you should find options to extract CC to Automation lanes. There are also functions in there to convert between CC and Note Expression.

With an open mind and an awareness of the power of tracks and track-lanes, it’s good to know you can easily ‘extract’ and ‘merge’ pretty much anything you like from one place and format to another in Cubase. Use this powerful flexibility liberally, and you can keep up with every change, test and compare it before you commit. It just takes a little time and practice coming up with your personal workflow.

In short, the good news is you can experiment and go with what fits your ears and workflow the best :slight_smile: It only takes seconds to clone a copy of your track(s) and convert them to whatever you need with your new ‘clone’ (your original track is left alone in case you screw up), try things, and if you decide not to commit to the experiment go back to your original version of the track and try something else.

In most cases I doubt you can ‘hear’ much difference. If you had science lab grade scopes and stuff to analyze the output you might ‘see’ it on the scopes (the resolution difference in changes to a parameter), but the average human isn’t going to hear it up front. There might be some exceptions depending upon the plugin and what exactly you’re modulating where ‘any’ human with average or better hearing doing an A/B comparison could tell it’s different, but I think that would be more of an exception than the rule. It’d need to be something exposed and sitting in a sweet spot of acute awareness for human ears and hearing psycology.

Personally I go with CCs living in the MIDI parts when composing, simply because it’s all there in one editor, and i can take advantage of the MIDI Logical Editors and such. Logical Editors truly come in handy! I use those to make quick work of things that’d take all freaking day to slice up and sort out in Automation lanes (I wish they’d have the Boolean style logical editors for the Automation Lanes too…maybe someday). It’s also possible to emulate more complex ‘scripting like’ routines by using macros to combine the fruits of multiple Logical Editor results.

Some examples of things you can do in the MIDI editors…
In a few clicks…add at the same MIDI tick as the start of each note a CC11 (Expression Volume, or Volume 2 [scales with the main Volume]) that matches note number/pitch for all selected events (expression volume gets louder as notes go higher, and softer as notes go lower). Then run another pass to scale it all up or down 10%, then another pass to ‘invert’ the CCs so it gets softer as notes go higher, and louder as notes go lower, then a final pass to accent beat 1 of every measure with a velocity increase of 5%.

Also with MIDI Logical Editors…
Since there’s no way to insert autonomous events out of thin air (a track needs at least one event in place to convince it to insert new events of any kind), I do keep a pile of template tracks with various known notes/intervals/rhythmic-patterns and CCs in strategic places to use as a ‘guide’ for building standard but complicated sorts of controller patterns, curves, and so forth. I can quickly generate patterns using these templates, extract them, and then apply them to MIDI parts or Automation lanes. I make such reference tracks part of my templates (hidden tracks until needed, that aren’t connected to any input source nor output instruments/ports…just reference material for logic editors to borrow from when needed).

Using a combination of macros, project, and midi logical editors, you can devise a lot of quick solutions to do complicated things with just a key combo or a few clicks.

At this time, we don’t get that kind of ‘scripting like’ power when working directly with VST Automation Tracks. While the Automation lane features make sense in a ‘brain to hands to results’ way of thinking (using physical faders and knobs in real time), sometimes it’s nice to be able to save all that time and rough in general shapes with a ‘script’ of some sort, then ‘fine tune’ it by hand afterward.

You get the idea…Logical Editors can be very powerful, and save tons of time. In contrast, reading and writing to Automation lanes make more sense if you have nice physical controllers hooked up and want to do this kind of stuff ‘by feel’, and ‘play in the mix’.

If I wish to use physical buttons, faders and pots when it comes time to mix things down (main volume and pan), then I’m more likely to convert at least some of the CCs to automation lanes (Will do as I go).

If it’s a project where I’ll constantly be cutting and pasting passages/phrases to reuse elsewhere in the composition, doing lots of post composition quantizing, and/or stretching/shrinking phrases to hit specific cues on the timeline, I’ll convert automation and CCs to NE at appropriate times (Expressive parameter changes get bound to individual notes in special VST3 containers). When making MIDI loops (might be used at any tempo in the future, prone to being stretched, shrunk, re-quantized, etc) I like to make my last steps converting as much as possible to NE before stashing the loop in the tool box.

Why NE (Note Expression)? If you have a bunch of events floating on CC controller or VST automation lane(s) they’re still bound to specific clock ticks, and aren’t linked in any way to the ‘notes’ they go with. If you change something about the notes themselves, say a slight timing shift, changing the note length, whatever; then, the changes to the notes are independent of the controller data that goes with the notes. That means you might need to also go make adjustments to the automation/cc lanes AGAIN to go along with your edits to the notes.

If you zip it all together as NE, it sticks to the notes and can be stretched, shrunk moved, copied, pasted, sliced, glued, etc, along with the notes themselves. In the case of changing note lengths your expression data should automatically ‘scale’ with the note length. I.E. Say you have a passage with sforzando and crescendo effects using CC11. If that expressive data is in NE format…and you cut those notes and use them elsewhere, the controller data goes with them. Otherwise, you’d have to remember to go back and copy/paste that controller data in other steps.

Note, you CAN bind the common channel CCs (they effect every note sounding on the channel together) as NE directly to the notes (rather than floating independently on the controller lane), and in Cubase it’ll still work with instruments that are not truly NE compliant (It simply sends MIDI CCs), and only accept the traditional ‘channel’ controllers.

Cubase can still send regular CCs bound up in the VST3 NE note container. Instruments interpret it as regular channel CCs. In cases where multiple notes have overlapping or potentially conflicting channel based events bound to them as NE, you get options on how Cubase will prioritize and transform such conflicts into something sensible for channel CCs (average the results, or choose from some other priority options).

Some of the more modern plugins can have expressive controls truly independent on a note by note basis (I.E. Two notes living on the same channel, one could bend up while another bends down at the same time). In short, a NE compliant instrument can have a slate of real time VST parameters registered for every single individual sounding note. With full HALion I believe a user can define up to 8 NE parameters per instrument slot. With Sonic some of the instruments have some NE stuff predefined (and many do not), but I don’t think a user can just go in and add NE stuff to the mod matrix like a full HALion user can.

It’s also my understanding that if a non NE instrument gets special VST3 instructions to manipulate a parameter it doesn’t understand when a note with NE extended info plays, it simply ignores the extended bits while still playing the stuff it does understand, so no harm done.

So, check your plugins to see if they support Note Expression (NE, under the hood, is just another way of embedding links to a specific VST parameter, or to bundle up CC events in a way they are attached to an individual note). Many of them at least have ‘partial’ support for NE these days (the main parameters for Master Volume, Pan, Volume 2, tune or pitch-bend). Since loads of plugins still support ‘libraries and instruments’ going back decades, it’ll be common to find that some things for the plug in support NE, while some do not. It’s worth looking into it :slight_smile:

Again, you can bind regular CCs to notes as NE, and those should work with any plugin that accepts channel CCs. The extra NE goodies are simply very nice to use when you know an instrument supports it. In effect, full NE support is like getting another layer of real time parameters for each individual note in addition to the channel-wide parameters.

I was pretty careful to only allocate resources in Omnisphere and Trilian for a part when you actually start using it so there’s very little in the way of a memory penalty for using it monotimbrally. Further, resources like graphics are shared across instances, so it’s almost always better to use Omnisphere and Trilian monotimbrally in an instrument track. That goes for most virtual instruments these days.

That’s right, you’ll have to enable the desired Omnisphere/Trilian parameters and route the automation data to that. Then you can move the CC data that has been converted to automation to that lane. It should be fairly obvious which parameter is which, although expression is a special case since there is no exposed parameter in Trilian for that. The amp parameter should work as a replacement for expression though.

Thanks for the kind words. We put a lot of effort into Trilian.

Yes, it supports polyphony for the common mod targets where it makes sense.

I’ll be a bit out of topic, but could you please shed some light as to why the route of manually exposing parameters was taken? I recall when I first got the trilogy Omni+Keyscape+Trillian, I was a bit surprised.Not a big deal to right click and expose params, but it still something that puzzles me a bit.

It’s simply a matter of scale. Consider the task of the OP when he opens the automation parameter menu to select a parameter. Omnisphere has many thousands of parameters. If they were all exposed, he’d never be able to navigate the menu to choose one. The problem is even more acute in other DAWs. By exposing only the parameters that the user wants to automate, that task becomes manageable.

Yes, that’s what I thought. However, I’ll provide an example that gives me trouble. I have a midi remote setup, where I read the params exposed, and then let users remap to the controller. In Cubase this would sound a bit unnecessary since there is already the remote control editor. But there are some reasons we occasionally want to override this RCE and build our own mapping. Then, I do have my own mappings for these three plugins, but obviously they cannot be directly used by the users, not until they do expose the params. But anyway, your answer covered me, not a really big deal :slight_smile:

If you’re setting up your own mappings, that should work, as long as you provide a corresponding Omnisphere ML and Automation template. The user loads that template and the assignments will match what you expect.

Nope, my approach tries to stay as “universal” as possible, and there are specific reasons out of the context of this thread, so I won’t go on with clarifications respecting the original thread. Thank you very much for trying to assist though!

I doubt many ‘VST Plugins’ rely on RPN/NRPN these days aside from perhaps some rare ‘really complete’ software emulations of old gear that accepted them.

Some multi timbrel plugins designed to play back GM SFM files/songs will still listen for the General MIDI RPN events and respond to them. If you have a stash of good ole GM files from yesteryear…there are a few RPN events that are critical. This is how to set the key and time signature, set the pitch bend ranges for each channel, do the master tuning, and I forget what else.

I.E. In HALion there is an ‘option’ to accept RPN 1 and 2 events and respond to them (over-rides whatever might be showing in your HALion GUI for a given instrument slot). In Sonic, if you put it in GM Mode, it’ll accept them. These RPNs have nothing to do with resolution needs though.

Most plugins these days ignore RPN, MTS (SYSEX events to build custom tuned ‘scales’), and other things that were critical to get a SMF GM file to play back as intended. You end up needing to ‘manually’ adjust things in the plugin to get it sounding as intended. Oh well…

I think the GM people decided to put these behind ‘three needed sets of events’ in order to protect them from ‘accidental’ meddling with them. I.E. The first MSB and LSB RPN events define and unlock a specific address. Then you use a ‘data’ event to change the unlocked address, then a third MSB/LSB RPN set of events to ‘lock’ the address again.

Hardware kit still uses them a good bit. I.E. Yamaha instruments to this day have loads of options to set up the effect units and tweak out drum kits and such such via NRPN. Again, it’s not so much for resolution, but to have a little fire wall in place so they don’t ‘accidentally’ get manipulated. Of course can do it VIA SYSEX too.

NRPN stuff for extended resolution…
Some instruments used it for stuff like building cross fades with extended resolution, using stuff like 4 pole joystick style controllers, having a second pitch bend (center position = null, with full 128 position resolution in both directions…up and down), etc. I think with some hardware it was also possible to unlock multiple NRPN addresses, then use the Data CC to manipulate ‘all of the unlocked addresses’ in unison.

I think it’d be extremely rare that a VST Plugin would rely on NRPNs for extended controls. It’d be really old VST1 and 2 plugins if you found one. Since VST2, and you could opt for something like a QC in Cubase linked directly to the VST parameter instead. Easy Peasy.

Cubase can still set up, manage, and automate devices that need RPN and NRPN, but it’s pretty convoluted and ‘legacy’ to set it up. It’s of primary interest for ‘external gear’ connected to a MIDI port.

One way is through device panels. With these you can build a GUI with controls to send all sorts of MIDI events. This includes SYSEX, RPN, and NRPN.

Whenever you build a control with the device panel API, it gets registered as a VST Parameter in the Host with automation lanes. When the VST parameter gets manipulated, the relevant MIDI events get sent.

Example:
A small panel I made for my Fantom to get easy access at some common SYSEX stuff.

It’s possible to create a device panel for a VST plugin, but it’s very crippled as compared to an actual MIDI device…not even sure if there’s a way to save the panel aside from stashing it as part of a project template or something?

It is possible to use virtual MIDI ports to build panels and then route the results back into any MIDI or Instrument track in Cubase (A Hack if you still have ‘plugins’ that needs SYSEX or RPN/NRPN stuff. It’s probably gonna be an old plugin, probably 32bit, that you have to bridge in somehow to even dare try it!

Some other possible ways to handle and automate RPN/NRPN stuff in Nuendo world might be via the MIDI Remote API (Custom Scripts), the Legacy Generic Remote system, or through the Mackie Control API. Depending on what you’re trying to do, you might need some virtual MIDI ports in the mix to get such results looped back into a MIDI track where you can forward it to the proper instrument(s)/device(s).

Just to clarify, this operation doesn’t turn the MIDI CC into VST Automation. It is still MIDI CC but presented on automation lanes in the Project Window.

Right, but as I mentioned above, that’s only the first step. Next, you copy that automation data to an automation lane on the Trilian instrument track. At that point, it is proper automation.

Ah, but it’s very easy to right click and ‘select all events’ on the Project View CC Automation Tracks, ctrl-X to cut, then Ctrl-v to paste to a VST automation lane instead. (Lane “Read” must be active during the copy/cut from the source lane).

Here I copied and pasted instead of cut and paste (From CC1 after extracting from the MIDI part, then pasted to QC1 in HALion), but it works either way…

What’s going on here, is there are different clip boards for the different editors. So, you can extract things from your MIDI Key Editor lanes to get them into the Project clipboard and copy or move them about.

Why bother? Again, for me it’s access to the MIDI Logic Editors. That’s the #1 reason I find my self moving these things around like this. I can do some serious batch edits in a few clicks over in the MIDI editor that’d take hours of bat crazy manual mouse work in Project View.