Filter annoying controller range



Any ideas on this?

I’m using Cantabile with my Jupiter 80. I want to use one of the spare foot pedal inputs to switch song states, but the trouble is that the JP-80 assumes that an expression pedal is going into these inputs, so it generates continous controller values over a fraction of a second:

   3  405985386 ch  1 Controller    12 =   0
   4  405986256 ch  1 Controller    12 =   8
   5  405986266 ch  1 Controller    12 =  27
   6  405986276 ch  1 Controller    12 =  46
   7  405986286 ch  1 Controller    12 =  83
   8  405986296 ch  1 Controller    12 = 102
   9  405986306 ch  1 Controller    12 = 121
  10  405986316 ch  1 Controller    12 = 127

This leads to inconsistent song state changes.

This isn’t the pedal - the sustain input works as expected, and I’ve tried this with more than one pedal. I can’t find a way to control this from the JP-80 (no surpise given the MIDI implementation).

I’ve also tried various controller filters on the midi input with no success. Any ideas? I suppose the ideal would be some way to ignore controller values that aren’t 0 or 127.



Hi John,

Sorry, The rack I posted isn’t what you want I think. I think this rack would be better.

Continuous to Momentary Switch.cantabileRack (482.4 KB)

You can do the specific job with some routes that have MIDI filters in them. This example is in a rack already.

The first route has the filters to produce the zero


and the second route would have this filter setup to produce the 127 value





Hi Dave, thanks for the help - you’ve pointed me in the right direction, and I’ve implemented this on the midi input filters (globally):


This just copies CC12 to CC14, but only for values 0 and 127. As both are copies the original CC12 event is still around - so the last step just deletes it.

BTW - this isn’t a dampler pedal (just a simple switch). The problem is the JP-80 (I have a love/hate thing going on with it).

Thanks again,


You should use a “Controller (Button)” binding on this pedal - such a binding only triggers once when the controller value crosses from <64 to >64.

See @brad’s user guides on Bindings.:

Controller (Button)
A momentary MIDI button that sends a value > 64 when pressed and < 64 when released. This kind of binding is edge-triggered in that it invokes the target when the value crosses from less that 64 to greater than 64.




Even better! thanks Torsten.


Hi Torsten,

I’m not sure this would work as it produces this output on testing, a stream of midi switch values as you press the pedal down. Here is the test binding

here is the output


Am I misunderstanding? Please explain if I am executing your suggestion incorrectly. It might be you found a bug as well!




It works the other way round - you need to use the Controller (Button) as the SOURCE and the program change as the destination:

This way, a program change is sent (once!) every time the controller (here CC11) crosses from below 64 to above 64. No need for any intermediary acrobatics with input filters and copying values between controllers.




Thanks Torsten for explaining!