[LV2] lv2 state#Dirty

Robin Gareus robin at gareus.org
Thu Oct 13 13:27:44 PDT 2016


On 10/13/2016 10:19 PM, Robin Gareus wrote:
> On 10/13/2016 09:33 PM, Hanspeter Portner wrote:
>> On 13.10.2016 16:42, Robin Gareus wrote:
>>> Hi LV2ers,
>>>
>>> If an LV2 plugin has an internal state and that state changes, a host is
>>> non the wiser. The host cannot mark the session as dirty (modified,
>>> needs save).
>>>
>>> e.g. Save the session or plugin-preset (marked "clean") then load a new
>>> sample into a synth (using a custom plugin GUI). On the outside nothing
>>> changes. Now close the session, quit the host: The changes are lost
>>> (same for presets or any state that needs saving).
>>>
>>> I propose http://lv2plug.in/ns/ext/state/#Dirty which allows a plugin
>>> that has a state interface to notify the host about state changes using
>>> an Atom message:
>>>
>>> state:Dirty
>>>
>>>
>>>   a rdfs:Class ;
>>>   rdfs:label "State modified message" .
>>
>> Sounds great and very useful indeed.
>>
>> How does this event look like?
>> Is it a new atom type or set via the patch extension?
>>
>> e.g.
>>
>> []
>>   a patch:Set ;
>>   patch:property <http://lvplug.in/ns/ext/state#Dirty> ;
>>   patch:value true .
> 
> It is not a property of the plugin. Hence I envisage just a message:
> 
> 
> As jalv -d puts it these days:
> 
> ## Plugin => UI (8 bytes) ##
> <http://lv2plug.in/ns/ext/atom#Object>
> 	a <http://lvplug.in/ns/ext/state#Dirty> .
> 
> 
> in C:
>   URID state_Dirty = mapuri ("http://lvplug.in/ns/ext/state#Dirty");
> 
>   LV2_Atom_Forge_Frame frame;
>   lv2_atom_forge_frame_time (&forge, 0);
>   lv2_atom_forge_object (&forge, &frame, 0, state_Dirty);
>   lv2_atom_forge_pop (&forge, &frame);
> 
> best,
> robin

PS. For completeness this could go along with

    atom:supports state:dirty;

on the plugin's notification port (atom:AtomPort, lv2:OutputPort),  and
it only makes sense for plugins that already have
   lv2:extensionData state:interface

I'm not sure if there's any benefit of requiring this. The dirty state
is not meaningful for semantic port connections. There's no matching input.



More information about the Devel mailing list