Re: [LAD] Terminology problem

From: Krzysztof Foltman <wdev@email-addr-hidden>
Date: Thu Nov 15 2007 - 12:43:00 EET

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
Linux-audio-dev@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev
Received on Thu Nov 15 16:15:01 2007

This archive was generated by hypermail 2.1.8 : Thu Nov 15 2007 - 16:15:02 EET