-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Zero velocity note on messages converted to note off #14
Comments
This depends on this piece of code in jack.c:
I think we could add a build time configuration to opt-in (or opt-out) filtering note on with 0 velocity, or better a run time option. |
Worth noting that at least LV2 does not allow zero-velocity note ons. JACK requires messages to be in complete form, no running status allowed. But this note-on-0 could be made optional yes. |
Thanks guys. I'll try compiling a version without that bit for my own use for now. A run time option would be great, especially if it's easily toggled from Cadence :) |
I'm working on this at least for stand alone program. DBus version is not done yet. I will publish a new branch for this. |
Only for standalon program, dbus is not done yet. See #14
Only for standalone program, dbus is not done yet. See #14
Awesome, thanks again for the attention on this. I have succeeded in building and running a version with the filtering manually removed, so all is well for me. |
Then LV2 is broken and should be fixed. a2jmidid should NOT be trying to fix a deficiency in LV2. BTW, this The MIDI 1.0 specification states the following about NoteOn and NoteOff commands:
In the first sentence it says "Interpretation of the Velocity byte is left up to the receiving instrument.", which means The rest of the quote is basically talking about the SENDING INSTRUMENT, and what it should do with the It also EXPLICITLY states that sending a NoteOn with a velocity of 0 is perfectly legal, so there is absolutely It also means that LV2 should support it. It would be maybe 3 lines of code to do so. BTW, one easy way to handle this would be to create a MIDI filter that could be inserted between a MIDI |
After some discussion and thought, you are right that a2jmidid should not be doing this. LV2 restricting note-on with 0 velocity is quite valid, it is within the spec to dictate what messages or data plugins can use. |
I understand your point, it may be technically valid to do what they did, but is it reasonable if the fix is a |
It is 3 lines for every single plugin. But anyway, LV2 is off-topic, I mentioned it only as it seemed relevant and I had the wrong idea that this is something people usually wanted (the 0 velo converts to off). |
There exist hardware devices that need note-on with velocity 0, with no possible workarounds. If backwards compatibility of JACK is a concern (which I don't think it is. This is a bugfix) then an elegant solution would be to create a new jack midi ouput port METADATA flag that sets the auto-conversion behaviour to "don't convert, send velocity 0", in opposite to the current default "convert to note off". All other solutions, such as command line flags or compile flags are a burden to the user. |
Only for standalone program, dbus is not done yet. See jackaudio/a2jmidid#14 (cherry picked from commit ee48ecee4d2cf2cd73ca29cbc2bf0b709de150fe)
When passing note on messages with velocity zero,
a2jmidid
converts them to note off messages. For example, a note consisting of bytes [144, 56, 0] is converted to [128, 56, 64] while passing through the bridge. This behavior may be harmless or even desirable in many cases, but it's interfering with my ability to control the lights on my APC Mini. The Mini will only turn off it's lights if it receives a note on message with zero velocity in the form given in my example above. Note off messages won't work.Midi is ultimately a byte wise low level protocol that's not always used to control synths in the way the spec suggests. Why not just pass through the messages as received and leave interpretation to the end points?
The text was updated successfully, but these errors were encountered: