I have a Novation SL MK 2 with aftertouch. I have downloaded a patch that transforms the channel pressure into a CC 1. With this patch the modulation triggers in this order
Note On
CC 1
Note Off
However, this doesn’t perform the desired the modulation until I activate the channel pressure and play the next key for example that’s because the modulation CC 01 needs to be active BEFORE the note on message.
I am trying to find a way within MidiHub in such a way so that the transform pipeline prioratizes this so when channel pressue is activated, the pipeline sends the messages in the following order
CC 1
Note On
Note Off
Is this possible and if so, can you help me with this?
I also looked in the online documentations about this 'Prioratize Real-Time" setting.
It says “Whether the Real Time messages produced should be prioritized. If off, logical order of the messages is retained.”
but there is no examples where this is being used. When I try to look at the options, the priorty setting references a note or a CC #. I thought this would be a priority of the transformation, so a # 1 would take a priority over #2 and in this way when I make 2 transformations, I can control the order of the midi messages so a CC message would be sent out before a Note On message.
Sorry, it’s like two questions but you see what I am trying to achieve, thank you
OK, Joe, so the Channel Pressure → CC#1, but what creates the Note On/Off?
If it’s the Channel Pressure being Transformed then you’re OK
If the Note On is the original Note On which then gives the Channel Pressure then you need to delay the Note because there’s always a lag between Note On and the onset of CP:
(this is from SL MK 1; even when hit hard the lag is at least 20ms. With low velocities much longer)
Transform order won’t solve this.
It would be useful to know what values you want this pre CC#1 to take; the early ones are likely to be low.
Depending on what you’re trying to do having a key just for pressure (filter that one out) might be a solution (not ideal tho’– octave changes, etc)
Thank you for your response. I have attached 3 items. The first I show how the Novation SL MK 2 handles modulation. The CC is sent before the Note On. In the second screenshot I show how Midihub pipeline is handling this transformation differently. I am basically trying to simulate the order from the MK 2. In this way, I can trigger a modulation using channel pressure on the current note I am playing. So let’s say I am playing a Lute with a tremolo effect. I want to trigger that effect when I activate channel pressure. On my PSR 5000 I can trigger that using the Modulation wheel and in this situation I want to use the SL MK 2 aftertouch to achieve the same so I don’t use my left hand to move the mod wheel of the SL MK 2.
(Whether any are useful depends on your playing style and wishes. I include some of them just for completeness )
Delay† all the notes within Midihub and play them ‘early’. Possibly acceptable with long pad/drone playing, likely not with plucking styles!
As Channel Pressure/Aftertouch is the same across all keys, reserve one key for pressure alone. Midihub will stop this key playing. This key can be hit and pressed at anytime prior to the first “playing” note. Several problems might arise here
Same as 2 but based on Velocity: use Midihub to drop a note whose velocity is in a certain range.
So you might reserve very low velocities (eg 1-3) to be identified as your silent “pre-note” which then outputs the Pressure messages. See below.
Use another means eg. Foot Pedal / Breath Controller
This Monitor shows a low velocity note (E5) being removed by a Drop Transform:
The Pressure messages remain ready to transformed into CC#1
Thank you for giving me an explanation and a workaround. Since my midi controller has different zones, I realized I could activate the channel pressure with the left hand chords and that will trigger the CC 01 on the next note I play. I was hoping that I can trigger the CC 01 on the actual note but it’s a workaround.
Would you be able to shed some light on the priority property and how that might come into play? I am find the documentations short on that topic.
Have a play around with this… aftertouchLowNoteDrop.mhp
…to see how easy it is to fit into your playing style:
choose between
pipeline 1 which involves a low-velocity pre-note
pipeline 2 which uses a high-velocity pre-note
if neither feels right, choose a keyboard split; tell me about the specifics (key ranges, channels etc) and we’ll set up pre-notes on the non-playing zone.
I’ve never played the keys of my SL25 much so didn’t know this (also just found it has Note Off velocity which is good) aftertouchChannelNoteDrop.mhp shows how to Drop the notes on channel 2 and use Pressure on any channel to create CC#1.
thanks for the info about the note off velocity. I am not sure how to use that. If I use it for decay, it also gets inserted after the note off. For that to be effective, it needs to be inserted before note on. I think I will run into the same issue.
it would be nice if I can store a channel pressure into a user defined variable and then when I use a transform on a note event, I can insert that value as a value to CC 1 event and have that inserted before the note. I tried that but when I transform a note, I have no access to the channel pressure, just the velocity. I wish the MidiHub can be more flexible so we can do these things. The same thing goes with sysex, I would love to press a button on my controller and have midi hub transmit a set of sysex messages to my arranger, that would be a powerful feature.
info about the note off velocity. I am not sure how to use that
It may have no use for your set-up.
(Just noting it: a user recently, for example, had two sets of samples, one for the playing sound and another for the key-up noise. I personally might find it useful to route Note On created from Note Off to a different synth for a “tail” sound, maybe where the Off velocity also modulates the Tail Length…
–Up until now, my SL25 has only been used for pots & faders)
store a channel pressure into a user defined variable and then…
You can do this already:
Use Transform and Argument 1 or 2. Set your Transform to Insert Before.
Later on, you can map some message to the arg to get variability
have midi hub transmit a set of sysex
Not implemented yet. I got the impression a couple of years ago that @Blokas were happy to look into it in a limited way, but users weren’t very specific and the idea went nowhere. (Just my feeling though, I’ve not asked them)
are you saying that I can store a velocity in one step and use that value in another step (another pipe? such as a transform on the same row?)
as for the sysex, if Blokas can simply implement sending one and more than one user configurable sysex with a DV valriable, they will sell the midi Hub like cake! The SL MK2 for example, is only capable of programming a short sysex message on key press and send that in one message only. If I can have multiple, I can press a button and have my PSR or Genos select a user registration, select a registration bank, set the volume,… all from one button. It’s so powerful what you can do if you only allow users to send their sysex. I think the building blocks are there, Blokas just needs to enable us to use it.
I hope they do, that why I bought it to be honest and I was disapointed to find out such a basic message is not implemented!
It’s incorrect to assume that SysEx is something basic, given that this is specific for every manufacturer and product, so there’s no single standard definition. Also a lot of devices are using checksum bytes which must be calculated correctly, that means Midihub would have to be aware of the many different variations of this algorithm that is in use by different manufacturers and products, as long as you want to be able to use variables within the SysEx data.
We are aware of this feature request, but there’s still things to do before we get there.
Take a look at the patches I posted for a “Discarder” here and a “Pressure added to CC” thing here
Both use a message going through the pipeline to create a virtual mapping which then modifies an Argument setting in a Transform in the same line.
The diagram in the second one makes this clear (I hope)
As virtual mappings are still pretty new, we’re probably all still learning the subtleties:
both the above were handling a flow/series of messages so it maybe wasn’t super important if the updater message was maybe late.
With the patch mentioned here, though, it most definitely was† and I had to delay the messenger note a tiny amount to make it work.
†check it out and see what happens when you disable the Delay…
So you might need to play around and learn what'll make your thing work.
PS. My delayed "messenger note " didn’t need a Note Off cos it was getting just Transformed back immediately after.
If I was going to delay both a “true” Note On and its Note Off I think it’d need another trick
(Delay is not my forte – both @Giedrius & @JoeyButters are more skilled than me at making a delay of both without extra repeats)
Start with the Discarder,
hook it up to a controller with an extra line to Rescale say [0,127] → [0,31]
(& maybe a CC Remap to change your CC to 95/97)
Then watch the Monitor while selecting each pipe in turn.
Once you’ve twigged the subtlety of self-mapping, you’ll be able to try your own experiments.
Give me a shout using @resonotter if you get stuck