[LAD] LV2 Achievement of GMPI Requirement

David Robillard d at drobilla.net
Wed Aug 8 00:48:57 UTC 2012

On Wed, 2012-08-08 at 09:28 +1200, Jeff McClintock wrote:
> > > My concept with GMPI (not everyone agreed) was that MIDI was not
> > > required *in* the plugin.
> > >  I decided the *host* should provide that routine (mapping MIDI to port
> value). Written once,
> > > available to every plugin developer.  
> > This is almost exactly what I proposed as an LV2 extension in this
> > previous thread - " In practice, however, there are a few border cases
> where the plugin
> > would want to indicate its default MIDI bindings".

The plugin indicating it's bindings is the *only* thing to do here.
Otherwise, the host can just bind however it wants.

It is a simple idea much older than that thread, just nobody has done it
yet.  Doing it statically is trivial: just set properties on ports to
indicate their binding.

Static is not so useful though, and control ports suck for a slew of
other reasons anyway, so this has not been established.  To do it right,
and dynamically, the things mentioned in my previous reply need doing

> Cool, I like it. I disagree that synthesisers are 'border cases' though ;)
> > The only real worry is that hosts will be unhappy of the "bloat" added
> > to the library they are using.  
> Yeah, Host developers want the 'bloat' in the plugins, plugin developers
> want the 'bloat' in the host.
> I think I good experiment is to imagine you have to write both an LV2 host
> and 100 LV2 plugins, and you have to write MIDI-binding code. Do you put it
> in the plugin OR the host?
> -If a feature consumes 100 kB RAM and disk space, and it's implemented on
> the host side - that's 100 kB.
> -If it's implemented on the plugins side, that's 100,000 kB.
> Which choice is more 'bloated'?
> A very real scenario is you write this MIDI-binding support, ship 50
> plugins, then 6 months later discover a bug. Now if that feature is in the
> host - that's one fix and everyone is happy. If that bug is in the 50
> plugins, already shipped to 1000 customers. Then you have a much bigger
> problem.
> It's not a question of 'bloat' YES/NO. The code has to go *somewhere*, there
> is only a tradeoff - HOST vs PLUGIN.
> My choice was to have very lightweight plugins, and a more sophisticated
> host.

Indeed.  *Global* "bloat" is, by far, the most important consideration.
If there is a One True Software Quality Metric, it is certainly lack of

That said, I don't think there would be any considerable bloat of any
variety related to the issues under discussion.

> The one other reason you want the host handling the MIDI Binding...
> > On Fri, 2012-06-08 at 09:45 +0000, Jeremy Salwen wrote:
> > > Currently, a plugin writer is in a bit of a sticky situation: if the
> > > plugin supports MIDI CC events, then the internal parameters are
> > > hidden from the host.  You can do something where you have a switch
> > > which toggles between MIDI CC control, and Control Port control, but
> > > this is not a fun thing to do, and I think it is additionally
> > > confusing for the user.
> True, a plugin's parameters can be set by many sources:
> * pre-recorded automation.
> * The user tweaking the GUI.
> * MIDI messages.

I think reality is being slightly misrepresented here: to be clear, it
is not common in LV2 land for plugins to support parameters via MIDI CC
in this way, for all the obvious reasons you have mentioned several
times.  Apparently that is common in the VST world, which is why you
want to "argue" for it, but I find that quite strange.  Clearly mystery
MIDI parameters in plugins is crap.

Which is to say: Yes, that is stupid; and no, that is not common LV2
practice, nor will it ever be.  Preaching to the choir, Jeff :)

LV2 synthesizers typically use MIDI *for notes* for lack of a better
standard at the moment, but not for parameters.

> What if they all happen at once? Only the host is in a position to mediate.
> For example if you click-down on a plugins GUI slider - you don't expect
> that slider to continue jumping arround in response to MIDI automation. The
> human is in control until the mouse-up happens, then automation resumes
> control. This is a host feature, it can only be implemented of the MIDI
> message is decoded by the host, the plugin can't be changing it's own
> parameters 'in secret'.

This will be an issue to consider if people want a graceful migration
path to events, i.e. events can be used to control the same parameter as
a control port (which is essentially exactly the same issue, except not

Personally I think it's not worth the effort (and don't really think
backwards compatibility gunk belongs in plugins whatsoever).

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <http://lists.linuxaudio.org/pipermail/linux-audio-dev/attachments/20120807/b155f5a0/attachment.pgp>

More information about the Linux-audio-dev mailing list