sending SysEx through midiout causes other midiouts to randomly stop
Posted: Thu Oct 10, 2024 12:00 am
Creating a Max for Live device that periodically sends a SysEx message will randomly stop other midiout instances from working, even in other devices. This happens even for a "thru" MIDI effect device that doesn't do anything other than connect midiin to midiout (with or without MPE enabled). The MIDI Monitor M4L device included with Live also demonstrates this problem. The blocked midiout will eventually unblock after receiving enough other events. Sending a SysEx message through the blocked midiout will often unblock it immediately.
This happens even if the SysEx M4L device isn't routed to a MIDI output at all.
Usually, this causes stuck notes, but events other than Note Off get lost or delayed as well. The blocking tends to happen when a large number of MPE events are generated in quick succession. A higher frequency of SysEx events tends to cause more blocking (300ms or shorter interval, but 900ms still causes problems).
Details:
Ableton Live 12.1 (in trial mode)
Max 8.6.5 (though this also happens with the bundled Max)
M2 MacBook Air, macOS Ventura 13.7
Intuitive Instruments Exquis, connected via USB
I'm working on getting custom note layouts on the Exquis to work in a M4L device. This requires periodic SysEx messages to keep it in an app-controlled mode, instead of its default standalone controller mode.
I can easily demonstrate this problem and produce traces via an external MIDI Monitor app and some IAC devices, using the Exquis for the high-rate MPE events. Not including the log because it's enormous, and will require annotation.
Steps to replicate:
In a new set, create a M4L MIDI Effect in Track 1. Enable MPE, and add a tempo 300 to trigger a sxformat 240 125 247 (shortest possible SysEx). Select No Input and IAC Bus 1 as output.
In Track 2, add MIDI Monitor as a MIDI Effect. Select Exquis (with MPE enabled) as input, and IAC Bus 2 as output.
Press and release keys on the Exquis, wiggling them to trigger MPE events, while observing an external MIDI Monitor app. Eventually, some MIDI activity dots to the right of the MIDI Monitor Effect will get stuck on, and the external MIDI Monitor will show a lack of new output to IAC Bus 2.
Notes:
This does not happen if I start a standalone instance of Max (in demo mode) to send the periodic SysEx messages. I have also observed Live ignoring all input from the Exquis after it sends a SysEx message, but I can no longer replicate that problem.
This is a serious bug that will negatively affect my willingness to purchase a license for Live.
I also noticed that the M4L midiout does quite a lot of processing on its input, instead of passing it through unmodified. It will reassign MPE channels, and add pitch bend or channel pressure events to a Note On event. It also seems to delete duplicate Note Off events. This is somewhat surprising, and I wish it were documented. It also provides more opportunity for bugs.
Has anyone else seen any of this, or have any ideas about it? Thanks.
This happens even if the SysEx M4L device isn't routed to a MIDI output at all.
Usually, this causes stuck notes, but events other than Note Off get lost or delayed as well. The blocking tends to happen when a large number of MPE events are generated in quick succession. A higher frequency of SysEx events tends to cause more blocking (300ms or shorter interval, but 900ms still causes problems).
Details:
Ableton Live 12.1 (in trial mode)
Max 8.6.5 (though this also happens with the bundled Max)
M2 MacBook Air, macOS Ventura 13.7
Intuitive Instruments Exquis, connected via USB
I'm working on getting custom note layouts on the Exquis to work in a M4L device. This requires periodic SysEx messages to keep it in an app-controlled mode, instead of its default standalone controller mode.
I can easily demonstrate this problem and produce traces via an external MIDI Monitor app and some IAC devices, using the Exquis for the high-rate MPE events. Not including the log because it's enormous, and will require annotation.
Steps to replicate:
In a new set, create a M4L MIDI Effect in Track 1. Enable MPE, and add a tempo 300 to trigger a sxformat 240 125 247 (shortest possible SysEx). Select No Input and IAC Bus 1 as output.
In Track 2, add MIDI Monitor as a MIDI Effect. Select Exquis (with MPE enabled) as input, and IAC Bus 2 as output.
Press and release keys on the Exquis, wiggling them to trigger MPE events, while observing an external MIDI Monitor app. Eventually, some MIDI activity dots to the right of the MIDI Monitor Effect will get stuck on, and the external MIDI Monitor will show a lack of new output to IAC Bus 2.
Notes:
This does not happen if I start a standalone instance of Max (in demo mode) to send the periodic SysEx messages. I have also observed Live ignoring all input from the Exquis after it sends a SysEx message, but I can no longer replicate that problem.
This is a serious bug that will negatively affect my willingness to purchase a license for Live.
I also noticed that the M4L midiout does quite a lot of processing on its input, instead of passing it through unmodified. It will reassign MPE channels, and add pitch bend or channel pressure events to a Note On event. It also seems to delete duplicate Note Off events. This is somewhat surprising, and I wish it were documented. It also provides more opportunity for bugs.
Has anyone else seen any of this, or have any ideas about it? Thanks.