The CMT LADSPA plugin collection is written in C++ and uses a little additional sophistication to make plugin writing easier. This document describes how to add a new plugin to the toolkit.
At the moment CMT is not under public version control, so please send changes to Richard Furse.
CMT plugins interpret LADSPA_Handle entities as
pointers to objects derived from the CMT_PluginInstance
class. Plugin instance structures are defined by subclassing this, so
writing a descendent of CMT_PluginInstance is the first
thing to do. The CMT library provides its own implementation of
connect_port(), cleanup() and a templated
form of instantiate() (see
CMT_Instantiate<>()). These calls assume that any
instantiation or cleanup mechanisms required will be written in the
constructor or destructor of the class.
When writing a plugin module, an initialisation function should be
included. To ensure this is called, add a call to the
initialise_modules() function in
descriptor.cpp. The module should also be added to the
makefile.
Your initialisation function should construct new
CMT_Desctiptor plugin descriptor structures and pass them
to registerNewPluginDescriptor(). The
CMT_Descriptor is directly descended from
LADSPA_Descriptor but provides constructor, destructor
and addPort() methods.
All plugins need unique IDs. During development, use values between
1 and 1000. When the plugin is ready, please request an ID from ladspa@muse.demon.co.uk. Please
also add a brief description of your module to plugins.html.
In practice, CMT plugin writing is probably best learned by
example. For a simple case, see the mixer.cpp
module. This defines a SimpleMixer class to handle
instance data, a runSimpleMixer() function for use with
it and a mixer_descriptor() function to provide a
description of the plugin to the CMT core. The
mixer_descriptor() function is declared and referenced in
the descriptor.cpp module. Additional information is
available in cmt.h and ladspa.h.
CMT plugins are licenced under GPL version 2. Please read and understand this license before submitting plugins to the library.