[][src]Crate lv2rs

This is a safe and idiomatic re-implementation of some LV2 libraries, with the goal of being compatible to existing hosts written in C and providing an easy-to-use interface for plugin implementors.

Why "re-implemention", not "wrapping" or "binding"?

In most cases, adaptations of C libraries for Rust are split into two crates: One provides a raw interface to the library and one adapts them for idiomatic use. The reasoning behind this is that some may want to directly interact with library for extra performance and therefore, translation and adaptation should be split.

Except, in the case of LV2, this does not really make sense: The LV2 library only consists of type defintions and the only provided functions are inlined utility functions, which make little to no sense to use in Rust. I therefore translated the struct and function definitions and built Rust-style utilities around them. This get's closer to a re-implementation of the library than to a binding and therefore, I named this crate "re-implementation".

What works, what doesn't?

Currently, only the core library is implemented: You can create a plugin which can send and receive audio data as well as paramaters, given as floating point numbers. That's not much, but it's the foundation of everything else to come.

The next libraries I'm going to implement are URID, Atom and Midi, which should cover almost any use cases of LV2. I would consider this re-implementation done when one can write every example in the LV2 Book using this library.

Re-exports

pub extern crate lv2rs_core as core;