On Tue, Apr 06, 2004 at 08:45:38AM +0100, Steve Harris wrote: > On Mon, Apr 05, 2004 at 06:13:13 -0700, Tim Hockin wrote: > > It's not illegal, it's a conflict. The plugin is a controller of itself. > > It should be clear to the end user that changing A changes B. Automating B > > and A at the same time *IS* a conflict. Two controllers are trying to > > change the same item. I don't see this as wrong, just a documentum. > > Redefining it as a conflict doesnt make it any easier to implement :) But it does relieve us of the burden of eliminating it ;) > > First, there is a req (currently #52) that all params are automatable. > > It wouldn't be a parameter if it only existed in the UI, he says > hypocritically. Maybe it's too late for me to get your UK humour. ?? > > Secondly, I see two potential ways of making this work, neither perfect: > > > > 1) The internal change is merely a callback to listeners, not an event. It > > is not seen as an undoable event. Modifying the child parameter (from GUI, > > MIDI, or automation) while the parent is also being modified will result in > > a conflict. This is correct behavior. Undoing a change to the parent would > > not undo the child (unless we do more than simple callback). > > Ugh. How will the host deistinguish that from an undoable event - what > happens if theres a subsequent or simultaneous change on that parameter - > what will hte host record in its automation lists? The host records the automation initiated by the user. That is the CORRECT automation to record. Internally-initiated changes (such as the parameter dependencies) should NOT be recorded as automation. If you record user-initiated events for a parameter that also receives internally initiated events, it is a conflict. Don't do that. There's nothing to FIX there. Where this falls down (I'm still working on it :) is two places: - You change A from GUI and it internally changes B. Then you undo the change to A. How does the host know to undo B? - You autote A and B. Changing A may change B. When it does, you have a conflict. However, the host can't resolve the conflict because it is not seeing events from the plugin to itself. > The conflict issue is clearer I think - if param A gets set to log(B) > when B is changed, you cant automate A and B. Correct. Now, one might argue that if B always changes based on A, perhaps it is not a separate parameter at all. But we absolutely need to handle patch morphing. User hits a button in the plugin. The plugin morphs all it's parameters into new values. While that morph is going, what happens if you automate a parameter? A conflict. > With the UI performing the morph for the morph testcase its not that its > unautomatable, its just that whats recorded is the real parameter changes - So I can't trigger the morph except through the GUI? Faceless plugins can't do morphing? If we mandate custom GUIs for advanced things like this, then you're right, maybe. To start a morph you'd send an event to a parameter of the GUI, not of the DSP. But is that ok that this requires a GUI? > If morph control is more fundamental (eg. in a vector synth) then you can > represent morph extreme X as one set of parameters and morph extreme Y as > another set, with a morph parameter to cross between them. This allows > full automation without conflicts. The UI can still calculate and display > the 'live' parameter values the synth is using (or receive control outputs > form the DSP code). This seems to be a workaround for a design shortcoming, to me. Are we thinking up workarounds already? :) I'm going to go to bed and think about this some more. ---------------------------------------------------------------------- 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