Triggers driving bindings

I’m probably missing something here (I usually am), but is it possible to have a trigger in a rack with an action that activates a rack binding? What I’m looking to do is set up a “Song Start” trigger in a rack that sets a FreeG gain parameter in the rack. But the closest I can get is to send a MIDI controller, but where to?

I know I could do this at the song level, by using a song trigger to send a MIDI controller into the rack, and a rack binding to bind that to the parameter. But I’m quite keen to put the trigger in the rack, so that I don’t need to remember to put these triggers into all songs using the rack.

If there was an extra trigger target for “Rack MIDI in”, I guess that would then get to the bindings…

Neil

Hi Neil,

This isn’t really possible at the moment (although I wouldn’t be surprised if @Torsten jumped in and explained how to do it).

There’s a couple of planned things that would help with this though (in most likely order of delivery):

  1. Would rack reset help in this case?

  2. MIDI Loop Back - basically what you’ve described for trigger target of Rack MIDI In but for any MIDI input port.

  3. The planned changes for MIDI Bindings so you can bind MIDI input to a MIDI target.

Brad

It might - however what concerns me about rack reset is that in some cases, maybe it would be undesirable. For example suppose I’d like to reset one FreeG gain level to a predetermined state, but I need another FreeG gain level to remain unchanged (for example if I’m using an expression pedal on a sound playing in both states, which should not be interfered with, while resetting a level on something else). Perhaps it would need to be done at the plugin level, rather than the rack level, and be state-dependent.

This is where triggers would work well, because I can disable the trigger on the state that should leave the target untouched. But yes, probably for most cases, rack reset would be ideal.

I’m also unclear about how rack reset should be triggered - would it be a trigger action itself?

Yes, that would do it. I’m guessing maybe I could use loopMIDI to achieve this, until built-in support for loop back is supported…?

Neil

:grin: Actually, I could imagine a way to do this, but it does need a way for a rack to send MIDI back to itself. At present, there is only a convoluted way to do this:

  • Use a virtual MIDI interface like LoopBe or LoopMIDI to connect Rack MIDI Out to Rack MIDI In
  • For multiple racks, you’ll have to either create one port per rack or filter by MIDI channel (which is messy for me, I usually set everything to Omni to keep things simple)

I tried to create an internal loopback method within Cantabile by creating a rack that simply forwards everything from MIDI In to MIDI out, but it seems C3 is too clever for me: it doesn’t allow a rack to connect to both input and output of another rack - probably to avoid feedback…

I agree with Neil’s positions: rack reset is too blunt an instrument for state changes, although it might be pretty good for song load triggers.

I’d love to have MIDI to MIDI bindings! I usually use the lowest three keys (below C1) as controllers. For two of them, it’s pretty easy: I bind them to Next State (Instant) and Previous State (Instant) in the global rack - and I can set them to Routing Mode Suppress, so the keys don’t get sent to any rack. But the third key I need to send CC 114 on channel 16 to bypass all effects on my VoiceLive. Currently, I need to do this with a dedicated route in the global rack with a MIDI filter that converts this note to CC114. But this route I can’t set to Suppress - which means that I can’t filter out this key at global level.

So in all of my songs, I need to set the keyboard range for my routings to start at C1 - which is tedious… Far easier to set create a MIDI to MIDI binding in the global rack that sends CC114, value 127 on pressing key B0 - but then I also need a binding that allows me to send CC114, value 0 on releasing key B0. Or I need a binding that can alternate between these two values: send value 127 on first press, send value 0 on next.

But I’d also love an internal loopback device: there is currently no way I am aware of that allows me to record my performance and then play it back including all bindings. Simply creating a media player that sends to loopback and then adding the loopback port to “Main Keyboard” would do the trick!

Re the triggers driving bindings: at present, I do this at song level; I have a number of initializing triggers set up in my default song; most of them simply set volume levels (FreeG) to 0dB so I am sure that everything is at default volume. But there are also some to send CC1 to hammond and rhodes (initialize Leslie and Trem) or CC11 to hammond (make sure pedal is on full).

Initially all these are active in the first states; when I create new states I decide which of them to keep active and which to de-activate (because I want to manually control levels across the song).

Works for me nicely; unfortunately it breaks jump prevention (binding doesn’t know what I send to the rack directly). This would again be something for a loopback device: instead of sending CCs to racks directly (and bypassing the binding at song level) I could simply send CCs to the binding. Would this work? Will have to test using LoopBe - haven’t fully wrapped my head around jump prevention.

Cheers,

Torsten

1 Like

OK, I think next week I’ll have a look at adding loop back support. Sounds like there’s a real use case for this and while midi-to-midi bindings might be better there’s a lot more work in that. Conceptually I think loop back is pretty easy to implement - just need to figure out the UI.

2 Likes

Quick update: I spent today working on this and have audio and MIDI loop back working on both environment ports and on rack ports. The UI still needs work but the internal wiring is done and seems to work well.

4 Likes

Loopback support available now.

https://www.cantabilesoftware.com/blog/posts/84-loopback-ports

3 Likes

Great stuff - I’ll definitely have a play with it! This, in combination with jump prevention, could be an interesting approach to re-organize my bindings and triggers…

Thanx @brad!

1 Like