Set a Ratio Limit to an incoming Midi CC

Hi all,

I was hoping there is a way that I can change the behavior of an incoming CC Value (CC11, Expression).

What I want to accomplish is, for say ever value of 1 it receives, it only allows 75% of that to actually happen. So if I send it a gradual crescendo or decrescendo, it will only move the value a portion of what I am actually sending it. So when modwheel is at full open (127), it will be at approximately 63 if I do a 50%, or at 91sh if a 75%.

Is this possible and anyone willing to please show me how?


Yes, using the Input Transformer
e.g. to scale CC11 to 75%…

Upper section…
Type Is___Equal___Controller___and
Value 1___Equal___11

Lower Section…
Value 2___Multiply by___ (Parameter 1) 0.7500

Function = “Transform”

Don’t forget to switch the current module On :wink:

1 Like

Sweet thank you! I will try that and let you know how it goes!

Hi Vic,

So here are my results. They worked perfectly as you gave them to me. Which only showed me that I didn’t give enough information to know my real requirements :slight_smile:. So now I will expand.

I load up an instrument track and load a Vienna Instruments Player (could be kontakt or anything else with CC Learn mode inside the actual VI Player). Inside the Vienna Instruments Player, I can “learn mode” assign controllers, just like in Kontakt and almost any other program made today. So what I have done is, inside of my VI Player, I have “learn mode” turned on “Modwheel” for both CC1 and CC11 (by clicking the expression slider and clicking learn, and then moving the modwheel which assigns it instantly to that controller). So when I move the modwheel, it moves both inside of the VI Player (Modulation and Expression), only equally (1:1 ratio).

I noticed when I just did a record test, it only records the CC1 value as the only thing I am moving is the modwheel which makes sense. Now what I need to achieve is, any data it sees coming in from CC1, to also write it to CC11 lane and apply your above transformer of 75%. Does that make sense?

With the above, I could just “unlearn the CC1 to CC11” inside my VI Player and instead, have Cubase simply duplicate the CC1 data to the CC11 lane but apply the 75% transformer. That way my VI Player would correctly playback the CC11 data without me doing anything inside the player itself (it would remain mapped to CC11).

I hope I didn’t confuse you :slight_smile: and I hope you can help!


Just reading though quickly, so maybe yes, a little confused :stuck_out_tongue:… but there’s still hope :wink:

So, in fact, what you are sending (or rather, wanting to send) to VSL, is CC #1 (the modwheel), and VSL is using CC#1 to control both modulation and expression?
And does VSL want to see the 75% scaling on both of these, or just for CC#11?
If the former, then all you have to do, in my example above, is change the 2nd line in the upper section to…
Value 1___Equal___1

So now it is the data from the incoming modwheel which will be scaled, before it reaches VSL. (and, have I got this right, that incoming CC#1 will control VSL’s CC# and CC#11?)
If, on the other hand, you want CC#11 scaled to 75%, but CC#1 scaled 1:1, then it’s a bit more complicated. In fact, you’l have to record-enable two MIDI tracks…
The first MIDI track will be perfectly normal… it will transmit everything you send into it, unmodified (including CC#1)

The 2nd MIDI track will handle only CC#11… (and you’ll need to change your MIDI Learn, so that VSL now expects to see CC#11 for expression, rather than sharing CC#1)
This 2nd MIDI track will use the Input Transformer, and will use two of its modules…(it will filter out everything that isn’t the incoming CC#1, which it will then convert into CC#11 and scale it 75%)

Upper Section (you will be leaving the lower section empty)…
Type Is___Unequal___Controller___or (N.B. “or”, not “and” :wink: )
Value 1___Unequal___1

Function = “Filter”

Module #2…
Upper Section…
Type Is___Equal___Controller___and
Value 1___Equal___1

Lower Section…
Value 1___Set to fixed value___11
Value 2___Multiply by___0.7500

Function = “Transform”