On Sat, 7 Nov 2009, David Robillard wrote:
A better analogy would be well-formed XML or RDF,
where things can
easily be added but it doesn't break anything because the technology has
been designed specifically to handle this; or my shared library analogy
from earlier.
<rant>
Except when you want your XHTML (1.1)+MathML (v3)+SVG (1.1)+CSS (Level
3)+XSLT (1.0)+Javascript content to work as expected in everyone's
browser. It doesn't break in the sense that babies aren't
dying... but it doesn't *work*, either. Manwhile the hapless user
with IE6 is thinking, "Why doesn't this stuff work?? It's just a web
page! Microsoft's site looks fine... so it must be /them/."
Hell, even if you stick to HTML 4.0 + CSS 1... you <blink>still</blink>
have to find workarounds for IE 6.
</rant>
FWIW, I think XML is awesome... but this part grates on my nerves.
I think LV2 looks awesome, too... but I can't get a grip on this...
THE PROBLEM: I *want* to write a host that can load anyone's LV2 synth
and FX... and it just works. I want to write synths and FX that will work
in anyone's host.[5] Where do I start?
Looking over the docs... it looks like a host has to support nearly every
extension listed on the wiki[1] if I want to accomplish this. The more I
dig in... and the more I read David's comments... the more that this
appears to be the case. And if something gets added to the list, looks
like I'll have to update my host to support it.
I know of two synths, zyn[3] and linuxsampler[4]. Zyn requires rtmempool
and wants dynparam. LinuxSampler wants hardRtCapable (whatever that is)
and saverestore. I can't find mention of EventPort or MidiEvent in the
RDF files -- but I'm sure those are necessary, too (since they're synths).
Meanwhile, I know of one LV2 host for synths, zynjacku.[2] I have no idea
which extensions it supports... except that I know it supports whatever
zyn has (because it appears Nedko did them together). So, if I write a
synth that requires URI Map -- I don't know if it will work with zynjacku
without digging into source code or bugging Nedko about it.
Then, Lars's tutorial appears to be using his own portgroups extension, as
well as some kind of namespace extension, and I'm not sure if he's using
Midi Port or Midi Event. I have no idea if his examples will work in
zynjacku without compiling them and trying it.
And this is before considering GUI extensions....
Looking at this, people say, "This is good, but it's kind of a mess at the
moment. Can we get some sort of 'canonical list of extensions' or
/something/ stable for devs to work from?" To which Dave replies, "FUD!
FUD! FUD! Such a list accomplishes nothing!"
Am I just missing it, or what? What's the solution to "The Problem"? Is
there core infrastructure (critical extensions) still missing or
something? I'm _really_ willing to help, but so far every idea that I've
put forth has been shot down... and Dave *seems* to think that "The
Problem" isn't a problem.
Thanks,
Gabriel
[1]
http://lv2plug.in/docs/index.php?title=Main_Page
[2]
http://home.gna.org/zynjacku/
[3] aka "zynadd"
http://home.gna.org/zyn/
[4] Version 1.0 at least includes an LV2 version.
[5] Yes, I know there's cases where you have something that is
so application-specific that you can't always do this. I
think it's really cool that LV2 is extensible so that you
can work around it.