-
Notifications
You must be signed in to change notification settings - Fork 7
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
SYSEX troubles on nearly every platform #81
Comments
Thanks for trying it out on various platforms! I would not recommend Android: sounds like we need something like #53 for iOS/macOS (Native): I have some fixes to get I don't have iOS devices, and I thought I don't have any MIDI output device, so all what I thought I can do is to examine |
Hi! I'm using a couple of analog synthesizers, which send their program data via SysEx. Sequential Prophet 6 being the one I'm doing the most testing with. One program of the prophet is 1076 bytes (including the sysex start, headers and sysex stop). Looking forward to your iOS fixes! Side note: Android offers a nice way to test midi: You can connect your device via USB and then select the MIDI usb mode, so you can send midi from your pc to the android device. |
I thought you are talking about MIDI input devices, but now it seems you are talking about reproducible tests. How can I run reproducible tests without specific MIDI input devices that I don't have? Nevertheless, if there is any way to connect arbitrary MIDI devices on GitHub Actions servers then I would resort to that. |
I noticed that we should NOT handle this in Some devices receive farmware updates via SysEx messages, and the binary can be huge (like hundreds of megabytes). The sender and receiver do NOT want us (any intermediate MIDI access ports) to handle them buffered everywhere but handle the stream chunk only by themselves at the initiator and the destination. That means, it is up to the app's design decision on how to handle those chunked SysEx messages. What we would provide there instead is a consolidated SysEx chunk manager that can buffer any incomplete inputs and return "completed" chunks as new inputs appear, so that app developers like you don't have to deal with them by themselves. My current idea is like this:
Thoughts? |
I agree that this kind of processing is better done on the application level. Your Processor implementation is basically what I'm doing atm. Not sure about the best way to have the processor interact with |
That's a good catch. Maybe this would suffice?
You'd only need |
…ption. context: #81 Midi1Exception is not very special, just to avoid `throw Exception`.
v0.9.0 is released. It contains those changes ( Considering that all those reported issues are addressed, I will close this issue in a week or so, unless further issues are found. |
Closing as ^. Thanks for the report. |
Sorry for the delay, i was on vacation. I just tested the |
I should have added some dedicated tests for that...! Now it's done. Thanks for the catch! |
As stated in the title, I'm experiencing lots of troubles with SYSEX messages. Here's a summary:
Windows JVM
Works by default
MacOS JVM
MacOS Bug, their Java Midi implementation ignores SYSEX messages.
I could work around this by adding CoreMidi4J as a dependency and cloning
JvmMidiAccess
to use the library components. May I suggest adding this workaround to the library?Android
The Android platform splits up midi data in quite small chunks - and since the data I'm handling is a SysEx bulk of more than 1k Bytes, I need to check for the
Sysex start
byte - and if there's no Sysex End, keep and combine the received data bytes until I finally receive asysex end
byte. This is quite annoying. Not sure if this could happen on all platforms and android is the only one chunking the data stream in such small pieces or if the other platforms make sure they don't split SysEx messages in half.iOS
Both,
TraditionalMidiAccess
andUmpMidiAccess
just crash instantly upon trying to send a message. No solution/workaround yet, need to do some more debugging.I haven't tried Linux or any of the native targets yet.
The text was updated successfully, but these errors were encountered: