Free Software hackery, Lignux audio software, RDF / Linked Data, Computer Science, and such.
If you came here looking for software, it can be found in the menu above and/or on the software page.
Suil 0.6.16 is out. Suil is a lightweight C library for loading and wrapping LV2 plugin UIs. Suil transparently presents UIs written in any toolkit as the desired widget type of host programs, so hosts do not have to depend on foreign toolkits.
This releases fixes a crash bug for UIs with NULL extension_data, and includes some Qt fixes from Rui Nuno Capela.
The API/ABI is identical to the previous release.
This version fixes some bugs, and supports plugin specified buffer sizes for advanced plugin:UI communication.
Suil 0.6.14 is out. Suil is a lightweight C library for loading and wrapping LV2 plugin UIs. Suil transparently presents UIs written in any toolkit as the desired widget type of host programs, so hosts do not have to depend on foreign toolkits.
This release fixes several bugs, and implements support for the new LV2 UI idle interface. This means UIs in e.g. X11, FLTK, OpenGL, etc. can drive their idle loop in a Gtk or Qt host without having to deal with threading issues. This functionality requires LV2 1.6.0, upgrading is recommended.
The API/ABI is identical to the previous release (though more features are supported).
I found some time today to make Ingen‘s support for running as an LV2 more solid. I have posted about this before, but it now works at RT appropriate buffer sizes, and several other bugs have been fixed. Here’s the obligatory contrived screenshot:
People are sometimes confused about how Ingen works as an LV2 (I need to write proper documentation One of These Days): you don’t load an “Ingen” plugin so much (it wouldn’t do anything), as you save an Ingen graph as an LV2 plugin. The idea is that Ingen is a tool for visually building plugins. Since LV2 does not support dynamically adding ports, it’s easiest to do your building as a Jack app, so the basic work flow is something like:
~/.lv2(which happens to be the default directory of the save dialog for this reason).
There is no export or compilation involved, Ingen’s native format is LV2 compatible (graphs are always saved in the same format). If you saved a graph elsewhere you can simply copy it to
~/.lv2 to use it as a plugin, though for now you may have to create or fix the symlink to the engine binary manually to do this.
Note that you can edit the graph while it’s running as an LV2 plugin, including adding new nodes and connections, you just can’t add top-level ports because the host doesn’t know about them. There is still some work to be done polishing this up to be ready for prime-time, but for the brave, it’s more or less good to go.
Suil 0.6.12 is out. Suil is a lightweight C library for loading and wrapping LV2 plugin UIs. Suil transparently presents UIs written in any toolkit as the desired widget type of host programs, so hosts do not have to depend on foreign toolkits.
This release fixes many bugs and adds several convenient functions to the API. Upgrading is recommended.
This releases fixes a few minor bugs and memory leaks, and shrinks the code slightly by making of the new sord_get() function.
Today I implemented better UI generation for LV2 plugin controls in Jalv, particularly grouping controls under headings which makes a big difference. Unfortunately few plugins group their controls currently, but hopefully more host support will provide the incentive to do so.
Here is the UI generated for Amsynth (after I added the necessary metadata):
Still pretty utilitarian, but much more usable, which is the important thing. Of course, this plugin is quite large, and has a pretty good custom UI, but I happened to be polishing up its metadata anyway and the controls group nicely so I used it as my test case.
Maybe some day this code will get smarter and evolve into a library that can be used by other Gtk hosts. Better group layout is the obvious “next level” advancement, a flat linear list of controls is pretty limited. Unfortunately there’s no stock Gtk container which can do text-like reflow, which would be ideal. Perhaps a simpler scheme based on a maximum reasonable width for a controller would do, where the table will expand to have more columns if the window is wide enough for several.
Most of the metadata required to generate a good UI is also useful for other purposes, for example groups make building a decent menu of many controls feasible (e.g. to add automation lanes in Ardour), and some types of host UIs like a modular patcher inherently need to generate their own “UI” of sorts.
Good metadata is not at odds with custom UIs, they each have their uses, but it is important to remove the burden of custom UIs for simple plugins with just a few controls that really don’t need them. It’s a waste of that most precious of all resources – developer time – to have to code UIs for a few sliders and toggles. Hopefully better host generated UIs and support for more advanced controls like file selectors free up developers to spend more time making useful plugins and less time wrestling with GUI toolkits.
It is, after all, all about the sound.