On Sat, 2007-01-27 at 16:05 +1100, Fraser wrote:
Hi All,
I've been converting my old VST plugins over to LADSPA and have come
across something in the api which I really miss - the inability separate
the algorithmic to the displayed value of a parameter.
I'm finding this inability is leading to non-ideal programming habits.
There is the LADSPA_HINT_LOGARITHMIC port hint, which does part of what
you want - it tells the host that any knob or slider should use a
logarithmic mapping, but it doesn't give any display values. In LV2 this
will be done with the :scalePoint property, which you can use to label
the real value 1 as "0dB", 0.5 as "-3dB" and so on.
Another example - presets
I have a control that allows an operator to chose one of fifty presets
(say a reverb with small room, medium room, large room, hall etc). I don't
have a choice this time. Internally using an integer to represent the
different presets is fine, it's exactly all I need.
However even though I know what the preset is, I cannot display it's name
back to the user, so our user is left with a set of meaningless numbers
which they must resolve into names by some other means (print the doco out
and stick it on the wall?)
Presets are done in LADSPA using the additional library liblrdf, which a
number of hosts (though not all) support. "Internal" presets could be
done in LV2 using an integer port and scalePoint labels.
Now for a wish.
GUI - under OSX or windows this isn't such a big drama, there's only one
GUI environment to deal with. under Linux it's a different matter.
I sometimes think the best thing to do is to provide enough hints to the
host so it can render a more comprehensive gui, if it desires, rather than
the plugin drawing the gui as is traditionally done. This would entail a
few things.
There have been some suggestions for GUI "markup" standards for LADSPA,
I don't know if any real hosts have supported them. It's not a bad idea
as such. Another approach is DSSI (
http://dssi.sf.net, an "instrument"
extension of the LADSPA spec) which does GUIs using standalone programs
distributed with the plugin that communicates with the host using OSC.
--ll