06-21-2021, 11:18 AM
Some hardware sequencers (for example Roland MC-707) cannot record sustain pedal midi data and some synths (for example Behringer VC340) cannot respond to sustain pedal midi data. However, some styles of music feel unnatural or are impossible to perform on a keyboard without using a sustain pedal.
I think it should be possible for MRCC to have a modifier to convert incoming sustain pedal data (cc64) into something these other devices can cope with by simply delaying the note off messages of any notes being sustained by the sustain pedal until the sustain pedal is released, at which point MRCC would allow the note off messages currently in the buffer to be sent to the output. Technically this would require the most recent value of the sustain pedal cc64 to be kept in memory so MRCC always knows whether the pedal is currently engaged. Whenever a note off message is received at the input, the MRCC would check this memory to see whether the sustain pedal is currently engaged, and if so then it would delay the sending of that note off message and store the note off message in memory until the sustain pedal is released, at which point any queued note off messages would get sent to the output and removed from the memory.
I think this simple logic would cope with notes that began being held down either before or after the sustain pedal was engaged.
The only thing I'm not sure of is what the behaviour should be if while the sustain pedal is still engaged, after a note off message has been delayed, another new note on message arrives for the same note (which already has a note off message queued in the buffer). Perhaps the modifier screen could have an option setting to let the user decide the behaviour in that scenario. One option would be to allow retriggering of pedal sustained notes (by immediately issuing the queued note off message to the output just before the new note on message is allowed through). That would be suitable behaviour for something like a piano sound where you want to hear the attack of the later note. The other option would be to discard the new note on message and also discard the earlier note off from the memory buffer without letting either message go to the output (another note off message may get added to the buffer again later if the next note off message occurs before the sustain pedal is released), so the output behaves as though the original key press had continued uninterrupted into the later key press. I imagine that would mimic the behaviour of some synths that do not retrigger notes that are already being sustained by the sustain pedal.
This feature would be useful not just for playing keyboards with sustain pedals into other synths or sequencers, but also when loading midi files involving sustain pedal data into a DAW and sending it to synths that cannot cope with the sustain pedal messages.
I think it should be possible for MRCC to have a modifier to convert incoming sustain pedal data (cc64) into something these other devices can cope with by simply delaying the note off messages of any notes being sustained by the sustain pedal until the sustain pedal is released, at which point MRCC would allow the note off messages currently in the buffer to be sent to the output. Technically this would require the most recent value of the sustain pedal cc64 to be kept in memory so MRCC always knows whether the pedal is currently engaged. Whenever a note off message is received at the input, the MRCC would check this memory to see whether the sustain pedal is currently engaged, and if so then it would delay the sending of that note off message and store the note off message in memory until the sustain pedal is released, at which point any queued note off messages would get sent to the output and removed from the memory.
I think this simple logic would cope with notes that began being held down either before or after the sustain pedal was engaged.
The only thing I'm not sure of is what the behaviour should be if while the sustain pedal is still engaged, after a note off message has been delayed, another new note on message arrives for the same note (which already has a note off message queued in the buffer). Perhaps the modifier screen could have an option setting to let the user decide the behaviour in that scenario. One option would be to allow retriggering of pedal sustained notes (by immediately issuing the queued note off message to the output just before the new note on message is allowed through). That would be suitable behaviour for something like a piano sound where you want to hear the attack of the later note. The other option would be to discard the new note on message and also discard the earlier note off from the memory buffer without letting either message go to the output (another note off message may get added to the buffer again later if the next note off message occurs before the sustain pedal is released), so the output behaves as though the original key press had continued uninterrupted into the later key press. I imagine that would mimic the behaviour of some synths that do not retrigger notes that are already being sustained by the sustain pedal.
This feature would be useful not just for playing keyboards with sustain pedals into other synths or sequencers, but also when loading midi files involving sustain pedal data into a DAW and sending it to synths that cannot cope with the sustain pedal messages.