[gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Chris Grigg <gmpi-public@xxxxxxxxxxxxxx>
- To: gmpi@xxxxxxxxxxxxx
- Date: Wed, 31 Dec 2003 10:04:35 -0800
Great analysis, Tim. Thanks.
I worry (probably too much) about making assumptions that pre-empt
functionality. I can imagine situations where you might well want to
have more than one sender per control, and I can imagine plugs that
have their own internal sub-sequencing functions. Both of these
wouldn't be possible with the solution you describe, yes? What if we
add per-parameter properties (communicated to the host at
instantiation time, etc.) for kWantsGestureEvents and
kOnlyOneEventSource? (I guess the better, general form of the second
would look more like thePlug->getControlMaxEventSourceCount(
theControl ) -- so a plug can say 2 or 3 sources are OK, but it
doesn't want to have to handle an unbounded number of them.)
Better or worse?
-- Chris G.
P.S. Happy New Year to all tonight!
On Tue, Dec 30, 2003 at 02:13:08PM -0800, Chris Grigg wrote:
Please forgive a question about one thing I don't understand about
the concept of plugs being 'gesture-aware'.
I don't think plugs have any need to be gesture aware, outside of plugs that
host other plugs.
Assume that a given target (parameter, control, whatever terminology)
in a given plug instance is being driven by a series of
live-performed events from a HW control surface, bookended with
'gesture-start' and 'gesture-end' events; also assume that the plug
knows how it wants to handle the events within the gesture to make
sense out of them (correlating to another target's value, value
filtering/smoothing, or otherwise transforming in some manner). Now,
what if some other rogue event source (maybe a sequencer track, etc.)
is also sending events to the very same target, i.e. there's a second
series of incoming events having no relation to the gesture being
performed on the live control surface. Won't this blow the plug's
gesture processing out of the water?
Yes. This is the host's job. Two sources MUST have some relative priority.
For example, live MIDI data is more important than sequenced data. The host
must be able to see that both the MIDI source and the automation source are
sending events at the same time. They can either fight (yuck) or one wins.
If the prio is well understood, then it's obvious what happens. The host
drops events from the automation source while the MIDI source is active.
The plugin that is being fought over does not need to know ANYTHING AT ALL
about gestures or multiple sources.
Which leads me to my current thinking on gestures:
The host is what cares about gestures, so it can undo them. That is the
primary use of gestures. Touch automation is just a fancy undo, as I
understand.
It must be possible to include multiple controls in a gesture.
Anything that sends event can send gestures, but does not have to.
The way I see it working is best illustrated by an example:
* Assume a GUI controlling a DSP's parameters X and Y
* The GUI sends a GESTURE_START event to X and to Y
* The GUI can send any events it wants to X and Y
* The GUI sends a GETSURE_STOP event to X and Y
* The host knows all the events in that gesture, and can undo them
atomically.
Now let's get fancy:
* Assume a GUI controlling a DSP's parameters X and Y
* Assume an automation engine sending data to X and/or Y
* The GUI sends a GESTURE_START event to X and to Y
* The host knows that X and Y have two sources. It knows that GUI is higher
priority than automation. The host stops sending automation data to X
and Y.
* The GUI can send any events it wants to X and Y
* The GUI sends a GETSURE_STOP event to X and Y
* The host can decide if it should resume automation or not - that is a host
issue.
The main point to observe is that the GESTURE_* events are not really useful
to the plugin, but they are useful for the host.
Does that model seem to work?
Sorry for the deluge of email tonight, I have been thinking on this problem
for a while, and I *think* this is right.
Tim
----------------------------------------------------------------------
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: http://www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
----------------------------------------------------------------------
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: http://www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
- Follow-Ups:
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Tim Hockin
- References:
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Paul Davis
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: David Olofson
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Jeff McClintock
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Chris Grigg
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Tim Hockin
Other related posts:
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
- » [gmpi] Re: Reqs 3.8 Events - gesture start/end
Please forgive a question about one thing I don't understand about the concept of plugs being 'gesture-aware'.
I don't think plugs have any need to be gesture aware, outside of plugs that host other plugs.
Assume that a given target (parameter, control, whatever terminology) in a given plug instance is being driven by a series of live-performed events from a HW control surface, bookended with 'gesture-start' and 'gesture-end' events; also assume that the plug knows how it wants to handle the events within the gesture to make sense out of them (correlating to another target's value, value filtering/smoothing, or otherwise transforming in some manner). Now, what if some other rogue event source (maybe a sequencer track, etc.) is also sending events to the very same target, i.e. there's a second series of incoming events having no relation to the gesture being performed on the live control surface. Won't this blow the plug's gesture processing out of the water?
Yes. This is the host's job. Two sources MUST have some relative priority. For example, live MIDI data is more important than sequenced data. The host must be able to see that both the MIDI source and the automation source are sending events at the same time. They can either fight (yuck) or one wins. If the prio is well understood, then it's obvious what happens. The host drops events from the automation source while the MIDI source is active.
The plugin that is being fought over does not need to know ANYTHING AT ALL about gestures or multiple sources.
Which leads me to my current thinking on gestures:
The host is what cares about gestures, so it can undo them. That is the primary use of gestures. Touch automation is just a fancy undo, as I understand.
It must be possible to include multiple controls in a gesture.
Anything that sends event can send gestures, but does not have to.
The way I see it working is best illustrated by an example:
* Assume a GUI controlling a DSP's parameters X and Y * The GUI sends a GESTURE_START event to X and to Y * The GUI can send any events it wants to X and Y * The GUI sends a GETSURE_STOP event to X and Y * The host knows all the events in that gesture, and can undo them atomically.
Now let's get fancy:
* Assume a GUI controlling a DSP's parameters X and Y * Assume an automation engine sending data to X and/or Y * The GUI sends a GESTURE_START event to X and to Y * The host knows that X and Y have two sources. It knows that GUI is higher priority than automation. The host stops sending automation data to X and Y. * The GUI can send any events it wants to X and Y * The GUI sends a GETSURE_STOP event to X and Y * The host can decide if it should resume automation or not - that is a host issue.
The main point to observe is that the GESTURE_* events are not really useful to the plugin, but they are useful for the host.
Does that model seem to work?
Sorry for the deluge of email tonight, I have been thinking on this problem for a while, and I *think* this is right.
Tim
---------------------------------------------------------------------- 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: http://www.freelists.org/archives/gmpi Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Tim Hockin
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Paul Davis
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: David Olofson
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Jeff McClintock
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Chris Grigg
- [gmpi] Re: Reqs 3.8 Events - gesture start/end
- From: Tim Hockin