[LV2] LV2 + midnam

Robin Gareus robin at gareus.org
Tue Nov 1 11:48:18 PDT 2016

On 10/29/2016 02:56 AM, Robin Gareus wrote:
> The simplest is probably to pass around .midnam files.
> Since mappings in plugins can change dynamically a LV2 extension:
>  - host asks plugin for the midnam
>  - plugin can ask host to re-read it.
> The nice part is that most DAWs and sequencers already support midnam.

Here's a first draft (working prototype in ardour-git 5.4-249-ge08c803)

#define LV2_MIDNAM_URI "http://ardour.org/lv2/midnam"
#define LV2_MIDNAM__interface LV2_MIDNAM_PREFIX "interface"
#define LV2_MIDNAM__update LV2_MIDNAM_PREFIX "update"

typedef void* LV2_Midnam_Handle;

/** a LV2 Feature provided by the Host to the plugin */
typedef struct {
  /** Opaque host data */
  LV2_Midnam_Handle handle;
  /** Request from run() that the host should re-read the midnam */
  void (*update)(LV2_Midnam_Handle handle);
} LV2_Midnam;

typedef struct {
  /** Query midnam document. The plugin
   * is expected to return a null-terminated XML
   * text which is a valid midnam description
   * (or NULL in case of error).
   * The midnam <Model> must be unique and
   * specific for the given plugin-instance.
  char* (*midnam)(LV2_Handle instance);

  /** The unique model id used in the midnam,
   * (or NULL).
  char* (*model)(LV2_Handle instance);

  /** free allocated strings. The host
   * calls this for every value returned by
   * \ref midnam and \ref model.
  void (*free)(char*);
} LV2_Midnam_Interface;

More information about the Devel mailing list