diff options
Diffstat (limited to 'doc/c/plugins.rst')
-rw-r--r-- | doc/c/plugins.rst | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/doc/c/plugins.rst b/doc/c/plugins.rst deleted file mode 100644 index c7ad547..0000000 --- a/doc/c/plugins.rst +++ /dev/null @@ -1,94 +0,0 @@ -.. - Copyright 2020-2022 David Robillard <d@drobilla.net> - SPDX-License-Identifier: ISC - -.. default-domain:: c -.. highlight:: c - -####### -Plugins -####### - -After bundles are loaded, -all discovered plugins can be accessed via :func:`lilv_world_get_all_plugins`: - -.. code-block:: c - - LilvPlugins* plugins = lilv_world_get_all_plugins(world); - -:struct:`LilvPlugins` is a collection of plugins that can be accessed by index or plugin URI. -The convenicne macro :macro:`LILV_FOREACH` is provided to make iterating over collections simple. -For example, to print the URI of every plugin: - -.. code-block:: c - - LILV_FOREACH (plugins, i, list) { - const LilvPlugin* p = lilv_plugins_get(list, i); - printf("%s\n", lilv_node_as_uri(lilv_plugin_get_uri(p))); - } - } - -More typically, -you want to load a specific plugin, -which can be done with :func:`lilv_plugins_get_by_uri`: - -.. code-block:: c - - LilvNode* plugin_uri = lilv_new_uri(world, "http://example.org/Osc"); - - const LilvPlugin* plugin = lilv_plugins_get_by_uri(list, plugin_uri); - -:struct:`LilvPlugin` has various accessors that can be used to get information about the plugin. -See the :doc:`API reference <api/lilv_plugin>` for details. - -********* -Instances -********* - -:struct:`LilvPlugin` only represents the data of the plugin, -it does not load or access the actual plugin code. -To do that, you must instantiate a plugin to create :struct:`LilvInstance`: - -.. code-block:: c - - LilvInstance* instance = lilv_plugin_instantiate(plugin, 48000.0, NULL); - -Connecting Ports -================ - -Before running a plugin instance, its ports must be connected to some data. -This is done with :func:`lilv_instance_connect_port`. -Assuming the plugins has two control input ports and one audio output port, -in that order: - -.. code-block:: c - - float control_in_1 = 0.0f; - float control_in_2 = 0.0f; - - float audio_out[128]; - - lilv_instance_connect_port(instance, 0, &control_in_1); - lilv_instance_connect_port(instance, 1, &control_in_2); - lilv_instance_connect_port(instance, 2, &audio_out); - -Processing Data -=============== - -Once the ports are connected, the instance can be activated and run: - -.. code-block:: c - - lilv_instance_activate(instance); - - lilv_instance_run(instance, 128); - // Copy buffers around and probably run several times here... - - lilv_instance_deactivate(instance); - -Once you are done with an instance, -it can be destroyed with :func:`lilv_instance_free`: - -.. code-block:: c - - lilv_instance_free(instance); |