[gmpi] Re: 3.11 topic: Inter-parameter linkages

  • From: Mike Berry <mberry@xxxxxxxxx>
  • To: gmpi@xxxxxxxxxxxxx
  • Date: Mon, 12 Apr 2004 10:41:11 -0600



gogins@xxxxxxxxxxxx wrote:

This sounds like a good idea.

Original Message:
-----------------
From: Ben ben@xxxxxxx
Date: Mon, 12 Apr 2004 08:56:07 -0500 CDT
To: gmpi@xxxxxxxxxxxxx
Subject: [gmpi] Re: 3.11 topic: Inter-parameter linkages


I think Jeff is on the right track with the "Actors" concept.


I would suggest the following mechanism:

When a plugin is instantiated, it publishes data "parameters" which are
globally accesible. Parameters have a value that can be read/written to. They also have a mechanism for subscribing to them. Whenever a parameter's
value is written to, it broadcasts a message to all it's subscribers.


Plugins may themselves subscribe to parameters (theirs or anybody else's ..
for example a tempo-synched delay might subscribe to the host "tempo"
parameter).  This supports Jeff's "Actors" concept.  The host changes a
parameter, and the plugin has a chance to react to the change.  All the
code is included in the plugin instance ... the host does not have to call
any special functions.


Actually, this is at odds with the Actor concept. This is a standard broadcaster/listener system, which is exactly what is the problem with VST. Here is the problem:


In your model, the plugin is the ultimate holder of the parameter state. The host can send a parameter change, but then the plugin can change it and send out a message. This means that the host has to obey the value determined by the plugin, but it is also trying to set the value. The broadcaster system also has threading issues. If it is an async broadcast, then you have the host unable to complete an undoable action without waiting for possible messages. If it is synchronous, then you have many listeners (like GUI) which should not be getting process thread calls getting them.
Finally, it requires a really ugly host-side mechanism/hack which stores a completely parallel version of the current values of the parameters, and tries vainly to keep them in sync with the values that the plugin thinks are current. I know exactly how ugly and bug-ridden this design is because I have written host support for VST (setParameterAutomated is simply a variation on the model you are proposing - the plugin broadcasts a parameter change using setParameterAutomated, but relies on the host to dispatch to all listeners instead of maintain the listener list in the plugin. Arguably, setParameterAutomated is actually a better design than having all of the listeners register directly with the plugin, because it moves one complex piece of code from the plugin, where it would be repeated in every plug (with subtle, app-destroying, variations) to the host).


The actor model gives the actor plugin a chance to make modifications to an event before it happens, but in a synchronous and completely contained manner. The host is the only broadcaster in the system, and the DSP is simply a parameter sink. The current value of a parameter is always maintained by the host, which gets away from one of the great problems with VST, which is that the plugin is the ultimate authority on the current state of a parameter.
The most important thing in my mind is that the DSP not be permitted to set parameter values, ever. There should not even be methods for the host to query for parameter values. This should be true whether or not the actor is a separate plugin or simply separate calls on the sample binary. We must have a wall between parameter logic and signal processing.


--
Mike Berry
Adobe Systems


---------------------------------------------------------------------- Generalized Music Plugin Interface (GMPI) public discussion list Participation in this list is contingent upon your abiding by the following rules: Please stay on topic. You are responsible for your own words. Please respect your fellow subscribers. Please do not redistribute anyone else's words without their permission.

Archive: //www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe

Other related posts: