Posts

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.

Jalv 1.4.6

Jalv 1.4.6 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 http://drobilla.net/software/jalv.

Changes:

  • Add option to print control output changes to stdout
  • Add support for data-access extension (based on patch by Filipe Coelho)
  • Generate Qt moc nonsense at build time for broader compatibility
  • Set port pretty names via new Jack metadata API
  • Show newly saved presets in the preset menu
  • Support new UI show/hide interface in console version
  • Support saving the same preset several times
  • Update for latest LV2 Atom Object simplifications
  • Update man pages and console jalv help output for new options
  • Upgrade to waf 1.7.16

Ganv 1.4.2

Ganv 1.4.2 has been released. Ganv is an interactive Gtk canvas widget for graph-based interfaces (patchers, modular synthesizers, finite state automata, interactive graphs, etc). For more information, see http://drobilla.net/software/ganv.

Changes:

  • Fix bug where edges would not update when nodes are moved after the canvas is cleared (fix stuck connections in Patchage after refresh).
  • Upgrade to waf 1.7.16

Lilv 0.20.0

Lilv 0.20.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 http://drobilla.net/software/lilv.

Changes:

  • Add convenient lilv_new_file_uri for creating file URIs
  • Add lilv_world_unload_bundle() and lilv_world_unload_resource()
  • Call lv2_lib_descriptor separately for different bundle paths (fix loading several dynamic plugins like Ingen at once)
  • Don't load files multiple times if they are listed as rdfs:seeAlso for several plugins
  • Fix issues with lilv_plugin_get_author_name and friends (thanks Filipe Coelho)
  • Fix several minor memory leaks
  • Fix use of lv2info -m and -p options to write plugin data (useful for porting plugins bridges with NASPRO)
  • Improve test coverage
  • Improved/working lv2_apply.py to apply plugin to a .wav (thanks Joe Button)
  • Tolerate calling lilv_node_as_uri or lilv_node_as_blank on NULL
  • Upgrade to waf 1.7.16

Suil 0.8.2

Suil 0.8.2 has been released. Suil is a library for loading and wrapping LV2 plugin UIs. For more information, see http://drobilla.net/software/suil.

Changes:

  • Add configure options to disable all Gtk or Qt support
  • Fix embedding several Qt UIs in Gtk
  • Upgrade to waf 1.7.16

Sratom 0.4.6

Sratom 0.4.6 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 http://drobilla.net/software/sratom.

Changes:

  • Don't set eg prefix in sratom_to_turtle
  • Update for latest LV2 Atom Object simplification
  • Upgrade to waf 1.7.16

Sord 0.12.2

Sord 0.12.2 has been released. Sord is a lightweight C library for storing RDF statements in memory. For more information, see http://drobilla.net/software/sord.

Changes:

  • Fix iteration over an entire graph (* * * graph)
  • Update to waf 1.7.16
  • sordmm.hpp: Remove unused members

Serd 0.20.0

Serd 0.20.0 has been released. Serd is a lightweight C library for RDF syntax which supports reading and writing [Turtle][], [TriG][], [NTriples][], and [NQuads][]. Serd is suitable for performance-critical or resource-limited applications, such as serialising very large data sets or embedded systems.

Changes:

  • Add -lm to pkg-config libs
  • Correctly handle posix_memalign failure
  • Don't write xsd:decimal literals to Turtle bare if they would not be read back with the same type
  • Fix const-correctness violation for reader input string
  • Fix possible crash in serd_writer_end_anon() when writing invalid lists
  • Generate blank names like :b1 and :B2 not :genid1 :docid2
  • Support new RDF 1.1 Turtle
  • Update to waf 1.7.14

Patchage 1.0.0

Patchage 1.0.0 has been released. Patchage is a modular patch bay for Jack and ALSA based audio/MIDI systems.

Changes:

  • Allow removing connections by selecting their handle and pressing delete
  • Fix font configuration on OSX
  • Integrate with Mac menu bar on OSX
  • Make port colours configurable
  • Remove LASH support and simplify UI
  • Remove Raul dependency
  • Support for DOT export for rendering with GraphViz
  • Support port pretty names via new Jack metadata API
  • Switch from FlowCanvas to Ganv (much improved looks and performance)
  • Use Mac style key bindings on OSX
  • Use XDG_CONFIG_HOME instead of ~/.patchagerc

Ganv 1.4.0

Ganv 1.4.0 has been released. Ganv is an interactive Gtk canvas widget for graph-based interfaces (patchers, modular synthesizers, finite state automata, interactive graphs, etc). For more information, see http://drobilla.net/software/ganv.

Changes:

  • Add Connection::set_curved()
  • Add ability to select connections by their handles, either individually or in groups with rect select.
  • Add ability to select connections directly
  • Add font size API
  • Adjust padding and placement to precisely fit text
  • Begin using library and pkg-config names suitable for parallel installation. This version of flowcanvas is flowcanvas-1 and is NOT compatible with previous versions
  • Clean up API and improve documentation.
  • Clean up API/ABI by hiding private implementations.
  • Dramatically increase performance by rendering text manually rather than using the truly awful Gnome::Canvas::Text.
  • Fix lingering handle when deleting connections
  • Further slight improvements in memory consumption and alignment.
  • Improve scalability to graphs with many connections (eliminate linear connection searches and redundant connection collections).
  • Remove use of boost smart pointers. Adding and removing from containers (e.g. Canvas, Module) is now done automatically.
  • Size empty ports in font based units so they look right when zoomed
  • Switch to GPLv3+
  • Use system theme font size by default

« Page 12 / 22 »