On Wednesday, April 14, 2004 5:42 AM [GMT+1=CET], Paul Davis <xxxpaul@xxxxxxxxxxxxxxxxxxxxxxxx> wrote: > the diagram above is one way, reflecting the fact that LADSPA splits > ports into input and output ports. but the basic idea that the act of > setting a parameter is nothing more than sending a request to the > plugin and waiting to see if anything happens is, i think, a key > one. I fully agree, that's why I started this whole discussion: because I've needed to go trough this in my plugin for the min/max/locked sliders... "1. external controller sends control change request to plugin (user tweaks GUI, moves fader, ...) 2. plugin handles the request and changes internal states 3. plugin in some way lets the external controller know what it did with the requested control value change (GUI feedback, motorized faders, force feedback, whatever, ...) and potentially also other parameters that depend the one for which a change was requested" The difference is that everything now passes through the host: no direct UI <--> core communication, if I get it right. If so, that's fine with me. To compare what I'm doing with the new proposal: "The way I am handling this in a VST plugin of mine, is by calling a setParameter function of my dsp core code with an extra argument that can be used to return other parameters that might have changed during the dsp setParameter call: setParameter(inParamIndex,inParamValue,&outListOfChangedParameters) The code calling the dsp core (in my case the VST effect class around the dsp core, called by the host) then checks the list (might be empty) of returned parameters that have changed and uses getParameter on the dsp core to obtain their eventual value and propagate this to the outside world (the environment the plugin "lives in", probably the host)." It seems now that what I am doing in my plugin core in response to a setParameter from the host looks very much like what is now being proposed to be done in an actor, so I'm surely fine with this way of handling parameter changes (or should we say parameter change *requests*?). > i don't think it would work that way. the actor would merely note that > it was morphing, the start and end values and the start time > (frame). the actor has to be "process()'ed" in just the same way as > the plugin. OK. To compare (I need this to keep me sane) with how I've seen morphing being done: "As far as I've seen, morphing on preset switching is handled by keeping two values for each parameter in the DSP of a plugin: a target value, and the current value. When a new process call is made (or multiple times within a single process call for a whole block) the parameter value is then updated towards the target value (usually depending on some speed and/or overshoot setting and the current difference between the current and target value). Updates that generate the new parameter values are driven from the DSP code during a process call so that it also works without a UI." So I guess that the difference here is that the actor also needs the start value and start time. The fact that it has to be "processed" is the same, except that I thought maybe doing this multiple times per block would be sufficient (per sample more accurate of course). OK, sounds fine to me. > in fact, i am opposed to them being separate entities. the > actor is an API detail of a plugin, not a distinct object. I think you're right: it might be a separate concept, but should probably be contained in the plugin itself. The processing of the actor would solve the morphing use case I proposed. Just to re-iterate and make sure it fits: "[While it springs to my mind: one other use case where updates from the dsp code to a UI are needed is the following: More and more plugins nowadays allow for automated ways of changing parameters (I don't mean host-controlled automation here). One of these things is morphing of parameters from one setting to another (for example: switching presets will morph from one preset to another, or pressing a "mutate" button will gradually change parameters to new, nearby but yet different settings). Now, this morphing is done from within the core code, and I personally (and I think all my users) would very much like to see the current parameter states reflected in the UI while they are changing. This calls for dsp-->UI notification.]" Where "dsp" (or "core") in my terms here means "actor + dsp" in the new terms. dsp <-> UI notification now goes through the host though. I'm fine with that. Koen ---------------------------------------------------------------------- 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