Phil Frost wrote: >> Now, what do I call the first dimension, *before* specifying what >> channel I'm talking about? How do I address "the Volume CCs of all 16 >> MIDI channels", or "the PFL buttons of all mixer strips?" I'd like a >> short, logical, non-confusing name for this, but I can't seem to >> think of one. > Parameter?
Attribute? (not to be confused with Buzz attribute, which is something totally different) Property? (both OO-lovers and OO-haters would perhaps hate me for it) Setting? Control/controller? (it might even reuse CC messages in case we use something similar to my fixed-size 8-byte MIDI Port record passing scheme - or control port numbers and extended record, just some ports would be flagged as "permits 2D addressing", you know what I mean?) Control sink? (that's just bad, too COM/DirectShow/GStreamer-like) Multifunction aftertouch? (that's bad as well, but I'm hoping to seed some ideas here) Articulation? I still don't think we know enough about different ways of doing per-note addressing, by the way, how the parameter numbers are presented to the host, if they should be the same parameters than normal ones or different, per-note parameters... Or how the "final" MIDI port spec should look like, either. <threadjack> And I think it should be decided on rather sooner than later, because otherwise Lars' first proposal (http://ll-plugins.nongnu.org/lv2/ext/MidiPort/) will become the de-facto standard - and while it's definitely a good start, some very simple improvements have been already proposed: - aligning records to 4 bytes (so that we don't have unexpected crashes on SPARC machines etc) - using 16:16 fixed point values instead of doubles (I've proposed an int, but 16:16 looks better) - float-typed control port value changes, to replace or supplement the outdated NRPNs - there are at least two flavours possible; the first one is adding extension record consisting of 32-bit int for parameter number and 32-bit float for parameter value, the second one is by reusing ctl1 and ctl2 or cmd and ctl1 of the basic event for LSB and MSB of 16-bit control port number, and adding an extension record consisting of 32-bit float. In fact I can think of a third one - giving both new float value and the per-sample increment, so that a linear change of a parameter over time can be communicated to a plugin. So we'd have: struct MIDIRecord { uint16_t timestamp_samples; uint16_t timestamp_fract; union { struct { uint8_t cmd, ctl1; // use when flags&1 == 0 }; struct { uint16_t param_num; // use when flags&1 == 1 }; }; uint8_t ctl2; // reserved when flags&1 uint8_t flags; // bit 0 set iff float extension record follows, bits 4-7 contain the second part of the "2D address" tuple }; // this follows the MIDIRecord is expected when flags & 1 struct MIDIRecordExtFloat { float new_value; float new_delta; // typically 0 unless we have a very smart host that does parameter smoothing :) }; Any unsolved problems and counterproposals? - and, maybe in the same spec, maybe in a "sibling" extension, the per-note control ports/2D addressing we're talking about now (I've included my 2D addressing solution in the proposal above, but I have no idea if this particular approach is OK for anyone else than me :) ). </threadjack> Krzysztof _______________________________________________ Linux-audio-dev mailing list [email protected] http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev
