[LV2] should plugins somehow indicate whether they support MPE?

Hanspeter Portner dev at open-music-kontrollers.ch
Sat Jun 17 08:39:08 PDT 2017

On 17.06.2017 13:04, Stefan Westerfeld wrote:
>    Hi!
> I don't know if that affects other plugins (yet), but the next version of
> SpectMorph will support MPE (Multidimensional Polyphonic Expression). That way
> a host can change parameters individually of notes that are already playing.

LV2 parameters/controls for hosts are strict singletons, there is no notion of
neither polyphony nor per-note parameters/controls.

But you can of course support that internally in your plugin.

> What I implemented so far in SpectMorph is changing the pitch. Unlike
> conventional pitch-bend messages, this allows users to bend each note
> individually. So you could slide from a C major chord to D minor. Obviously in
> this case, a per-note-pitch UI like Bitwig provides - which I used for
> developing and testing - makes sense.

How do you plan to implement the MPE controller messages (e.g. pressure/timbre
in MPE terms). Would you take the current singleton lv2:Control/Parameter value
as initial value for each new note and overwrite it accordingly to MPE
controller messages? What if the initial parent lv2:Control/Parameter is changed
by the host simultaneously? Just curious.

> In VST, my plugin reacts to a new canDo("MPE"), to indicate to hosts with MPE
> support that MPE messages should be sent (like per-note pitch bend). Bitwig for
> instance will not send any MPE messages to the plugin unless this canDo is
> supported.
> Since MPE is midi-only, my LV2 plugin will automatically support MPE now.  I
> wonder if it should somehow in the plugin description indicate that it does.

Suport could be annotated on the port with an atom:suppports property.

  a lv2:Plugin ;

  lv2:port [
    a lv2:InputPort, atom:AtomPort ;
    lv2:index 0 ;
    lv2:symbol "myPort" ;
    atom:bufferType atom:Sequence ;
    atom:supports midi:MidiEvent, midi:MpeMessage ;
  ] .

And midi.ttl be extended with a definition of midi:MpeMessage

  a rdfs:Class ;
  rdfs:subClassOf midi:MidiEvent ;
  rdfs:label "Multidimensional Polyphonic Expression" .

> I don't know any LV2 host that supports MPE so far, so if the LV2 strategy for
> MPE would be wait until we have at least one host which supports MPE, and then
> discuss negotiation, that would be ok for me, too
Or better: wait until the MPE spec actually is finalized. Currently the draft is
under (closed) consideration by the MIDI association, iirc, and it may well
change. Once something is in the LV2 spec, it cannot (easily) be changed...

I'm pretty interested in polyphonic expression, but the MPE draft is terribly
broken, as it only allows 15!!! concurrent notes at max.

More information about the Devel mailing list