LV2 Toolkit
1.2.0
|
#include <lvtk/plugin.hpp>
Public Member Functions | |
Plugin (uint32_t ports) | |
void | connect_port (uint32_t port, void *data_location) |
void | activate () |
void | run (uint32_t sample_count) |
void | deactivate () |
bool | check_ok () |
Static Public Member Functions | |
static unsigned | register_class (const char *uri) |
Protected Member Functions | |
template<typename T > | |
T *& | p (uint32_t port) |
float *& | p (uint32_t port) |
const char * | bundle_path () const |
void | set_ok (bool ok) |
Protected Attributes | |
std::vector< void * > | m_ports |
This is a template base class for LV2 plugins. It has default implementations for all functions, so you only have to implement the functions that you need (for example run()). All subclasses must have a constructor whose signature matches the one in the example code below, otherwise it will not work with the register_class() function. The host will use this double
parameter to pass the sample rate that the plugin should run at when it creates a new instance of the plugin.
This is a template so that simulated dynamic binding can be used for the callbacks. This is not all that useful for simple plugins but it may come in handy when using mixins and it doesn't add any additional vtable lookup and function call costs, like real dynamic binding would.
If the above code is compiled and linked with @c -ldaps-plugin0 into a shared module, it could form the shared object part of a fully functional (but not very useful) LV2 plugin with one audio input port and one audio output port that just copies the input to the output. You can extend your plugin classes, for example adding support for LV2 extensions, by passing @ref pluginmixins "mixin classes" as template parameters to plugin (second template parameter and onwards). If you want to write a synth plugin you should probably inherit the Synth class instead of this one.
|
inline |
This constructor is needed to initialise the port vector with the correct number of ports, and to check if all the required features are provided. This must be called as the first item in the initialiser list for your plugin class.
ports | The number of ports in this plugin. |
|
inline |
Override this function if you need to do anything on activation. This is always called before the host starts using the run() function. You should reset your plugin to it's initial state here.
|
inlineprotected |
Returns the filesystem path to the bundle that contains this plugin. This may only be called after the plugin constructor is done executing.
|
inline |
Connects the ports. You shouldn't have to override this, just use p() to access the port buffers.
If you do override this function, remember that if you want your plugin to be realtime safe this function may not block, allocate memory or otherwise take a long time to return.
port | The index of the port to connect. |
data_location | The buffer to connect it to. |
|
inline |
Override this function if you need to do anything on deactivation. The host calls this when it does not plan to make any more calls to run() (unless it calls activate() again).
|
inlineprotected |
Use this function to access and cast port buffers, for example like this:
If you want to access a port buffer as a pointer-to-float (i.e. an audio or control port) you can use the non-template version instead.
port | The index of the port whose buffer you want to access. |
|
inlineprotected |
Use this function to access data buffers for control or audio ports.
port | The index of the port whose buffer you want to access. |
|
inlinestatic |
Use this function to register your plugin class so that the host can find it. You need to do this when the shared library is loaded by the host. One portable way of doing that is to put the function call in the initialiser for a global variable, like this:
The return value is not important, it's just there so you can use that trick.
|
inline |
This is the process callback which should fill all output port buffers. You most likely want to override it - the default implementation does nothing.
Remember that if you want your plugin to be realtime safe, this function may not block, allocate memory or take more than O(sample_count) time to execute.
sample_count | The number of audio frames to process/generate in this call. |
|
inlineprotected |
Sets the OK state of the plugin. If it's true
(which is the default) the plugin has been instantiated OK, if false
it has not and the host will discard it. You can call this in the constructor for your plugin class if you need to check some condition that isn't taken care of by a mixin.
ok | True if the plugin instance is OK and can be used, false if it should be discarded. |