[LAD] Let's kill EPAMP???

Steve Harris steve at plugin.org.uk
Tue Jun 3 17:34:42 UTC 2008


On 3 Jun 2008, at 12:53, Stefano D'Angelo wrote:
>>>>> #2. Changing sample rate without re-instantiating all effects.
>>>>> Gapless playback when chaning songs, for example, should be  
>>>>> possible
>>>>> without performing black magic.
>>>>
>>>> While I see nothing wrong to support that in general, if I was
>>>> writting
>>>> a music player, I'd use one sample rate/format do processing  
>>>> using it
>>>> and convert/decode input streams early in the flow chain.
>>>
>>> Me too actually. I don't know.
>>
>> If you want glitch free playback then you have to stick to one sample
>> rate at the card, in which case you may as well do the conversion
>> before you start feeding plugins.
>
> Right, didn't think about that actually.
>
>> Any plugin that uses filters (ie. pretty much anything interesting)
>> will have to recalculate it's coefficients and throw away buffers if
>> you change the sample rate on it, so you'll be out of luck if you
>> expect this to be smooth.
>
> By "throwing away buffers" you mean past buffers?

I mean the y(-1) etc. buffers that filters use to calculate their  
output. Actually it may not be neccesary to discard them in some  
cases, but you will still get glitches from the coefficient changes.

>>>>> #3. Some serious connection logic thing (all the "equal channels"
>>>>> thing etc.).
>>>>> This needs a thousand flame wars and *deep* thinking.
>>>>
>>>> No idea what you mean by this.
>>>
>>> If someone is going to write that helper library (or adjust SLV2 or
>>> whatever), I guess we should find some reasonable conventions to
>>> organize and use plugins in a chain-like thing. This is damn hard,  
>>> as
>>> Paul Davis outlined already on this mailing list, and I actually  
>>> don't
>>> know to which degree it should be done.
>>
>> It's not necessary, just intervene after each run() call, it's not
>> hard and on a modern machine the cost is negligible.
>
> Sorry, I'm not understanding here. How would you do exactly?

You don't have to make plugin A directly feed plugin B, you can have  
the host do some buffer twiddling inbetween.

>>>>> #4. Support for time stretching when using non real-time audio
>>>>> sources.
>>>>
>>>> Why not? AFAIK this has clear uses in "professional" audio world  
>>>> too.
>>
>> Yeah, but not in "realtime". LV2 could of course support that, with  
>> an
>> extension, but it doesn't seem like the sort of thing that has enough
>> variance that a plugin mechanism is a huge win over using SRC.
>
> Mmm.. not if it is only time-stretching, but if it is time-stretching
> + other stuff (for example pitch shifting) together? Gonna use two
> plugins? I don't know :-\

Well, pitch shifting is fine in plugins.

>>>>> #5. Informations about delay time introduced by the algorithm  
>>>>> itself
>>>>> to do syncing with video-sources (for example).
>>>>
>>>> Uhm, dont we have such thing in LV2 already? If not, I think we  
>>>> need
>>>> it. This should be useful for syncing multiple audio streams too.  
>>>> For
>>>> video sources I'd prefer to have video streams (video port type),
>>>> probably as event port.
>>
>> In LADSPA there's a "magic" control out port called "_latency" or
>> something, that should apply to LV2 aswell, but I'm not sure if the
>> spec says so.
>
> Which spec are you referring to? IIRC the LADSPA spec doesn't state
> such a thing. Some convention maybe?

Yeah, that's what implying by "magic", in LV2 it's an annotation on  
ports.

>>>>> #6. Some way for the host to make sense of the meaning of some
>>>>> parameters and channels, to better support global settings and
>>>>> stuff.
>>>>
>>>> No idea what you mean by this. ATM, I miss instantiation stage
>>>> parameters though.
>>>
>>> Example: some LV2 extension tells the host that which parameter is a
>>> "quality vs. speed" parameter in a plugin. The host can, then,  
>>> show a
>>> global "quality vs. speed" parameter to the user.
>>>
>>> By "channel sense", I mean the host could know what a channel is  
>>> in a
>>> standardized way (I see you have that already in port groups
>>> extension, it could be generalized to channels rather than ports).
>>
>> What is a channel that is not a port/port group? Ports can be grouped
>> and attributed, as eg. quality v's speed, or you can just say that by
>> convention QvS ports have some well-known label, in the same way that
>> systemic latency is indicated.
>
> I was referring to one of the interleaved channels in a multi- 
> channel stream.
> About labels, could we maybe define a set of known labels? (And isn't
> that already implemented somehow in LV2? - I'm not exactly familiar
> with it, as you may have noticed)

OK, but interleaving is just inconvenient, in many ways.

>>>>> #8. Rules to find plugins possibly platform-specific and outside  
>>>>> of
>>>>> the specification; possibly one compile-time valid path.
>>>>
>>>> AFAIK, this conficts with "LV2 spirit". Why one needs this? If the
>>>> goal
>>>> is to avoid RDF Turtle, this shouldnt be issue with proper helper
>>>> library for hosts. Still such feature could be implemented in  
>>>> such a
>>>> helper library.
>>>
>>> Nope. I mean there should be platform-specific rules to get the list
>>> of directories containing shared object files and possibly there
>>> should be a fixed path to check on each platform, known at compile
>>> time.
>>
>> That's all in the specification. You can also do more sophisticated
>> searches based on attributes of the plugins (EQs, room correction or
>> whatever).
>
> "That's all in the specification" <- that's the weird part of it. Are
> you going to make a new revision any time there's some new platform to
> support?

Yes, sure.

> Then, I see no reference on how to get a fixed path when you
> compile/install an LV2 host, which could be useful after all (in many
> distros I had to set LADSPA_PATH on my own, for example).

http://lv2plug.in/docs/index.php?title=Filesystem_Locations

>>>>> #9. Maybe more strict requirements on both hosts and plugins
>>>>> (especially about thread-safety).
>>>>> I see there is some indication in the core spec, but I don't know
>>>>> about extensions and/or other possible concurrency issues.
>>>>
>>>> If things are not documented clearly enough I dont see why they
>>>> shouldnt.
>>
>> Extensions can label the concurrency properties of any additional
>> stuff in a machine readable way, but I don't think that's relevant,  
>> as
>> without knowing exactly what a new function does, how/why would you
>> call it?
>
> I agree. Anyway, I was just saying that maybe it's good to be strict
> about concurrency issues, in case LV2 is not already strict enough.

It is.

>>>>> #10. Something (a library possibly) to make use all of this  
>>>>> features
>>>>> easily from the host author's POV.
>>>>
>>>> I'd choose one path of two host helper libraries, one for music
>>>> player
>>>> like apps and one for more music creation oriented ones. Not sure
>>>> whether
>>>> SLV2 fits in former case, AFAIK it is only used in later ones.
>>>
>>> I could help, let's just see how this discussion turns out.
>>
>> I don't see why you'd need a different library, but hey, the more the
>> merrier.
>
> I didn't look at SLV2, gotta give it a look ASAP.
>
> However, let's make it simple for both developers who don't want to
> loose too much time with LV2 and for users.

That was the intention I believe. The sample code makes it look eaay,  
but I've not written any code with it myself.

LV2 is certainly one of the easiest plugin formats for plugin authors.

- Steve




More information about the Linux-audio-dev mailing list