Livi
A library for hosting LV2 plugins.
Note: This is a work in progress and has not yet been full tested.
Supported LV2 Features
LV2 has a simple core interface but is accompanied by extensions that can add lots of functionality. This library aims to support as many features as possible out of the box.
http://lv2plug.in/ns/ext/urid#maphttp://lv2plug.in/ns/ext/urid#unmaphttp://lv2plug.in/ns/ext/options#optionshttp://lv2plug.in/ns/ext/buf-size#boundedBlockLength
Quickstart
Below is an example on how to run the mda EPiano plugin.
use livi;
let mut world = new;
const MIN_BLOCK_SIZE: usize = 1;
const MAX_BLOCK_SIZE: usize = 256;
const SAMPLE_RATE: f64 = 44100.0;
world
.initialize_block_length
.unwrap;
let mut worker_manager = default;
let plugin = world
// This is the URI for mda EPiano. You can use the `lv2ls` command line
// utility to see all available LV2 plugins.
.plugin_by_uri
.expect;
let mut instance = unsafe ;
if let Some = instance.take_worker
// Where midi events will be read from.
let input = ;
// Where parameters can be set. We initialize to the plugin's default values.
let params: = plugin
.ports_with_type
.map
.collect;
// This is where the audio data will be stored.
let mut outputs = ;
// Set up the port configuration and run the plugin!
// The results will be stored in `outputs`.
let ports = new
.with_atom_sequence_inputs
.with_audio_outputs
.with_control_inputs;
unsafe ;
// Plugins may push asynchronous works to the worker. When operating in
// Realtime, `run_workers` should be run in a separate thread.
worker_manager.run_workers;
Building, Testing, and Running
- Build -
cargo build - Test -
cargo test, requires mda LV2 plugins. - Run livi-jack -
cargo run --example livi-jack --release -- --plugin-uri=http://drobilla.net/plugins/mda/EPiano.