Free Software, Lignux audio, RDF / Linked Data, Computer Science, and so on. This site is mainly about my personal projects, academically I work in the Parallel Computing & Data Science Research Lab at the Carleton University School of Computer Science.
If you came here looking for software, it can be found in the menu above and on the software page.
A while ago, I implemented MIDI patch, controller, and note name support for Ardour.
There was one thing missing from that work: labelled controller values. This is particularly useful for controllers that don’t represent a continuous numeric parameter, but instead have a set of specific values. For example, the Moog Minitaur supports CC #86 to control the LFO sync clock division, but it’s not obvious how a 0-127 number maps to a clock division. From the manual, we can learn that 61-67 is “1/4″, 68-73 is “1/8 Dot”, and so on.
Translate that information into standard MIDINameDocument format, and a few hours of hacking later… voila, Ardour displays something sensible when hovering over an automation point instead of a meaningless number.
If you want to add support for your MIDI device or program, my .midnam documents for the Moog Minitaur, MF-104M, and MF-108M, included in the Ardour distribution all contain examples of labelled values. It should be relatively obvious how to copy and modify these for other devices.
BLOP-LV2 1.0.0 is out. BLOP-LV2 is an LV2 port of the BLOP LADSPA plugins by Mike Rawes.
This is the initial release of BLOP-LV2.
MDA-LV2 1.2.2 is out. MDA-LV2 is an LV2 port of the MDA plugins by Paul Kellett.
This “oops” release fixes compilation against older versions of LV2. If you have LV2 1.8.0, there is no reason to upgrade.
MDA-LV2 1.2.0 is out. MDA-LV2 is an LV2 port of the MDA plugins by Paul Kellett.
- Fix tuning of Piano and EPiano at sample rates other than 44.1 kHz
- Fix const-violating casts
Jalv 1.4.4 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.
- 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)
Lilv 0.18.0 is out. Lilv is a C library to make the use of LV2 plugins as simple as possible for applications.
This release includes several bug fixes and improvements. Upgrading is recommended. A function has been added but the API remains backwards compatible with all previous releases.
- 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
Suil 0.8.0 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 adds a function, but remains backwards compatible with all previous releases.
- Add suil_instance_get_handle (patch from Rui Nuno Capela)
- Fix compilation errors on some systems
- Upgrade to waf 1.7.14
Sratom 0.4.4 is out. Sratom is a small C library for serialising LV2 atoms to/from Turtle.
This releases fixes a minor bug and improves output. The API is identical to the previous release.
- Escape invalid characters when writing paths as URIs
- Fancier printing without subject and predicate
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 check…), add
--no-graphviz to work around the problem.
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.