On Wed, Nov 30, 2005 at 03:25:16PM -0800, Chris Grigg wrote: > Alternatively, you could keep the noteIdHasDied() callback idea but > simply make the host responsible for keeping the note IDs it uses > mutually unique. Then once the host starts using a given note ID, it > can't be re-used until and unless the plug issues a noteIdHasDied() > callback for that note ID. Not hard, especially with a host helper > lib, and it simplifies all the plugs. This is pretty much what I just said, too - we crossed in air. :) > Just another take on the same idea... there are lots of ways to do > these things, and what's best depends on what your goals are. > Therefore: Requirements first! Req 89: GMPI must provide a note control mechanism. This must include at least the ability to turn specific notes on and off. GMPI note control must provide the ability to turn on the same note number more than once, and identify exactly which instance of a note an event is intended for. Req 91: Voice management must be the domain of the instrument. All that the host sees is a voice ID. Operations on a voice always use the ID. Req 92: GMPI must provide the ability for an instrument to define an arbitrary set of parameters that applies to each voice. These parameters must be able to indicate whether they apply only to the start of a voice (e.g. velocity), apply continuously to the voice (e.g. aftertouch), apply only to the end of a voice (e.g. release velocity). > >That's more or less similar to what is done in VST now when you're using > >MIDI events to get sample-accurate parameter changes, right? First the host > >calls your plugs processEvents function during which you receive all MIDI > >events for the about-to-be-processed audio buffer, and only then the > >process > >function is called that actually does the audio processing stuff, taking > >into account the timestamps and semantics of the parameter changes that are > >done via the MIDI events (usually CC's). > > But my point still holds: you still need to get the order of arrival > right, because one message may undo the action of another. If the > order is swapped, the performance is, uhm, inverted or something. How about these in the spec: If more than one event for a given control is delivered for a given timestamp, the behavior is undefined. All events delivered for a given timestamp must be considered to be simultaneous. All events for a given timestamp must be processed before results are generated for that timestamp. ---------------------------------------------------------------------- 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