[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-dev] SysEx bug proposition

Is there anyone who can test this? I have no way myself.


On Feb 5, 2008, at 6:11 AM, thelych wrote:

Hi All,

I posted yesterday an issue concerning the strange reception of sysex
messages by SuperCollider.
I know most people don't use SysEx but it was my only way to control
my old Waldork synth so i decided to look for the bug in the SC Code.
i have found two problems that were getting the sysex message to be
received improperly by SC (and to have some bytes duplicated for no
reason) so i wanted
to ask for confirmation.

The issue concern Mac OS X CoreMidi, as i do not have Linux i cannot
tell about SysEx for this platform.

In File SC_CoreMIDI.cpp

In Function midiProcessPacket (near line 180)

case 0xF0 :
midiProcessSystemPacket(pkt, chan);
//i += 1;
i += pkt->length; // PROPOSITION: in usual case data should contain
only the sysex message so it is better to stop iteration (instead of i
+=1) and avoid data duplication in the PyrArray

default :	// data byte => continuing sysex message
chan = 0;
midiProcessSystemPacket(pkt, chan);
//i += 1;
i += pkt->length; // PROPOSITION: same issue if we leave (i += 1)

In Function midiProcessSystemPacket (near line 75)

switch (chan) {
case 7: // PROPOSITION: 0xF7 Sysex EOX must be taken into account if
first on data otherwise it is missed by SC on the doSysexAction
case 0:
        sysexArray = newPyrInt8Array(g->gc, pkt->length, 0, true);
        memcpy(sysexArray->b, pkt->data, pkt->length);
        sysexArray->size = pkt->length;
        SetObject(g->sp, (PyrObject*) sysexArray);			// chan
argument unneeded as there
        runInterpreter(g, s_midiSysexAction, 3 );			// special sysex
action in the lang

May be midiProcessSystemPacket should return the number of packets
processed in data in order to be compliant with other MIDI Message
wich increments the index.
And the other System Common message do not return the number of
packets processed wich can lead to a disfunction too (if we imagine a
single packet data can contain multiple Midi Messages... but i've
never seen this case)
example in midiProcessPacket:
case 0xF0 :
i += midiProcessSystemPacket(pkt, chan);

thanks for your response and any comment back on this.
I just want to help. I know most of you are busy.

best regards
sc-dev mailing list

/* Joshua D. Parmenter

“Every composer – at all times and in all cases – gives his own interpretation of how modern society is structured: whether actively or passively, consciously or unconsciously, he makes choices in this regard. He may be conservative or he may subject himself to continual renewal; or he may strive for a revolutionary, historical or social palingenesis." - Luigi Nono