How to convert CC64 (sustain pedal) to delayed note off commands

Hi all,

since my midi sequencer doesn't process CC messages, I'd like to convert CC64 messages to delayed note off commands. Specifically, I'm looking to achieve the following: If midi note off commands are received while CC64 is equal to or larger than 63, delay those midi note off commands until CC64 is smaller than 63 again.

 

Is this possible with MIDI Translator Pro? If yes, how would such a project look like? I've been unsuccessful so far.

 

Thanks and best regards

H

 

The attached should work.

Set up your aliases as follows:

From Keyboard – Whatever MIDI port your keyboard is on

To Sequencer – Whatever MIDI port your sequencer is on

 

We have 4 translators.

The first one “CC 64 Control” looks at the value of your CC 64 and sets the global variable ga to 1. This will later tell Bome MT whether to pass through note-off messages or not.

If CC drops below 64, it will also start iterate through a timer “All Notes Off” (which is the second translator). The timer All Notes off, iterates from note 127 to 0 on MIDI channel one turning off every possible note on MIDI CH 1. The timer translator (second translator) will only trigger if CC 64 is below 63 AND has moved from above 63 (so that we don’t get all notes off if we go for instance, from 62 to 61.

Then we have a third translator that looks at the Note off messages on MIDI CH 1 and only passes them through if ga=0

Finally we have a translator (forth) that suppresses Note Off messages that are generated by MIDI the MIDI through path I’ve set in the project. Here I have the output as None as this is required to suppress the Note Off and bypass the default route for that type of message.

 

By setting a MIDI through path. Any thing that does not have a translator will pass through untouched.

I hope this helps.

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

 

 


Attachments:
1547319523435_CC64-Control-of-Note-Off-2019-01-12.bmtp

Hi Steve,

 

thanks for the quick answer!

 

One follow-up question: What about notes that are still held while Midi CC drops under 63? They will also be cut-off, right? Any chance to have a workaround where only note off commands that actually occurred during the sustain-pedal-down phase are delayed until the sustain pedal is released?

 

Thanks so much

H

In order to only turn off notes that were held down while sustain was on, you would need to track each of them in global variables and then upon release of the sustain pedal, only turn off those notes. This is beyond the level of support we offer here on the forum, however I could do this for you as an independent contractor if you will. Just drop me an email and I will give you a quote.
Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

A little more explanation here. You could you 4 global variables to bit map each note . A global variable is a 32 bit integer so 48×32 =128 notes. Most keyboards have no more than 88 so you could probably bitmap just 3 or 96 notes. You have a translator that when you send note-on, it figures out which variable and bit to set to 1. You have a similar transator to clear the bit when you release the note. That way you are tracking the up/down state of all notes. Then you modify the all-off timer to test the state of each bit and only send the note-off message for keys that are released (have zero state). If the bit state is 1, then you execute, exit rules, skip outgoing actions. Make sense?

Thanks again for the comprehensive reply. I’ve also just dropped you a private Email.

Hi,
I delivered your project for you as agreed. I hope everything is working OK. In the project file, note off messages when sustain is released will only turn off notes note currently held down. Also, to reduce MIDI traffic, it only sends note-off messages that had notes touched since the last pedal release. So for instance, if you touched and released notes 60 63 and 65, the note-off messages will only be held down for those 3 keys and not for the remaining 125.
In the project I used 8 global variables. 4 represent the current states of all 128 notes, the other 4 represent any notes that have been touched since last sustain pedal release. In order to trigger note-off all of the following must be true:
1- Sustain pedal released (CC 64 is less than 63)
2 – Note is currently in off position
3 – Note was touched since last sustain release
Any note currently playing will continue to play until both the sustain is release and the note is release.