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.

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 select note menu on a note number port.

The Ardour note selector dialog.

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.

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.

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.

(Flattr this)

Jalv 1.4.6

Jalv 1.4.6 is out. Jalv is a simple but fully featured LV2 host for Jack. It runs LV2 plugins and exposes their ports as Jack ports, essentially making any LV2 plugin function as a Jack application.

Changes:

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

(Flattr this)

Lilv 0.20.0

Lilv 0.20.0 is out. Lilv is a C library to make the use of LV2 plugins as simple as possible for applications.

Changes:

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

(Flattr this)

Serd 0.20.0

Serd 0.20.0 is out. Serd is a lightweight, high-performance, dependency-free C library for RDF syntax which supports reading and writing Turtle and NTriples.

Changes:

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

(Flattr this)

Patchage 1.0.0

After a long hiatus, a new release of Patchage is finally out. This version uses a new canvas library, Ganv, and includes many fixes and other improvements.

Download Patchage 1.0.0 (sig)

Changes:

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

Enjoy.

(Flattr this)

Disabling the obnoxious lights on the Evoluent Vertical Mouse 4

I’ve been a fan of the Vertical Mouse for a while now, since the extreme wrist pronation of a conventional horizontal mouse aggravates my wrist. Unfortunately, however, Evoluent saw fit to put a blindingly bright blue lit-up logo on the back of the latest version (much to the delight of absolutely nobody in their target market). This is particularly problematic if you work late or sleep in the same room as your computer (blue light messes with your sleep cycle, hence tools like Redshift).

The offending logo (unlit).

The offending logo (unlit).

After unplugging my mouse every night for so long, I finally decided to tear the thing apart and see how easy it would be to disable those lights. It turns out this is very easy, you don’t even need to desolder anything. There are four screw holes hidden under the label and front pad on the bottom. You don’t need to remove the other two pads like I did in the process of figuring this out.

Screw hole locations.

Screw hole locations.

Remove all four screws and the top should come off easily. There are ribbon cables connecting the buttons, though, so don’t pull too hard. Now you can see the battery of LEDS.

The seven (!) offending LEDs.  When Evoluent shoots for annoying they go full out.

The seven (!) offending LEDs. When Evoluent shoots for annoying they go full out.

Luckily, this pointless board is connected with a header, so you can simply unplug it, and reassemble the mouse.

Disconnected LED board connector.

Disconnected LED board connector.

Much better.

(Flattr this)