[Bug 18764] MIDI messages don't all have a channel, and status should be part of data.

https://www.w3.org/Bugs/Public/show_bug.cgi?id=18764

--- Comment #27 from Chris Wilson <cwilso@gmail.com> 2012-09-10 16:50:26 UTC ---
(In reply to comment #25)
> Regarding the controllerist world:
> Check out the MIDI spec of 50 controllers: I predict at least 45 of them
> require Sys Ex for configuration and often for real time control. Your
> Launchpad is one of the few control surfaces which does not use Sys Ex at all.
> For any GM synth, to send master volume, you need Sys Ex.

I fully understand the Launchpad is special in that it doesn't have
configuration controlled through sysex - it has remapper software.  It's not my
only controller, by a long shot - not even the only one that doesn't use sysex
- but I'd also point out the whole point of those controllers (like my Livid
CNTRLR) that use sysex for remapping is so that developers can write software
that just deals with straight controller and key mappings, and not have to
write the manufacturer-specific sysex.

I've 
> 
> > And my crescent wrench makes a pretty good hammer, too.
> 
> :) but what's the point? For the user who only sends 3 byte messages, it's
> totally irrelevant, and functionally equivalent, if the method is declared with
> up to 3 args or with var args. If it looks like a hammer, and works like a
> hammer, everybody is happy!

I think we are conflating two issues, and that's not my intent.

Issue 1) I feel very strongly that the three-byte simplistic send is an
extremely common case, and should be as trivial as possible (i.e. having to
wrap an object and an array around those bytes is unnecessary and confusing to
developers).

Issue 2) Assuming some simplistic, non-object-based send call is there for
sending common MIDI messages, there is the issue of whether the variadic or
optional forms should be used to describe it.  (AKA: is the simple form for
messages of up to three bytes, or of arbitrary lengths?)  Here, I feel that
using variadic encourages developers to use the simple form in cases where it's
not really ideal; however, I frankly don't care that much.  I think it's a bit
silly to use here, when my point is simply to optimise for an obvious common
case (all those note on/off and controller messages, e.g.), not to improve
sending arbitrary sysex (which I think will likely be in arrays already, given
how sysex is typically used).  I disagree with using variadic here; I don't
disagree to the point of taking my tricycle and going home, however.

I was referring to issue 1 when I made the crescent wrench comment - NOT
whether the variadic or optional form was used.

> > As to the various "performance isn't important here" comments - performance is
> > always important.  But my point was really intended to be around the mental
> > overhead of having to create two wrapper objects around three bytes of data.
> 
> I agree, too, but still I don't see the point of limiting it to 3 bytes. With
> the variadic form, you'll get the performance and the mental optimization...

See above - I think the cases when you're sending sysex are different in
nature.  Sysex messages tend to have a lot more than a single byte identifying
what type of message they are, and therefore will likely have to have a
boilerplate header in the code somewhere, likely as an array, already.  Again,
this is not my highest-priority concern.

> At the time, devices wouldn't keep up with original MIDI
> speed. But they'd send out their bulk dumps slowly, too, so you wouldn't notice
> if you just record it in a sequencer and play it back. Nowadays, the processors
> in the devices are faster, but using USB can get them more bandwidth, too. I
> publish a MIDI bulk dump program, and based on customer feedback and support
> requests, its "throttling" mechanism is quite important. It splits up big Sys
> Ex messages.

Ick.  I had not realized that inside a single sysex message, common devices
could not keep up; I knew some devices broke up their bulk dumps into chunks
and sent the chunks slowly, relying on sequencer playback timing to keep it
slowed down.  That will be unfortunate, then, and we'll have to allow partial
sysex messages in MIDIMessage, a la CoreMIDI.

-- 
Configure bugmail: https://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.

Received on Monday, 10 September 2012 16:50:31 UTC