jalv 1.4.4 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.
- Add -c option for setting controls from the command line
- Add --no-menu option for jalv.gtk
- Don't expose non-MIDI event ports to Jack
- Hide controls for ports with notOnGUI property in generic UI (based on patch from Robin Gareus)
- Support ui:portMap feature to allow UIs to avoid hard-coded port indices (useful for compatibility and separately distributed UIs)
- Preset menu support for Qt (patch from Timo Westkämper)
- Allow lilv_state_restore() to be used without passing an instance, for restoring port values via a callback only
- Fix unlikely memory leak in lilv_plugin_instantiate()
- Support denoting latency ports with lv2:designation lv2:latency
- Allow passing NULL port_class to lilv_plugin_get_port_by_designation
- Call GetProcAddress with correct calling convention on Windows
- Add support for running plugins from Python by Kaspar Emanuel
- Clean up after test suite so multiple runs are successful
- Add lilv_port_get_node() for using world query functions with ports
- lv2info: Don't display invalid control maxes and defaults (patch from Robin Gareus)
- lilvmm.hpp: Add wrappers for UI API
Interactive force-directed graph layout in Ingen
GraphViz has, unfortunately, broken reverse compatibility of their library API, which has been nagging as a maintenance headache for FlowCanvas and its successor Ganv for a while now. It would be nice to just get rid of that dependency altogether...
Meanwhile, I had to write some force-directed graph layout (FDGL) code for another project...
... You can probably see where this is going. In the spirit of it theoretically being a holiday (there are no holidays in practice in grad school), I spent some time implementing live FDGL in Ganv, and recorded a video of interactive layout in Ingen to show progress.
One nice thing about using live FDGL in a program like Ingen is that the user can customize the layout in an intuitive tactile way, since objects behave physical laws. This video demonstrates some manual rearranging of a patch, and a total reconfiguration by switching the signal flow direction. Manual tweaking of the layout like this was not possible with the previous GraphViz-based layout code.
It took quite a bit of tweaking to get the physics working well, so layouts looked good but the patch didn't explode if there are disconnected components. It's still not quite ideal, but usable.
This is implemented at the Ganv level and thus works in Ingen (as
shown), Patchage, and Machina. I'm still not confident enough in this
implementation to enable it by default and/or drop Graphviz quite yet,
but the adventurous who follow svn,
./waf configure --debug --fdgl. If
you're hit by the graphviz breakage (and I still haven't fixed the
--no-graphviz to work around the problem.
jalv 1.4.2 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.
- Fix crash when running "jalv" with bad command line arguments
- Fix potential crash with UIs and debug printing
- Fix parameter changes with Qt UI
- Nicer printing of atom messages with -d
- Add command-line option to control UI update frequency
- Support rsz:minimumSize for atom and event ports
- Fix default setting for non-sequential enumeration ports (patch from Robin Gareus)
- Work around Gtk bug for labels on sliders (patch from Robin Gareus)
- Upgrade to waf 1.7.11
- Print system error message if module fails to load
- Lower dependency from Gtk 2.24 introduced in 0.6.12
- Add support for new LV2 idle interface
- Support resizing for X11 in Gtk (patch from Robin Gareus)
- Upgrade to waf 1.7.11
Ingen as LV2 in Ardour
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:
- Run Ingen as a Jack app:
- Build a graph, adding ports, plugins, etc.
- Save the graph to somewhere in your
~/.lv2(which happens to be the default directory of the save dialog for this reason).
- Voila, your graph should now show up in any LV2 host (its URI will
simply be its local filesystem path, unless you explicitly set a
stable one). You can check with
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.
jalv 1.4.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 http://drobilla.net/software/jalv.
- Send time information to plugin when Jack tempo changes
- Group controls under headings if port group information is available
- Add spinbuttons for precisely setting control values
- Use a more efficient dense layout for controls
- Make URI map thread-safe, fixing occasional crashes for plugins with UIs
- Add menu bar and pass parent widget in Qt version for true UI embedding
- Support state:loadDefaultState
- Update to waf 1.7.8 and autowaf r90