Does anyone have any opinion on the specs suggested by Martin? Should [sysexout] behave in this manner, or would it be more suitable to make this a new object rather than over write the conventional object for compatibility?
I have no idea if I will be skilled to fix this in the near future, but I really would love to see some of my MIDI controllers in action.
-- David Shimamoto
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.
Martin