State behaviour for MIDI filters

I’m in the process of migrating from Cantabile 2, in which I use a single sub-session for each song and routing/splits/intelligence in my master keyboard, to Cantabile 3 in which I’d like all the routing/splits/intelligence to be inside Cantabile, so I could in principle use any old MIDI controller keyboard if I needed to.

I use a Kurzweil PC3x in setup mode, where each setup consists of a number of zones, with each zone sending note info within a specific range to a specific MIDI channel, transposed by a specified amount. I currently step through setups for a song (so all the zones etc. change), and would like instead to use song states. When a setup is selected, MIDI volumes and other controllers can be sent to each zone, which I use to set levels etc. All of this can be easily replicated within Cantabile 3.

The one thing I seem to be missing is that each zone can map MIDI velocities with offsets, scaling, curves etc. I know I can do this via MIDI filters on input ports, or on rack/plugin inputs. However as far as I can see it’s static across song states. This is a problem for me because I quite frequently have velocity mappings for a given sound change for different parts of songs (for example I might compress MIDI velocities to keep levels consistent as I play one part, but then want the full MIDI velocity range for another section requiring more emotion/feel).

Another scenario is when I’m using a sound in two successive song sections and want to play a certain amount louder in the second section, but don’t want the volume to suddenly jump up on any held notes when I switch states. I achieve this by offsetting velocities upwards in the second section and holding MIDI volumes constant, so only newly played notes are louder.

Is there any way to achieve this? The only way I can see at the moment is to have multiple input routes for each different set of velocity parameters, and switching them in and out by state, which starts to get messy quickly.

I can imagine supporting state behaviour for the full set of MIDI filters could be problematic, but I wonder if the special case of velocity mapping in this particularly useful scenario could be implemented to be state-dependent?

Incidentally I also need other MIDI filter type functionality to be state dependent, such as filtering out sustain messages for some sections, or doing state-dependent expression pedal mapping. However I think since these are more “special case” situations (compared to keyboard response, which is a factor in every state), it seems more reasonable to switch in/out special routes for those.

1 Like

Hi Neil,

You’re right - currently the only way to do this is to use multiple routes and enable/disable as appropriate. The main reason MIDI filters can’t be controlled by states is that they’re not designed for on-the-fly changes and depending on the filter could easily end up with stuck notes. Its the flexibility and combinations of MIDI filters that make this hard.

That said, the velocity curve filter wouldn’t suffer from this problem. Hrm.

Let me think about this - I don’t really want to hack in state behaviors for one filter but perhaps enhancing the MIDI route object with velocity curve settings might be reasonable.


1 Like

I think that would be eminently reasonable :smile:


Just one comment on velocity curves, based on a current issue: could this be expanded to generic “Controller Curves”, so that I can modify controller responses of all kinds? --> @brad ?

Just recently wrecked my expression pedal and plugged in a different one --> horrible uneven response to foot position. Would have been easy to fix with a “Controller curve”, similar to a velocity curve, but modifying controller values. Same for aftertouch response, which requires my to push so hard that my fingers hurt…

Fixed the expression pedal problem by changing to a Yamaha FC-7 and soldering an adapter plug to make it work with my Kurzweil PC3K - works great now, especially since the FC-7 has a built-in modification to make it more suitable for playing standing up. But the aftertouch issue could profit greatly from a more generic “controller curve” option.

Pretty please???



Torsten, I use the FC-7 pedal too. What modification are you referring to?

Hey Lee,

depending on whether you play sitting or standing up, you can adjust the angle for minimum and maximum position:

Makes a world of difference: the original (sitting) position (right picture) is near impossible to tilt back to zero/minimum when standing up. Changing to the alternative setup makes things a lot easier - pushing to max value then means a position beyond horizontal (see left pic), which isn’t a problem when standing up.




This is logged here but I didn’t think there was much demand for it.

Coming soon…


This works fantastically - exactly what I needed!!

Thanks Brad!

1 Like

Hey @Torsten

Since you asked so nicely… controller curves coming soon.

It’s only available as a filter and not as a state controllable thing on the routes, but should cover the use case you described.


Hi Brad, where can I access the MIDI filter function now? Thanks!

MIDI Filters are in various places.

  1. Right click on a MIDI route -> MIDI Filters
  2. Right click on Plugin Slot - > MIDI Filters
  3. MIDI ports have MIDI filters too - Edit the port and click MIDI Filters button.

Is that what you’re asking?

I found it now :slight_smile: I think the latest version move things around a bit, or I might remember it incorrectly. Thanks.

Sorry again to dig up old topic. I bought an M-audio EX-P, it’s pretty good but I also have the FC-7 which has a nicer feel. I bought 2 Hosa Y adapters to reverse the TRS on it - that solution is bulky and involves too many inter-connects. I’ve got a soldering iron and I’m ready to modify an adapter plug. Do you mind sharing how you did it and what you used to build it?


No probs - simply switch the tip and ring connector - that should do it for most keyboards. I cut off the original plug and soldered a new TRS plug on with those two wires switched around (used a voltmeter to find out which color was tip and which ring) - all done!



1 Like

That makes sense:

  1. Cut existing plug off with enough wire to connect voltmeter to see which color is tip.
  2. Solder on new TRS male plug with wires reversed.

I had to reverse the FC-7 for my Roland XP-80.

I originally bought it for the Korg M1 back in the 90’s