raul 0.8.0 has been released. Raul (Realtime Audio Utility Library) is a lightweight C++ convenience library for realtime programming, with a bias towards audio applications. For more information, see http://drobilla.net/software/raul.
- Implement Semaphore for Darwin
- Remove unused/trivial/inappropriate Command and Stateful
- Remove pointless templateification of RingBuffer
- Use uint32_t consistently for sizes in RingBuffer
- Fix off-by-one allocation of Atom strings
- Add all classes to 'raul' doxygen group
- Make single-argument constructors explicit
- Fix incorrect TimeSlice::beats_to_ticks
- Fix crash bug in List::chop_front
- Fix TimeStamp comparison operators
- Rename LOG_ defines RAUL_LOG_
- Remove "using namespace" declarations
- Add missing #includes
- Add missing COPYING file to distribution
- Upgrade to waf 1.6.2
- Fix accidental build system dependency on glibmm (now glib only)
- Better documentation generation via waf tool
Unified LV2 core/extensions code documentation
I've reworked the LV2 documentation generation system to generate all code documentation for lv2plug.in in a single Doxygen run. This means the core and all extensions' documentation are hyperlinked between each other, and there are handy global indices of everything.
See http://lv2plug.in/ns/doc/html/ for an index.
As before, you can go directly to the URI of any lv2plug.in extension in your browser for documentation, which links to the code documentation for that particular extension.
Hopefully this reference proves useful for implementers.
Flattr is an interesting idea, so I've decided to try it out. I've added SLV2, Patchage, and Ingen as "Things" (perhaps I should add a generic "drobilla.net LAD stuff" Thing... or come up with a name for the meta-project that is my LAD work?). Adding an LV2 Thing would be good as well, but it would not be fair for that money to go to me alone, so I am not sure what to do in that situation.
Let's get more LAD projects on Flattr so I have things in the community to donate my initial "means" to :)
In related news, drobilla.net svn and/or LV2 followers have probably noticed my progress in LADville has been uncharacteristically stagnant lately... my computing set up sort of fell apart (long story), and I have no working audio setup (*&%\$ firewire...), so motivation has been running a bit low. However, this winter, I'm deliberately moving somewhere infinitely more boring than Toronto so I have nothing to do but work. Hopefully by next spring, there will be solid releases of all my software (particularly Ingen), and I can finish all those big fancy LV2 extensions people have been pining for. Then I can justifiably beg for people to click those donation buttons, right? ;)
patchage 0.4.5 has been released. Patchage is a modular patch bay for Jack and ALSA based audio/MIDI systems. For more information, see http://drobilla.net/software/patchage. -- David Robillard firstname.lastname@example.org
- Install SVG icon
- Fix compilation without Jack
- Improve performance when dragging modules
- Bump FlowCanvas dependency to 0.6.0
- Upgrade to waf 1.5.18
raul 0.7.0 has been released. Raul (Realtime Audio Utility Library) is a lightweight C++ convenience library for realtime programming, with a bias towards audio applications. For more information, see http://drobilla.net/software/raul.
- Add several unit tests
- Use malloc'd memory for RingBuffer/SRSWQueue (instead of a new'd array)
- Fancy coloured console/logging I/O (raul/log.hpp)
- More flexible Path and better URI support
- Remove stack stuff from Array and create new ArrayStack
- Make Symbol and URI more opaque and use Glib string interning
- Add Configuration class for app command line option handling
- Use < operator in TableImpl instead of > so it needn't be defined
- Add IntrusivePtr, a trivial #define of boost::intrusive_ptr which is useful for hard realtime things (since adding and dropping refs is realtime safe, which is not true of shared_ptr)
- Remove TimeSlice
patchage 0.4.3 has been released. Patchage is a modular patch bay for Jack and ALSA based audio/MIDI systems. For more information, see http://drobilla.net/software/patchage. -- David Robillard email@example.com
- Switch to waf build system
- Fix compilation with GCC 4.4
- Better ALSA support
- Massive performance improvements when ALSA is enabled
- Center on startup
raul 0.6.0 has been released. Raul (Realtime Audio Utility Library) is a lightweight C++ convenience library for realtime programming, with a bias towards audio applications. For more information, see http://drobilla.net/software/raul.
- Switch to waf build system
- Fix compilation with GCC 4.4
- Add URI class and make Path a special URI (with scheme "path:")
- Remove JackDriver
- Add NullDeleter convenience for SharedPtr
- Add URI Atom type
- Add C++ style printing for Atom
- Fix type wackiness for glib atomic functions on PPC
- Remove misguided LASH stuff
- Depend on glib (instead of glibmm)
LV2 Extension Documentation
Recently there has been a lot of discussion on the linux-audio-dev list about LV2, and perceived problems thereof. Much of this was nonsense and FUD, but there is a problem with documentation of LV2 things in general, and the general public face of the LV2 site and wiki (i.e. it looks really bad and useful information is scattered everywhere, in inconsistent formats, and just generally hard to find or use, if it exists at all).
Towards solving this problem, I've done a lot of work on automatic documentation generation for LV2 extensions, and establishing good conventions for extension creators to follow in the future. The fruits of this effort can be seen by plugging the URI for any concept in an extension hosted at http://lv2plug.in directly into your browser's location bar.
For example, if you encounter event:inheritsTimeStamp in an LV2 data file somewhere and don't know what it means, head to http://lv2plug.in/ns/ext/event#inheritsTimeStamp (you will have to look up what the prefix "event" stands for in the file, of course). You are taken directly to documentation on that property generated from the extension itself (as defined in a .ttl file).
The same applies to entire extensions: the event extension's URI is http://lv2plug.in/ns/ext/event. Heading to that URI in your browser will take you to the documentation of that extension. This is the URI used directly in data files that refer to the extension, so no searching whatsoever is required to get at the information you need. As you can see on that page, there are links to all the related files you might need (e.g. headers, a tarball of the extension, etc).
Extension URIs will also content negotiate to return the requested type of data. Try these commands in your shell:
wget -q --header "Accept: application/x-turtle" http://lv2plug.in/ns/ext/event -O - wget -q --header "Accept: application/rdf+xml" http://lv2plug.in/ns/ext/event -O - wget -q --header "Accept: application/json" http://lv2plug.in/ns/ext/event -O - wget -q --header "Accept: text/plain" http://lv2plug.in/ns/ext/event -O - wget -q --header "Accept: text/html" http://lv2plug.in/ns/ext/event -O -
This could be used by LV2 hosts to automatically fetch from the web information they can not find locally. For example, if an extension is required by a plugin but a host doesn't know what it is, the host can trivially fetch that extension from the web and display a human readable description of what that extension does. This is the kind of thing that using good technology like RDF allows, you naysayers out there ;)
This is all a bit rough around the edges still, and the extensions hosted here aren't all documented well yet (and of course, not all extensions are hosted here), but I'd say this is a pretty big improvement. If you base your own extension on the form of these ones (which is easy), you get all this for free. Hopefully soon enough most if not all extensions and plugins will work this way, at which point I'd say that the reference documentation problem of LV2 is solved about as well as it possibly could be. Better than any other technology I have seen anyway (how many things do you use where you can just plug whatever you're curious about right into your browser and get taken directly to the documentation for that thing?).
Of course, more higher level "tutorial" type documentation is still needed, but this is a separate problem. As far as reference documentation goes, here is the chicken. Go forth and create eggs.
Stay tuned for more tools to come, e.g. a similar documentation generator for plugins, a plugin/extension validator, etc.
GStreamer LV2 Surround
My last post was mostly about adding multi-channel support to GStreamer.
That was only partially implemented though - many elements in GStreamer (and pretty much all of the ones that support more than stereo) require each channel to be explicitly labeled with its position. This information wasn't bridged until now.
The two sides of this situation are:
The LV2 Port Groups extension:
GStreamer multi-channel: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstmultichannel.html
LV2 "roles" correspond to GstAudioChannelPosition. Unfortunately, the mapping was a bit strained with the Port Groups extension as it was at midterm time. Fortunately, that extension is not finalized yet, and in the process I found some other problems with it, so I decided to bring it closer to the way GStreamer does things, which seems to be common in other software that does this sort of stuff. Formerly, the port groups extension used the channel names from the relevant surround spec (see the Wikipedia page on Surround Sound). This resulted in a lot of roles that were really the same thing, e.g. the "Surround Left" channel in 5.1 is really the same as the "Left Back" channel in 7.1. This was pretty confusing in practice. GStreamer instead always uses positional names like "Left Back", which is unambiguous regardless of context (you don't have to know if it's 17.2 or whatever to know what "Left Back" probably means...). So, I changed the LV2 port groups extension to be similar (though not identical; munging an LV2 extension to match GStreamer API wouldn't be appropriate).
This information is now queried out from LV2 plugins that have it, mapped to GStreamer channel positions, and set as capabilities on mulit-channel pads. This means multi-channel surround LV2 plugins should now work fine with surround sound GStreamer set-ups, for example playing a Theora video through some audio processing and out through Alsa.
I updated swh-plugins for the minor changes, and added port group information to Invada Studio Plugins.
More to come...