Lilv 0.24.4

Lilv 0.24.4 has been released. Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see


  • Don't attempt to load remote or non-Turtle files
  • Fix saving state when broken links are encountered
  • Gracefully handle plugins with missing binary URIs
  • Install Python bindings when configured without tests (thanks Clement Skau)
  • Remove use of deprecated readdir_r
  • lv2apply: Activate plugin before running
  • lv2apply: Use default values when they are not nan
  • lv2bench: Improve support for plugins with sequence ports
  • lv2bench: Support running a single plugin given on the command line

Suil 0.10.0

Suil 0.10.0 has been released. Suil is a library for loading and wrapping LV2 plugin UIs. For more information, see


  • Add suil_init() to support early initialization and passing any necessary information that may be needed in the future (thanks Stefan Westerfeld)
  • Add support for Qt5 in Gtk2
  • Add support for X11 in Gtk3
  • Fix building with X11 against custom LV2 install path (thanks Robin Gareus)
  • Fix minor memory errors

Jalv 1.6.0

Jalv 1.6.0 has been released. Jalv is a simple but fully featured LV2 host for Jack which exposes plugin ports to Jack, essentially making any LV2 plugin function as a Jack application. For more information, see


  • Add PortAudio backend (compile time option, audio only)
  • Add Qt5 version
  • Add command prompt to console version for changing controls
  • Add generic Qt control UI from Amadeus Folego
  • Add option to print plugin trace messages
  • Allow Jack client name to be set from command line (thanks Adam Avramov)
  • Exit GUI versions on interrupt
  • Exit on Jack shutdown (patch from Robin Gareus)
  • Fix memory error on preset save resulting in odd bundle names
  • Fix semaphore correctness issues
  • Fix unreliable UI state initialization (patch from Hanspeter Portner)
  • Improve preset support
  • Print colorful log if output is a terminal
  • Report Jack latency (patch from Robin Gareus)
  • Set Jack port order metadata
  • Support CV ports if Jack metadata is enabled (patch from Hanspeter Portner)
  • Support numeric and string plugin properties (event-based control)
  • Support thread-safe state restoration
  • Update UI when internal plugin state is changed during preset load
  • Use moc-qt4 if present for systems with multiple Qt versions

Lilv 0.24.2

Lilv 0.24.2 has been released. Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see


  • Fix comparison of restored states with paths
  • Fix saving state to paths that contain URI delimiters (#, ?, etc)

Suil 0.8.4

Suil 0.8.4 has been released. Suil is a library for loading and wrapping LV2 plugin UIs. For more information, see


  • Add Cocoa in Gtk wrapper (patch from Robin Gareus)
  • Add Gtk2 and X11 in Qt5 wrappers (patch from Rui Nuno Capela)
  • Bubble X11 key events up to Gtk parent (patch from Filipe Coelho)
  • Center X11 UIs in Gtk (patch from Robin Gareus)
  • Configure based on compiler target OS for cross-compilation
  • Fix a few minor/unlikely memory errors
  • Fix compilation with -Wl,--no-undefined
  • Fix initial size of resizable X11 UIs in Gtk (patch from Robin Gareus)
  • Gracefully handle failure to open wrapper
  • Only report suil_ui_supported() if necessary wrapper is compiled in
  • Upgrade to waf 1.8.14
  • Various Windows fixes (patches from Robin Gareus)

Sratom 0.6.0

Sratom 0.6.0 has been released. Sratom is a small library for serialising LV2 atoms to and from RDF, for converting between binary and text or storing in a model. For more information, see


  • Add sratom_set_env() for setting prefixes
  • Fix padding of constructed vectors (thanks Hanspeter Portner)
  • Fix warnings when building with ISO C++ compilers
  • Support round-trip serialisation of relative paths
  • Support sequences with beat time stamps
  • Upgrade to waf 1.8.14

Lilv 0.24.0

Lilv 0.24.0 has been released. Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see


  • Add lilv_state_set_metadata() for adding state banks/comments/etc (based on patch from Hanspeter Portner)
  • Add lilv_world_get_symbol()
  • Add lv2apply utility for applying plugins to audio files
  • Add new hand-crafted Pythonic bindings with full test coverage
  • Check lv2:binary predicate for UIs
  • Do not instantiate plugin when data fails to parse
  • Fix crash when NULL predicate is passed to lilv_world_find_nodes()
  • Fix crash when state contains non-POD properties
  • Fix documentation installation
  • Fix loading dyn-manifest from bundles with spaces in their path
  • Fix outdated comment references to lilv_uri_to_path()
  • Fix state file versioning
  • Replace bundles if bundle with newer plugin version is loaded (based on patch from Robin Gareus)
  • Support re-loading plugins
  • Unload contained resources when bundle is unloaded

Git migration

I have finally migrated all of my software to git. This was not a very fun process due to the nested nature of my "drobillad" repository, but now all projects live in their own git repositories with history and tags from SVN preserved.

It is still possible to build all my audio software in one step, the top-level repository is now a skeleton with git submodules for each project. Anyone using SVN should switch immediately, the SVN repositories will remain in their current state for the foreseeable future but all development activity will move to git.

All the repositories are available in cgit, but changes and tickets and so on are in Trac as always. Happy hacking.

Lilv 0.22.0

Lilv 0.22.0 has been released. Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see


  • Add lilv_file_uri_parse() for correct URI to path conversion
  • Add lilv_free() for systems picky about such things
  • Add lilv_node_get_path() for convenient file URI path access
  • Add lilv_state_delete() for deleting user saved presets
  • Add lilv_state_emit_port_values() for special port value handling
  • Add lilv_state_get_uri()
  • Configure based on compiler target OS for cross-compilation
  • Expose lilv_world_load_specifications() and lilv_world_load_plugin_classes()
  • Fix a few minor/unlikely memory errors
  • Fix bindings for Python 3
  • Fix creation of duplicate manifest entries when saving state
  • Fix directory walking on some systems (thanks Matt Fischer)
  • Fix lilv_realpath() on pre-POSIX-2008 systems
  • Fix lilv_world_ask() to work with wildcards
  • Fix loading files with spaces in their path
  • Load discovered owl ontologies as specifications
  • Minor documentation improvements
  • Preserve absolute paths in state if no link directory is given
  • Tolerate passing NULL to lilv_state_restore()
  • Upgrade to waf 1.8.14
  • Windows fixes (thanks John Emmas)

LV2 Plugin Control Units in Ardour

LV2 has had a "units" extension since the beginning, which allows plugins to specify units like Hz or dB for their controls. To date this information has not been used very widely by hosts, so I've done some work in Ardour to use this information for better UI generation and intelligent plugin control.

Units can specify a format string which describes how to print a value in that unit. This is now used to draw the text on control sliders:

An Ardour control dialog for an LV2 plugin.

The same controls are used in automation lane headers. If the control is a note number, then right-clicking will present a menu with an option to pop up a note selector dialog where the value can be chosen on a piano keyboard:

The select note menu on a note number port.

The Ardour note selector dialog.

Similarly, numeric frequency controls have a context menu which can set the value to a specific number of beats in the current tempo, if the frequency range is low:

Setting a low frequency port in beats.

If the frequency range is high, then numeric frequency ports can be set with the note selector dialog just like note numbers:

Setting an audible frequency port by note.

In the future, it would be nice to have this idea applied more extensively so automation lanes can "pretend" a port is in the desired unit, for example allowing the user to automate an LFO frequency in beats, or a cutoff frequency in notes. Until then, being able to at least easily set controls to musically sensible values makes many production tasks easier, particularly in electronic music where it's often desirable to set plugin controls based on key or tempo.

Up next is setting time ports based on tempo, for cases like setting delay lines to a certain number of beats, but many plugins are missing the unit information required to make this possible. Hopefully better and more widespread host support will provide some incentive for plugin authors to specify the units of their ports. It is very simple to do so, see the LV2 units documentation for examples.

« Page 2 / 10 »