Another attempt at controller smoothing

Hi all,

in my never-ending quest for the ultimate controller smoothing ReaJS script, here is a new attempt.


I built CC smoothing on a new approach: whenever a relevant CC command hits the script, it will be evaluated as follows:

  • if the time elapsed since the last CC command received is outside the “fast window”, the script will create a smooth fade to the target value. This fade will last the preset “fade time” (in quarter notes)
  • if a CC is within the “fast window” since the last received command, the script will create a fast ramp (a new CC value every millisecond) towards the target value
  • if the difference between the received CC value and the previous one is smaller than the “instant window”, the script will not ramp at all but jump directly to the target value. This is only true for any CC received within the “fast fade window”.

I put this script on the MIDI route between the expression pedal and my organ - or between a fader and a rack volume. The “fast window” and the “instant window” make it very responsive to pedal or fader moves, but changes made via state change bindings when no pedal is used will be faded in smoothly.

One nice aspect: When you have a value pre-set at e.g. 64 during song initialization via a binding and then later touch your expression pedal (which is unfortunately still at 127 from the last song), the script will start with a slow fade (outside fast window) from 64 to 127, but on the next CC received from the pedal from your pedal move (typically you’ll generate a fast sequence of CCs with a pedal move), it will switch right into “fast fade” mode, so it will catch on very quickly when you need it to. But no ugly jumps…

Give it a try!

Play with the “instant window” for responsiveness and use the the “fast fade window” to adjust the time it takes the for the script to go back to “slow fade” (1.8 KB)




Hi, I have been looking for this functionality for pitch bending. Will this also work for pitch bend instead of CC ? Can you consider making it work for Cantabile as a midi VST plugin ? Thank you so much.

Hi there - I’ve knocked together a version for pitch bend. Values need to be a bit different, since PB message are 14 bit instead of 7, but give it a try! (1.3 KB)

This is a script for ReaJS - one of the free Reaper Plugins. ReaJS is a VST plugin, which provides both MIDI and audio ports, so you can use it as a MIDI VST plugin - that’s the idea!

You’ll have to install ReaJS, then put this script into the ReaJS script directory (sub-folder “Midi”) - see this post on how to find the script directory:

Now you can load the script into ReaJS.



@all: sorry, found a bug in the original CC autosmoother script. Here is an updated version: (1.8 KB)



1 Like

Thank you so much. This is really great! I didn’t know RealJS can work at Cantabile. I use Cantabile for midi control and Reaper for audio playing and recording simutaneously. Best,

I tried this and it works very well in my setting. I am an EWI player and this script opens several interesting expression opportunities with EWI playing. Thank you again. One more thing, though, that I wish to do is to make pitch bending from this script faster than what it can set as minimum value. I feel this is perfect for portamento but too smooth/slow in fast songs. Can you please consider making this revision ? Many thanks. Best, Min

Hey Min,

have you tried increasing the “instant window” value and possibly the “fade steps” value? Doing this should make any direct pitch bends pretty much instant. Or do you mean you want a smaller value than one quarter for the “fade time” parameter?



Hi, Torsten. Thanks for quick reply. I found that it works well as you described on midi keyboard pitch bend. Only delay happens when EWI is a midi controller. It is like some latency. I guess this is something to do with EWI pitch bend, not with your script. I will look into more later. Your script is certainly a great midi tool - this is why I have been using the cantabile for years. Many thanks again. Min