<Sound Dev> Midi Strange behavior on MacOSX.
guillaume
schmidg at free.fr
Mon Dec 10 07:19:10 PST 2012
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.
More information about the sound-dev
mailing list