[PD] Getting Sysex output to work on Linux

Martin Peach martin.peach at sympatico.ca
Tue May 27 05:33:11 CEST 2008

PSPunch wrote:
> Martin,
>> I'm looking at the source code in svn, assuming you use [midiout] to 
>> send sysex.
>> The midiout object has one method, for floats : midiout_float(), in 
>> x_midi.c, line 681.
>> It just calls outmidi_byte() in s_midi.c, line 239. If Pd was compiled 
>> with USEAPI_ALSA defined, then outmidi_byte calls sys_alsa_putmidibyte() 
>> in s_midi_alsa.c line 234, otherwise it calls sys_putmidibyte() in 
>> s_midi_oss.c line 182.
> Do you mean that theoretically, Pd + ALSA MIDI should be working?
> hmmm...

Well it looks like it should but I just tried with a scope on the cable 
and got messages using [noteout] but nothing using [midiout] with alsa 
midi and jack. I tried sending bytes singly and in comma-separated 
messages as well as just lists. Nothing comes out.

> According to IOhannes,
>> the problem is rather, that ALSA sequencer does not support MIDI in a
>> way Pd would like it, mainly: no raw midi.

Yes, it looks like the ALSA function  being called expects a complete 
sysex message but instead it's getting one byte at a time. I guess Pd 
should buffer the message until it gets an F7 (End of Exclusive) and 
then send the whole thing as one packet. Not too difficult except for 
anticipating what the the maximum message size is going to be. Maybe a 
[sysexout] object that takes lists of bytes (and inserts the F0 and F7) 
is in order...

> Also I think one of the recent posts which I cannot locate now,
> mentioned that it was just a matter of Pd using a function in ALSA API
> other than what is used at the moment.

Well I think it's better to send a complete sysex packet, otherwise it 
could be trashed by a noteout or similar that occurs before the F7 goes 
out. Really Pd should buffer the packet and only then send it to ALSA.


More information about the Pd-list mailing list