Hello! I am writing an application that talks via midi/usb to a guitar effect (Eleven Rack). I provide it for free and I have users on Linux, windows and Mac. The device sens big sysex messages of more that 1 kb on certain circumstances and the behavior on different platform is the following:
- Linux: receives 1 big sysex message each time. - Windows : Receives multpiple sysex messages. The first one is a regular sysex (F0...F7) and one or more SPECIAL_SYSEX (F7...F7). I was surprised but it seems from reading midi specs that it is the right behavior for split sysexes. - MacOSX: Receives 1 incomplete sysex (F0...F7) and then nothing... the other messages are discarded somwhere... I am not a Java expert and I never try to compile Java myself, (this is my first java application). But I had a look at the source file src/macosx/native/com/sun/media/sound/PLATFORM_API_MacOSX_MidiUtils.c and saw that line 375 that Sysexes that starts with F7 are discarded. As I understand the specs, some continued messages can start with F7 and end with F7. So maybe the solution is to arrange the code this way: switch (byte) { case 0xF0: case 0xF7: // System exclusive // Allocates a CFMutableData reference to accumulate the SysEx data until EOX (0xF7) is reached. handle->readingSysExData = CFDataCreateMutable(NULL, 0); break; So that messages starting with F7 outside of a sysex message are considered as sysex start. Is there a way to rebuild only this part of the library to try on a mac? I borrowed a mac, installed Java 1.7 (downloaded from oracle) and I have the developper tools (clang as a compiler, I think). I would like to test the solution. Sorry, it may be a naive question, but as a java beginner, the jdk sources are really intimidating... Yours, Guillaume.