[linux-audio-dev] Additional LADSPA hints

robbins jacob jacobrobbins_ at hotmail.com
Fri Jan 17 13:36:01 UTC 2003


To my own surprise I have to object to the suggestion:
/*
AUDIO_RATE_CONTROL. Hints than an audio control should/could be controlled 
by a high time res. slider or control data, but shouldn't be connected to 
the next audio signal by default. I can't think of any simple examples off 
hand, but combined with MOMENTARY it could be used for sample accurate tempo 
tapping.
*/

As is see it, this declares that an audio port should be used for control 
data. I oppose because it is ugly to declare a port one thing in its 
PortDescriptor only to reverse this in the PortRangeHint. Furthermore, this 
ugliness is likely to cause problems in hosts that do not parse this hint 
value*. I believe that the true intention here was to undo the requirement 
that data ports can only have one value per run() block, but the author 
realized that undoing that requirement has significant implications. The 
primary problem occurs when the plugin assumes a particular control is 
continuous but the host abides by ladspa.h v1.1 which does not allow more 
than one control value per block. The plugin will treat that control port's 
data pointer as if it pointed to an array of the blocksize passed to run(), 
but the host will have only allocated a single value so there is a memory 
error.

(*)I argue that turning audio ports into data ports will cause enough host 
incompatibility problems that you might as well do it correctly IF you 
really feel it's worth it to add this feature. Here are some 
incompatibilities which arise from using audio ports as continuous control 
ports:
-the host doesn't parse the hint and sends audio to the control resulting in 
caucophonous output.
-the host does realize it shouldn't send audio to the "audio" port but 
doesn't have a facility for sending control data arrays to audio ports, so 
the user is unable to manipulate some of the controls on the plugin. Plugin 
writers are more likely to use continuous controls for important plugin 
features which warrant the extra detail, so unmodified hosts will be unable 
to accomodate very useful plugins that do who-knows-what.

  Basically, introducing arrays of control data will force ALL reasonable 
hosts to adapt to handle that ability. So I believe we are better off 
keeping ladspa.h straightforward and self consistent by eliminating the 
strict single control value requirement and dealing with the issues 
involved, as opposed to maintaining a false veneer of backwards 
compatibility by allowing use of audio ports for control data.

  What are the issues involved with eliminating one control value per block? 
I think that all you need to do is remove it and add a data port hint 
CONTINUOUS which means the host _must_ attach that control port to a whole 
block's worth of data for each run. As i said before, this kills backwards 
compatibility of hosts, but you are going to do that for the majority of 
hosts anyway if you reappropriate audio ports for control data and 
reappropriating audio ports is ugly.

As to whether I support adding CONTINUOUS data ports and breaking host 
compatibility; i haven't written my host yet so yes i support it because it 
will be easy enough to implement (or so i think :)


--jacob robbins.................






_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE*  
http://join.msn.com/?page=features/junkmail




More information about the Linux-audio-dev mailing list