Binding Jump Prevention and Rotary Encoders support

Hey All,

I’m looking into adding support for binding catchup/takeover/jump preventation and while I’m at it I might add support for rotary encoders.

First off, which name do you like best:

  • Jump Prevention (my preference)
  • Catch Up
  • Take Over
  • Something else?

Second, there’s a few different ways rotary encoders send MIDI data. I think I’ve got a device here somewhere with a rotary encoder, but I’d like a few more samples.

So, if you have a device with a rotary encoder, I’d be interested in a recording of it as follows: (Timing and angles don’t need to be precise)

[EDIT: To be clear - I’m after recordings of endless rotary encoders, not just a standard knob control].

  1. Setup Cantabile’s recorder to record the port that the device is attached to.
  2. Play a note (just as a waypoint)
  3. Slowly rotate the encoder right 180deg (over about 3 seconds)
  4. Play another note
  5. Slowly rotate the encoder left 180deg (3 seconds again)
  6. Play a note
  7. Quickly rotate the encoder right 180deg (over say 0.5 seconds)
  8. Play a note
  9. Quickly rotate the encoder left 180deg (0.5 seconds)
  10. Play a note
  11. Stop the recorder.

Send me a copy of the file with some details about the device (in case I need to look up it’s user guide) and I’ll make sure Cantabile works with it.

Any help with this greatly appreciated.

Brad

Jump Prevention seems clearest. I know Take Over is used in some products but it’s not obvious what it means until you know. Not keen on Catch Up.

Very excited that this feature is coming up - it’s the one last remaining thing preventing me from moving all my performance data into Cantabile and being able to use a “dumb” controller.

Neil

I agree with Neil- jump prevention would be #1.

I have several of these. Need to borrow one?

Hi Richard,

Thanks for the offer, but I’m in Australia and not worth the trouble.

Brad

Brad, would this jump prevention feature also apply to sliders? I have both on my Novation but use the sliders more than the rotary controls.

Experimental Build 3160 available now has support for both Jump Prevention and Rotary Encoders. Both need more real world testing so please report any issues.

Details here.

@LeesKeys Yes, Jump prevention applies to sliders. Rotary encoder support only applies to endless rotary encoder knobs.

1 Like

Yessss!!! Thanks Brad, I shall be testing jump prevention today, and using it heavily on a short tour coming up in a couple of weeks.

I really like the increment/decrement feature by the way - this opens up some interesting uses for footswitches.

Neil

1 Like

The documentation on jump prevention says:

“When the Jump Prevention mode is selected if the source and target values are out of sync, Cantabile waits until the value is moved past the current target value before the binding starts working - in order to prevent large jumps.”

Am I right in saying this out of sync detection starts when the binding becomes active? If so, if a binding remains active across a song state transition, will jump prevention kick in again if the target parameter is different in the new state? And if the target parameter is updated by a trigger, will jump prevention kick in similarly?

How about if I jump on my expression pedal, so the value changes rapidly in one direction; will jump prevention then think the source and target are out of sync, and go into jump prevention mode? This would be undesirable if so - the jump was intentional.

It seems to me that jump prevention should only be allowed to kick in when a binding becomes active, or when the target parameter is changed by a state change, or changed by a different binding.

Some clarification on how this works under the covers please!

Neil

The jump prevention logic works as follows:

  1. After a binding sends a value to a target parameter it reads the value back and stores it.
  2. Next time the binding is invoked it compares the saved value to the current target value
    • If it hasn’t changed then things are still in sync and binding takes place.
    • If it has changed then it enters a mode where it waits for the source controller to touch or cross the current target parameter value.

In practice, this means:

  • Large jumps by moving a slider very quickly will always works and won’t confuse the jump prevention.
  • When the binding is initially loaded, the “previously set value” is set to a very out of range value so the first binding event is always in “out of sync” mode.
  • If the target parameter is changed by another means (states, another binding, loading a preset, adjusting it with an on-screen controller etc…) the binding will automatically reset into out of sync mode.

Make sense?

3 Likes

Perfect and ingenious! Thanks Brad!

Neil

Just an extra note to say, jump prevention is working great for me!! Quite a lot of my band’s songs have volume and other controller fades, and it’s handling everything beautifully :smile:

2 Likes