<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>drobilla.net &#187; LAD</title>
	<atom:link href="http://drobilla.net/category/lad/feed/" rel="self" type="application/rss+xml" />
	<link>http://drobilla.net</link>
	<description></description>
	<lastBuildDate>Wed, 09 May 2012 01:57:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Portable OpenGL Plugin UIs</title>
		<link>http://drobilla.net/2012/04/30/portable-opengl-plugin-uis/</link>
		<comments>http://drobilla.net/2012/04/30/portable-opengl-plugin-uis/#comments</comments>
		<pubDate>Tue, 01 May 2012 02:40:46 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=674</guid>
		<description><![CDATA[LV2 allows plugins to implement UIs in any toolkit. This has led to UIs being implemented in several (which is a Good Thing, and works fine in all hosts via Suil), but mostly Gtk. Unfortunately, Gtk is not really suitable &#8230; <a href="http://drobilla.net/2012/04/30/portable-opengl-plugin-uis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://lv2plug.in/">LV2</a> allows plugins to implement UIs in any toolkit.  This has led to UIs being implemented in several (which is a Good Thing, and works fine in all hosts via <a href="http://drobilla.net/software/suil">Suil</a>), but mostly Gtk.</p>
<p>Unfortunately, Gtk is not really suitable for use in plugins on platforms where a &#8220;system Gtk&#8221; can&#8217;t be relied on.  Some toolkits are suitable for static linking, but personally, I am somewhat disillusioned with &#8220;toolkits&#8221; lately, and massive libraries in general.  Sometimes all you want or need is a straightforward standard graphics API and some keyboard/mouse events.</p>
<p>When it comes to standard cross-platform graphics APIs, the undisputed heavyweight king is OpenGL.  While not perfect (what is?), no other API is <em>already there</em> on almost any platform you&#8217;d care about (heck, most modern <em>phones</em> have hardware accelerated OpenGL).  Unfortunately, OpenGL deals only with rendering, and not user input or windowing issues.  What is needed is a minimal framework to get an OpenGL view to draw to, and receive keyboard and mouse events.  Enter <a href="http://drobilla.net/software/jalv">Jalv</a>.</p>
<p>Jalv handles all the platform specific business behind an API very similar to GLUT, but much smaller and appropriate for plugins (which GLUT unfortunately is not).  In terms of size, this is a few hundred lines of C per platform (on a personal note, this fits in well with my ever-increasing distaste in dealing with bloated junk with tons of dependencies&#8230; give me a Couple Hundred Lines of C&trade; any day).  The breakdown on Jalv is on its homepage, but suffice to say after a few days&#8217; work it does the job it was designed to do on X11, Mac OS X, and Windows.  Since embedding X11 works in LV2 land, that means an OpenGL plugin UI can be embedded in the host, and I have the pretty pictures to prove it:</p>
<p><a href="http://drobilla.net/blog/wp-content/uploads/2012/04/ardour_lv2_gl.png"><img src="http://drobilla.net/blog/wp-content/uploads/2012/04/ardour_lv2_gl-109x150.png" alt="Pugl embedded in Ardour" title="Pugl embedded in Ardour" width="109" height="150" class="alignleft size-thumbnail wp-image-673" /></a></p>
<p><a href="http://drobilla.net/blog/wp-content/uploads/2012/04/ingen_lv2_gl.png"><img src="http://drobilla.net/blog/wp-content/uploads/2012/04/ingen_lv2_gl-135x150.png" alt="Pugl embedded in Ingen" title="Pugl embedded in Ingen" width="135" height="150" class="alignleft size-thumbnail wp-image-672" /></a></p>
<p>This is a simple test plugin (complete with gratuitous use of 3D) embedded in Ingen and Ardour.  Both are Gtk based programs, but this works in Qt as well.  Testing so far on other platforms has only been top-level since I have no programs to embed in, but the bulk of the work is done.  This includes full keyboard and mouse support, with significantly more complete keyboard support than GLUT.</p>
<p>Naturally I can&#8217;t predict the future, so it remains to be seen how much OpenGL UI action we&#8217;ll see for plugins.  Being just a low level drawing API and not a set of boxed widgets, it&#8217;s a bit open ended with a bit of a learning curve, but on the other hand there is <em>lots</em> of existing OpenGL code out there.  Perhaps someone will throw together a library of audio appropriate widgets, if one doesn&#8217;t already exist.  Either way, I think an easy to use API for writing truly portable LV2 plugin UIs is a very good thing, which hopefully eliminates a barrier for some plugin developers and helps LV2 invade the territory of its proprietary adversaries&#8230; or, at the very least, makes for a really cool 3D panner GUI :)</p>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=674&amp;md5=ffcaa1cdd5540090d97df88ba041c38e" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/04/30/portable-opengl-plugin-uis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F04%2F30%2Fportable-opengl-plugin-uis%2F&amp;language=en_GB&amp;category=text&amp;title=Portable+OpenGL+Plugin+UIs&amp;description=LV2+allows+plugins+to+implement+UIs+in+any+toolkit.+This+has+led+to+UIs+being+implemented+in+several+%28which+is+a+Good+Thing%2C+and+works+fine+in+all+hosts+via...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Jalv 1.0.0</title>
		<link>http://drobilla.net/2012/04/19/jalv-1-0-0/</link>
		<comments>http://drobilla.net/2012/04/19/jalv-1-0-0/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 23:55:34 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=638</guid>
		<description><![CDATA[Jalv 1.0.0 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. Jalv is particularly useful &#8230; <a href="http://drobilla.net/2012/04/19/jalv-1-0-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://download.drobilla.net/jalv-1.0.0.tar.bz2">Jalv 1.0.0</a> is out.  <a href="http://drobilla.net/software/jalv">Jalv</a> is a simple but fully featured <a href="http://lv2plug.in">LV2</a> host for <a href="http://jackaudio.org">Jack</a>.  It runs LV2 plugins and exposes their ports as Jack ports, essentially making any LV2 plugin function as a Jack application.  Jalv is particularly useful for testing during plugin development, and as an example of a Lilv-based LV2 host.</p>
<p>This is the initial release of Jalv.  It is still a relatively immature program, but supports most of the important new functionality in the LV2 1.0.0 release (e.g. saving plugin presets with state, atom-based event ports, message-based plugin<=>UI communication, etc.).</p>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=638&amp;md5=0a17003d3e6584bb5fec50aae07cde2f" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/04/19/jalv-1-0-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F04%2F19%2Fjalv-1-0-0%2F&amp;language=en_GB&amp;category=text&amp;title=Jalv+1.0.0&amp;description=Jalv+1.0.0+is+out.+Jalv+is+a+simple+but+fully+featured+LV2+host+for+Jack.+It+runs+LV2+plugins+and+exposes+their+ports+as+Jack+ports%2C+essentially+making+any+LV2...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Lilv 0.14.2</title>
		<link>http://drobilla.net/2012/04/19/lilv-0-14-2/</link>
		<comments>http://drobilla.net/2012/04/19/lilv-0-14-2/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 21:11:53 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=632</guid>
		<description><![CDATA[Oops! The Lilv 0.14.2 release fixes compilation with &#8211;dyn-manifest. If you are not using dynmanifest support with Lilv, there is no reason to upgrade.]]></description>
			<content:encoded><![CDATA[<p>Oops!  The <a href="http://download.drobilla.net/lilv-0.14.2.tar.bz2">Lilv 0.14.2</a> release fixes compilation with &#8211;dyn-manifest.  If you are not using dynmanifest support with <a href="http://drobilla.net/software/lilv">Lilv</a>, there is no reason to upgrade.</p>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=632&amp;md5=207c4c92efe22ad89e55d51a250f1730" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/04/19/lilv-0-14-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F04%2F19%2Flilv-0-14-2%2F&amp;language=en_GB&amp;category=text&amp;title=Lilv+0.14.2&amp;description=Oops%21+The+Lilv+0.14.2+release+fixes+compilation+with+%26%238211%3Bdyn-manifest.+If+you+are+not+using+dynmanifest+support+with+Lilv%2C+there+is+no+reason+to+upgrade.&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Lilv 0.14.0</title>
		<link>http://drobilla.net/2012/04/18/lilv-0-14-0/</link>
		<comments>http://drobilla.net/2012/04/18/lilv-0-14-0/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 00:55:17 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>
		<category><![CDATA[RDF]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=625</guid>
		<description><![CDATA[Lilv 0.14.0 is out. Lilv is a library to make the use of LV2 plugins as simple as possible for applications. This release includes many improvements, most notably built-in support for saving/restoring plugin state (including powerful non-destructive saving of plugin &#8230; <a href="http://drobilla.net/2012/04/18/lilv-0-14-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://download.drobilla.net/lilv-0.14.0.tar.bz2">Lilv 0.14.0</a> is out.  <a href="http://drobilla.net/software/lilv">Lilv</a> is a library to make the use of <a href="http://lv2plug.in">LV2</a> plugins as simple as possible for applications.</p>
<p>This release includes many improvements, most notably built-in support for saving/restoring plugin state (including powerful non-destructive saving of plugin state which contains files), as well as many bug and portability fixes.</p>
<p>Changes:</p>
<ul>
<li>Add lilv_plugin_get_extension_data</li>
<li>Use path variables in pkgconfig files</li>
<li>Install man page to DATADIR (e.g. PREFIX/share/man, not PREFIX/man)</li>
<li>Make Lilv::uri_to_path static inline (fix linking errors)</li>
<li>Use correct URI for dcterms:replaces (for hiding old plugins): &#8220;http://purl.org/dc/terms/replaces&#8221;</li>
<li>Fix compilation on BSD</li>
<li>Only load dynmanifest libraries once per bundle, not once per plugin</li>
<li>Fix lilv_world_find_nodes to work with wildcard subjects</li>
<li>Add lilv_plugin_get_related to get resources related to plugins that are not directly rdfs:seeAlso linked (e.g. presets)</li>
<li>Add lilv_world_load_resource for related resources (e.g. presets)</li>
<li>Print presets in lv2info</li>
<li>Remove locale smashing kludges and use new serd functions for converting nodes to/from numbers.</li>
<li>Add LilvState API for handling plugin state.  This makes it simple to save and restore plugin state both in memory and on disk, as well as save presets in a host-sharable way since the disk format is identical to the LV2 presets format.</li>
<li>Update old references to lv2_list (now lv2ls)</li>
<li>Support compilation as C++ under MSVC++.</li>
<li>Remove use of wordexp.</li>
<li>Add lilv_plugin_get_port_by_designation() and lilv_port_get_index() as an improved generic alternative to lilv_plugin_get_latency_port_index().</li>
<li>Add lilv_plugin_get_project() and get author information from project if it is not given directly on the plugin.</li>
</ul>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=625&amp;md5=a5329c1b5613fb0f7a5cdf6e4fbf1f9f" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/04/18/lilv-0-14-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F04%2F18%2Flilv-0-14-0%2F&amp;language=en_GB&amp;category=text&amp;title=Lilv+0.14.0&amp;description=Lilv+0.14.0+is+out.+Lilv+is+a+library+to+make+the+use+of+LV2+plugins+as+simple+as+possible+for+applications.+This+release+includes+many+improvements%2C+most+notably+built-in+support...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Suil 0.6.0</title>
		<link>http://drobilla.net/2012/04/18/suil-0-6-0/</link>
		<comments>http://drobilla.net/2012/04/18/suil-0-6-0/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 00:35:37 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=621</guid>
		<description><![CDATA[Suil 0.6.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 &#8230; <a href="http://drobilla.net/2012/04/18/suil-0-6-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://download.drobilla.net/suil-0.6.0.tar.bz2">Suil 0.6.0</a> is out.  <a href="http://drobilla.net/software/suil">Suil</a> is a lightweight C library for loading and wrapping <a href="http://lv2plug.in">LV2</a> 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.</p>
<p>The biggest change with this release is support for wrapping X11 UIs, which can be used to implement a UI in just about any toolkit or graphics API on X11 based systems.</p>
<p>Changes:</p>
<ul>
<li>Use path variables in pkgconfig files</li>
<li>Add support for embedding X11 UIs (ui:X11UI)</li>
<li>Support new LV2 UI features automatically if provided by host</li>
</ul>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=621&amp;md5=e3337702c0d059f6eb5b4e401d3be6a5" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/04/18/suil-0-6-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F04%2F18%2Fsuil-0-6-0%2F&amp;language=en_GB&amp;category=text&amp;title=Suil+0.6.0&amp;description=Suil+0.6.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...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Sratom 0.2.0</title>
		<link>http://drobilla.net/2012/04/18/sratom-0-2-0/</link>
		<comments>http://drobilla.net/2012/04/18/sratom-0-2-0/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 00:23:41 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>
		<category><![CDATA[RDF]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=615</guid>
		<description><![CDATA[Sratom is a new C library for serialising LV2 atoms to/from Turtle. It is intended to be a full serialisation solution for LV2 atoms, allowing implementations to serialise binary atoms to strings and read them back again. This is particularly &#8230; <a href="http://drobilla.net/2012/04/18/sratom-0-2-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sratom is a new C library for serialising <a href="http://lv2plug.in/ns/ext/atom">LV2 atoms</a> to/from <a href="http://www.w3.org/TR/turtle/">Turtle</a>.  It is intended to be a full serialisation solution for LV2 atoms, allowing implementations to serialise binary atoms to strings and read them back again.  This is particularly useful for saving plugin state, or implementing plugin control with network transparency.  Sratom uses <a href="http://drobilla.net/software/serd">Serd</a> and <a href="http://drobilla.net/software/sord">Sord</a> to do the work, it is a small library implemented in a single source file, suitable for direct inclusion in projects if avoiding a dependency is desired.</p>
<p><a href="http://download.drobilla.net/sratom-0.2.0.tar.bz2">Download Sratom 0.2.0</a></p>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=615&amp;md5=811c25c639369a738997969a64f2fe70" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/04/18/sratom-0-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F04%2F18%2Fsratom-0-2-0%2F&amp;language=en_GB&amp;category=text&amp;title=Sratom+0.2.0&amp;description=Sratom+is+a+new+C+library+for+serialising+LV2+atoms+to%2Ffrom+Turtle.+It+is+intended+to+be+a+full+serialisation+solution+for+LV2+atoms%2C+allowing+implementations+to+serialise+binary+atoms...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>LV2 1.0.0</title>
		<link>http://drobilla.net/2012/04/18/lv2-1-0-0/</link>
		<comments>http://drobilla.net/2012/04/18/lv2-1-0-0/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 05:13:54 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>
		<category><![CDATA[RDF]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=585</guid>
		<description><![CDATA[The first unified LV2 release, LV2 1.0.0, is out. This release merges the previous lv2core package with all the official extension packages, as well as example plugins, lv2specgen, and additional data. From a developer point of view, the biggest change &#8230; <a href="http://drobilla.net/2012/04/18/lv2-1-0-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The first unified <a href="http://lv2plug.in/">LV2</a> release, LV2 1.0.0, is out.</p>
<p>This release merges the previous lv2core package with all the official extension packages, as well as example plugins, lv2specgen, and additional data.  From a developer point of view, the biggest change is that all LV2 API headers can be used by simply checking for the single pkg-config package &#8220;lv2&#8243; (for compatibility the previous &#8220;lv2core&#8221; package is still installed).  Implementations are encouraged to abandon the &#8220;copy paste headers&#8221; practice and depend on this package instead.</p>
<p>With this release, several new extensions have become stable that together greatly increase the power of LV2: atom, log, parameters, patch, port-groups, port-props, resize-port, state, time, worker.  </p>
<p><a href="http://lv2plug.in/ns/">Documentation and more detailed change logs</a></p>
<p><a href="http://lv2plug.in/spec/lv2-1.0.0.tar.bz2">Download LV2 1.0.0</a></p>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=585&amp;md5=436a3aa6b00399085bcb2efb0a7d3bb9" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/04/18/lv2-1-0-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F04%2F18%2Flv2-1-0-0%2F&amp;language=en_GB&amp;category=text&amp;title=LV2+1.0.0&amp;description=The+first+unified+LV2+release%2C+LV2+1.0.0%2C+is+out.+This+release+merges+the+previous+lv2core+package+with+all+the+official+extension+packages%2C+as+well+as+example+plugins%2C+lv2specgen%2C+and+additional...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>LV2 atom and state serialisation</title>
		<link>http://drobilla.net/2012/02/23/lv2-atom-and-state-serialisatio/</link>
		<comments>http://drobilla.net/2012/02/23/lv2-atom-and-state-serialisatio/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 06:42:04 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[Ardour]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>
		<category><![CDATA[RDF]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=549</guid>
		<description><![CDATA[I have been working on full round-trip serialisation for everything in the LV2 Atom extension (which also applies for implementing state). I am doing this as a small library with a simple API, with the goal that it be simple &#8230; <a href="http://drobilla.net/2012/02/23/lv2-atom-and-state-serialisatio/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have been working on full round-trip serialisation for everything in the <a href="http://lv2plug.in/ns/ext/atom">LV2 Atom</a> extension (which also applies for implementing state).  I am doing this as a small library with a simple API, with the goal that it be simple to include in any project.</p>
<p><code>svn co <a href="http://svn.drobilla.net/lad/trunk/sratom">http://svn.drobilla.net/lad/trunk/sratom</a></code></p>
<p>Currently this only writes (using <a href="http://drobilla.net/software/serd">Serd</a>), I still need to move the reading stuff into it (which will probably use a model and thus require using <a href="http://drobilla.net/software/sord">Sord</a>).</p>
<p>The Atom extension defines a simple data model for use in LV2 plugins and hosts (or elsewhere).  The general Big Idea here is to have a smallish set of primitive types, a few collections, and out of that one can build arbitrarily complex structures.  Everything (including containers) is a simple and compact chunk of POD data, but serialises to/from (a subset of) RDF, so it can nicely be described in a plugin&#8217;s Turtle file, among other advantages.</p>
<p>An easy to adopt serialisation API is important to making these advantages a reality for many implementations, so I have decided to provide one before marking these extensions stable.  It also serves as a nice test case with complete coverage.  Here is an example of an Atom that contains every currently defined Atom type, as well as MIDI, serialised to Turtle by sratom:</p>
<pre>
[]
    rdf:value [
        a eg:Object ;
        eg:one "1"^^xsd:int ;
        eg:two "2"^^xsd:long ;
        eg:three "3.0"^^xsd:float ;
        eg:four "4.0"^^xsd:double ;
        eg:true true ;
        eg:false false ;
        eg:path &lt;/foo/bar&gt; ;
        eg:uri eg:value ;
        eg:urid eg:value ;
        eg:string "hello" ;
        eg:langlit "bonjour"@fra ;
        eg:typelit "value"^^eg:Type ;
        eg:blank [
            a eg:Object ;
        ] ;
        eg:tuple [
            a atom:Tuple ;
            rdf:value (
                "foo"
                true
            ) ;
        ] ;
        eg:vector [
            a atom:Vector ;
            rdf:value (
                "1"^^xsd:int
                "2"^^xsd:int
                "3"^^xsd:int
                "4"^^xsd:int
            ) ;
        ] ;
        eg:seq [
            a atom:Sequence ;
            rdf:value (
                [
                    atom:frameTime 1 ;
                    rdf:value "901A01"^^midi:MidiEvent ;
                ] [
                    atom:frameTime 3 ;
                    rdf:value "902B02"^^midi:MidiEvent ;
                ]
            ) ;
        ] ;
    ] .
</pre>
<p>I anticipate/intend for all plugin control to happen via such messages, since this approach has a few important qualities:</p>
<ol>
<li>Typically no need to define new binary formats for things (and be held back waiting for others to implement them).</li>
<li>Everything has a portable serialization for free (meaning network transparency, saving/loading, and for developers or power users the ability to dump any message to see what is going on).</li>
<li>The convention is to use &#8220;objects&#8221; (resources, i.e. things with properties) as messages, which are inherently extensible.  No &#8220;oops I needed to add a parameter so now compatibility is broken&#8221;.</li>
<li>Easy to bind to other languages or syntaxes, so e.g. Python or browser-based UI frameworks should be possible.</li>
<li>Any RDF vocabulary can be used, meaning millions of well-defined and documented predicates (&#8220;keys&#8221;) are available right now (though it is perfectly okay to create one-off objects &#8211; compatibility with RDF is a benefit, not a burden).</li>
</ol>
<p>The atom extension includes an API that makes it relatively simple to build such objects in C, so plugins can write them directly to an output port or a ring buffer.  See the &#8220;forge&#8221; API in the Atom extension for details.  There are also iterators for all the collections and a &#8220;get&#8221; function for objects to make reading data simple.</p>
<p>Just in case it&#8217;s not crystal clear, the above is only the <em>external representation</em> of the corresponding atom.  At run-time, an atom (i.e. what plugins work with) is just a blob of data with an integer type and size header.  100% of the API provided for reading and writing atoms is real-time safe and suitable for use in an audio processing thread.</p>
<p>For an example, see the <a href="http://lv2plug.in/repo/trunk/plugins/eg-sampler.lv2/">LV2 sampler example</a>, which has a UI that loads samples via such messages.  It currently works in <a href="http://svn.drobilla.net/lad/trunk/jalv/">Jalv</a>, <a href="http://ardour.org">Ardour</a> support is coming soon.  This is the way forward for more powerful LV2 plugin control, and hopefully will end the worrying practice of abusing direct instance access to provide such functionality.</p>
<p>This work isn&#8217;t finished yet, but the important parts are done and not likely to change significantly.  I am interested in hearing any developer feedback, feel free to comment on this post or at the <a href="http://lists.lv2plug.in/listinfo.cgi/devel-lv2plug.in">LV2 mailing list</a>.</p>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=549&amp;md5=c67284e8220414ba598d0b2b5c3248fa" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2012/02/23/lv2-atom-and-state-serialisatio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2012%2F02%2F23%2Flv2-atom-and-state-serialisatio%2F&amp;language=en_GB&amp;category=text&amp;title=LV2+atom+and+state+serialisation&amp;description=I+have+been+working+on+full+round-trip+serialisation+for+everything+in+the+LV2+Atom+extension+%28which+also+applies+for+implementing+state%29.+I+am+doing+this+as+a+small+library+with...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Lilv 0.5.0</title>
		<link>http://drobilla.net/2011/09/29/lilv-0-5-0/</link>
		<comments>http://drobilla.net/2011/09/29/lilv-0-5-0/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 04:45:39 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=473</guid>
		<description><![CDATA[Lilv 0.5.0 is out. Changes: Remove glib dependency Add lv2core as a pkg-config dependency (for lv2.h header include) Obey prefix when installing bash completion script Support integer minimum, maximum, and default port values in lilv_plugin_get_port_ranges_float Add ability to build static &#8230; <a href="http://drobilla.net/2011/09/29/lilv-0-5-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://drobilla.net/software/lilv">Lilv</a> 0.5.0 is out.</p>
<p>Changes:</p>
<ul>
<li>Remove glib dependency</li>
<li>Add lv2core as a pkg-config dependency (for lv2.h header include)</li>
<li>Obey prefix when installing bash completion script</li>
<li>Support integer minimum, maximum, and default port values in lilv_plugin_get_port_ranges_float</li>
<li>Add ability to build static library</li>
</ul>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=473&amp;md5=1765168abf49ab0a73fb56e954f2516a" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2011/09/29/lilv-0-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2011%2F09%2F29%2Flilv-0-5-0%2F&amp;language=en_GB&amp;category=text&amp;title=Lilv+0.5.0&amp;description=Lilv+0.5.0+is+out.+Changes%3A+Remove+glib+dependency+Add+lv2core+as+a+pkg-config+dependency+%28for+lv2.h+header+include%29+Obey+prefix+when+installing+bash+completion+script+Support+integer+minimum%2C+maximum%2C+and...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Sord 0.5.0</title>
		<link>http://drobilla.net/2011/09/29/sord-0-5-0/</link>
		<comments>http://drobilla.net/2011/09/29/sord-0-5-0/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 04:44:34 +0000</pubDate>
		<dc:creator>David Robillard</dc:creator>
				<category><![CDATA[LAD]]></category>
		<category><![CDATA[LV2]]></category>
		<category><![CDATA[RDF]]></category>

		<guid isPermaLink="false">http://drobilla.net/?p=470</guid>
		<description><![CDATA[Sord 0.5.0 is out. Changes: Remove glib dependency Add function sord_contains for checking for a triple pattern Add function sord_write_iter for writing a queried range Fix Sord::Namespaces::qualify to no longer chop prefixes Add ability to build static library]]></description>
			<content:encoded><![CDATA[<p><a href="http://drobilla.net/software/sord">Sord</a> 0.5.0 is out.</p>
<p>Changes:</p>
<ul>
<li>Remove glib dependency</li>
<li>Add function sord_contains for checking for a triple pattern</li>
<li>Add function sord_write_iter for writing a queried range</li>
<li>Fix Sord::Namespaces::qualify to no longer chop prefixes</li>
<li>Add ability to build static library</li>
</ul>
 <p><a href="http://drobilla.net/blog/?flattrss_redirect&amp;id=470&amp;md5=a80b1c4e1b0514bbc51457eaec8306b9" title="Flattr" target="_blank"><img src="http://drobilla.net/blog/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://drobilla.net/2011/09/29/sord-0-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=drobilla&amp;popout=1&amp;url=http%3A%2F%2Fdrobilla.net%2F2011%2F09%2F29%2Fsord-0-5-0%2F&amp;language=en_GB&amp;category=text&amp;title=Sord+0.5.0&amp;description=Sord+0.5.0+is+out.+Changes%3A+Remove+glib+dependency+Add+function+sord_contains+for+checking+for+a+triple+pattern+Add+function+sord_write_iter+for+writing+a+queried+range+Fix+Sord%3A%3ANamespaces%3A%3Aqualify+to+no+longer...&amp;tags=blog" type="text/html" />
	</item>
	</channel>
</rss>

