Martin,
Thank you so much for the info. I have confirmed this using kmidimon, and getting ready to send actual messages to my hardware with one hand while I type with the other.
Now I am curious, if this was fixed by a recently posted patch, how come it was not mentioned earlier?
Maybe I am just not fully aware of how CVS or SVN work.
-- David Shimamoto
So I tried [240, 1, 247( | [midiout] on Pd 0-42-0test1 and the message shows up on the MIDI plug. It also works to send one byte at a time. But with Pd0.40.3-extended20080324 it doesn't work, although [noteout] and [ctlout] work fine. This is with ALSA-MIDI and Jack. Martin
PSPunch wrote:
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
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list