Sorry for the long latency - I've been out of the country. I'm back and on a mission to wrap up reqs. On Sat, Dec 11, 2004 at 05:37:53PM +0000, Angus F. Hewlett wrote: > Now, in an API I designed for something we're doing in-house, we found > it very useful for parameters to have both a static and dynamic state, > to support realtime modulation in a flexible way without messing with > the settings the user wants to persist for the plug. This *sounds* right, but is it really? I mean, fundamentally - what's the difference between a MIDI knob that I turn and an LFO plugin that turns it for me? To the plugin there should not be a difference. Howevre, as you point out - the value that gets 'persisted' is debatable. > A) plug-ins that wish to support this kind of thing expose multiple > parameters for the same fundamental thing (say Filter Cutoff, stateful, > and Filter Cutoff MOD, non-stateful)? Is this similar to a modular synth where a knob controls a parameter unless a wire is plugged in? This means that *only* those plugins that really care what state should persist will be affected. But it impacts the user experience. > B) in general, the host is the arbiter of all modulations, so a host > doing a lot of modulation keeps a modulation-neutral state for the > plug-in around (updating it when the user makes a persistent parameter > change), and makes sure that the neutral state gets persisted. This is cleanest from the point of view of the plugin and the user, but the most work for hosts. However, with gestures, it is easy to distinguish a user event and an non-user event. So the host can track this. Maybe this is a suggestion, or is it a requirement? * Hosts should track user originated events and non-user originated events seperately. For stateful parameters, only user originated events should be considered for state save operations. (if this is a req, rather than a reccomendation, 'should' can be replaced with 'must') > C) non-stateful, additive parameter-modulation events for > otherwise-stateful parameters are potentially useful, and should be > considered as a requirement. This may be useful regardless of this problem. We've already got some language about normalized parameter control (to achieve LFO controls and such). Should we consider adding scalar control? - Normalized control means that the sender controls the receiver by providing an exact percentage. The receiver's new value is that percentage of it's scale. Example: Sender sends 0.5 to receiver. Receiver's range is 0-100. Receiver's new value is 50. - Scalar control means that the sender controls the receiver by providing a multiplier against the receiver's current value. The receiver's new value is it's old value multiplied by the scalar. Example: Sender sends 1.2 to receiver. Receiver's current value is 50. Receiver's new value is: (50 * 1.2) = 60 NOTE: This could be defined another way, to make it linear across a receiver's range, call it additive scalar control. The delta can be calculated as: ((scalar - 1.0) * receiver_range) Example: Sender sends 1.2 to receiver. Receiver's current value is 50. Receiver's range is 0-100. Receiver's new value is: (50 + ((1.2 - 1.0) * 100)) = 70 So I am all for B, and C might be useful. What think? ---------------------------------------------------------------------- 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