In some difficult piece I try to make it more simple by adding extra bass notes using a binding. For example playing a long c3 I add the f2 with a binding. That works fine, but I can only do this with a fixed velocity using the value field in the binding. Is there a possibility to pass the velocity of my key that I play (c3) to the extra key I define in the binding (f2),
thanks for you help,
Joop
Possibly CodeFN42 Notemapper might work (Free VST). For an input note to Notemapper, three outputs can be mapped (notes, CC, aftertouch, etc.). When a note is mapped (when you play C3, notemapper plays F2 as programmed), the 0% scale lets the same original note velocity pass through with the generated note. In Cantabile, there has to be a route bypass around notemapper for the original note OR you have to program notemapper for every note on the scale.
If you use a route and the midi filter Note Map, then you can make all the mappings you need in one filter, and it will pass velocity as well. And if you need both the original and the transposed note, then you can use different channels and only make the change on one channel. And you can add the sticky note filter as well, to sustain the bass note.
Yes, Note Map Cantabile Midi Filter does work; embarrassingly, I’ve never used it! I like CodeFN42 notemapper VST because it’s almost like a spreadsheet entry AND can map to other MIDI actions besides notes.
Hi Toaster,
that works for 1 note, but I have a few different notes in a state that I must map to another note, no constant intervals. So I believe it will not work with routes. Anyway, was my first thought as well,
thanks
I do not know notemapper, but it may work. I would have to program it differently for every state, but now I have to write quite a few bindings.
thanks,
Joop
Hi TorstenH,
I am going to play with that, sounds like it can work.
Still I would think that it should be possible to pass the velocity with the binding as well. Maybe something for @brad?
Sorry for reviving this old thread, but I’m kinda stumped trying to get this to work: I have created a binding that is supposed to map a note from a MIDI input to a different note to a specific rack, but keeps the velocity information. According to @brad, this should work within the updated binding system, so I tried my luck, but I’m not getting anything meaningful. This is what the binding looks like:
You’ve hit on a definite limitation here. The problem is when you select a specific note in the source side of the binding, Cantabile treats it is as a command binding instead of a value binding and doesn’t pass the velocity value.
At this time, a MIDI binding can only pass a single value so it’s not easy to pass the channel, note and velocity all in a single event. Perhaps I should look at adding this.
I was going to suggest setting this up with MIDI filters instead (perhaps using the new NoteRouter filter), but I see you’ve got a modifier set on the source - so I guess that won’t work for you.
Probably the quickest fix for now would be to add a new Event kind for the source called “Note (Velocity)” that triggers on a specific note and passes the velocity as the value. Would that get you by?
Possibly use the modifier in in a separate binding to activate/deactivate a named route that contains note mapper/router filter and flows into “Note Mapper 2”? If Modifier #1 allows AND Note 81 activate the route, then Note 81 is mapped to Note 79 and note parameters will follow.
For the current challenge, I’ve found a different solution using a route with a condition. It would be great to have the modifiers available as a condition for routes, not only CCs, but with a bit of embedded rack trickery, I was able to merge the two MIDI inputs necessary to make the switch. Overall, this also seems to be the better solution, since this now lives completely within the audio thread - should be better timing than by using bindings, I guess.
So problem solved - there’s always one more way to do things in Cantabile …
I was just a bit stumped I couldn’t find a solution with Bindings, since @brad suggested that this should work with the new bindings model.
Having an event “Note (Velocity)” would be nice; this would also enable us to use the velocity in expressions. But even better would be a “Note” event that provides both note number and velocity available as variables for Binding Expressions - I can imagine all sorts of trickery
For routing MIDI events, I’d always lean towards MIDI filters and MIDI routing over bindings. However… most MIDI to MIDI bindings do run on the audio thread. The exceptions are:
MIDI Sys-ex targets
Scheduled bindings (delays etc…)
A simple note velocity → note binding should run on the audio thread.
Yes sorry. I obviously forgot that “note on” events fire as commands not as values.
I’ll add it - shouldn’t be hard.
It’s definitely possible to make this available for binding expressions, the issue is passing more than a single value to the target. eg: if you wanted to pass a note and velocity from the binding expression to a note on target that’s not really going to work.
To explain this a little more, bindings pass one of three main types of values:
None (a command)
A numeric value (eg: cc value, gain setting etc…)
An object (usually string values)
The none and numeric cases have optimized paths. The object case passes a C# object (which can be anything) but requires a memory allocation to box values. So I could use the object path to pass a MIDI event including event type, controller/value, note/velocity etc… The binding expression would be able to pick up those different values (eg: value.note, value.velocity) but then the issue becomes what to pass to the MIDI target binding point. The expression would need a way to synthesize new midi event object, or at least modify the original one - and that’s currently beyond the capabilities of the expression engine.
Also, this would need to run on the UI thread and not audio thread (at least until I improve which bindings can be pushed down in the audio engine).
how about having a “Note (combined)” source event that delivers a 14 bit numerical result combining note number and velocity? That value could then be used in expressions, so a target note as in my binding could use the lower 7 bits of the value as velocity. Simple math expression.