LWN.net Logo

The LV2 Audio Plugin Standard

By Forrest Cook
January 22, 2008

LADSPA, Richard Furse's Linux Audio Developer's Simple Plugin API, provides a plug-in framework for software audio effects. LADSPA applications are divided into two categories, host applications and plugins. From the LADSPA site:

LADSPA is a standard that allows software audio processors and effects to be plugged into a wide range of audio synthesis and recording packages. For instance, it allows a developer to write a reverb program and bundle it into a LADSPA "plugin library." Ordinary users can then use this reverb within any LADSPA-friendly audio application. Most major audio applications on Linux support LADSPA.

Recently, the LV2 Audio Plugin Standard was announced by Dave Robillard, the aim of LV2 is to replace LADSPA:

LV2 is a standard for plugins and matching host applications, mainly targeted at audio processing and generation. LV2 is a simple but extensible successor of LADSPA. intended to address the limitations of LADSPA which many applications have outgrown. While LADSPA has been quite successful with many plugins and hosts, it is quite limited and can't be extended without breaking existing implementations. LV2 in contrast is designed with extensibility in mind right from start.

One of the LADSPA limitations comes from the use of fixed data fields in the plugin binaries. LV2 defines its plugin data by using the Resource Description Framework (RDF) standard. This allows for a much wider variety of plugin data definitions. The RDF files also allow for the inclusion of multiple string definitions, which allows for plugin internationalization. The core LV2 code is intentionally designed to be small and generic, while allowing for support of independently designed extensions.

Plugin identification has been changed from an ID number to a URI, this allows for extended capabilities such as the reference or fetching of plugins across the network. While LADSPA only used floating point numbers for port connections, LV2 supports port type extensions. This can be used to handle MIDI, OSC (OpenSound Control), frequency domain and other types of data. LV2 bundles of all of the data for each plugin into a single directory for easy access. As with ALSA, the actual lv2 core specification is relatively simple, the lv2core-1.tar.gz source file consists of a C header file, some build files and documentation.

Several software packages were released at the same time as the LV2 standard announcement. SLV2 0.4.2 is a C library that is used to access the LV2 plugins: "Unlike LADSPA, LV2 is (more or less) designed with the assumption that hosts will use a library to discover/load/use plugins. SLV2 is one such library, which does the Right Thing with as little burden on host authors as possible." The lv2dynparam extension and helper was also announced: "The extension consists of a header describing the extension interface and libraries, one for plugins and one for hosts, to expose functionality in more usable, from programmer point of view, interface."

Three LV2 compatible plugins were also announced by author Nedko Arnaudov, these include the lv2vocoder version 1, Simple Sine Generator 20080109 and zynadd plugin version 1. Arnaudov also released zynjacku version 1, a JACK based GTK2 host for LV2 synthesizers. The success of LV2 will revolve around its adoption by one or more of the major LADSPA applications, as well as the conversion of more LADSPA plugins. Conceptually, LV2 seems like a step forward for the Linux audio plugin architecture.


(Log in to post comments)

OT

Posted Jan 31, 2008 11:15 UTC (Thu) by jfj (guest, #37917) [Link]

Offtopic. (I wish there was a section we could comment on the entire weekly issue), I post
here because it's relevant to development.

Qemu 0.9.1 is out. The software that made KVM, Xen and VirtualBox possible. Please mention
honorably.

If I missed it, I apologize in advance.

Copyright © 2008, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds