Jump to content

MIDI Note On/Off Status Byte


Recommended Posts

Hi, I have a problem using Cakewalk MIDI output with a particular hardware synth. I already know the problem is in the synth firmware, and since the firmware is open-source on github I know pretty much how to fix it, it's just a matter of coding it properly. But I want to ask about Cakewalk anyway.

The problem is this: when I play a note through Cakewalk by echoing MIDI keyboard input to a MIDI output connected to the synth, everything works fine. If I record or draw in MIDI notes in the PRV, and then play back, the output is awful and the last played note hangs until another note is played. This issue is not present in Ableton Live or FL Studio.

After much fiddling with the MIDI settings in the Preferences window I had an idea. As an experiment, I fed the MIDI output through a loopback driver into MIDI-OX in order to log the messages and discovered the cause immediately. Cakewalk passes the NoteOn and NoteOff messages directly through when played with a physical device, but when playing MIDI notes from the PRV, it uses a NoteOn status byte with a Velocity of 0 instead of a NoteOff. This is perfectly acceptable according to the MIDI Spec, and therefore it is the synth which is non-compliant, for not handling both messages properly. I looked at the source regarding MIDI messages and found the bug.

But I would like to know, is there a simple way to make Cakewalk use the NoteOff status byte rather than NoteOn&Vel=0 to stop notes? Perhaps in the .ini file or the Windows Registry somewhere? I don't expect there is, and if it's even possible, I don't want to make the change permanently. I have read there are performance benefits from using the NoteOn&Vel=0 method.

I do intend to open an issue on the synth github page and try to fix the firmware so it will use either method.

Link to comment
Share on other sites

Cakewalk will always send NoteOn vel = 0 for note off.  There is a performance benefit, as it can effectively cut down the amount of MIDI messages being sent by up to a 1/3rd by using MIDI running status.

The MIDI specification requires any MIDI compliant software/device to treat NoteOn vel = 0 as a Note Off.

We've looked into ways of getting Cakewalk to send an actual note off instead (based on user preference), however it's relying on some fairly old Microsoft MIDI API's that are difficult to get around without rewriting a fair part of the MIDI engine.

 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...