On Wednesday 18 December 2002 00.53, Tim Hockin wrote:
You'll
need all these fields at once when sending control ramp
events to voices, so unions won't help. The struct is exactly 32
bytes, so we're going to end up with 64 byte events if we add
anything. On big deal, maybe. (64 bit platforms will need an
extra 4 bytes for 'next' anyway.)
I think it is premature to worry about the size of events. Let's
get what data we need in there and optimize it after we're done
arguing :)
Yeah, it's no big deal, really. I'm just trying to streamline the
interfaces for other reasons as well - and keeping the argument count
to a minimum coincides with that.
Well, you do
expect a beat synced effect to track the *beat*,
right? Now, if you have two timelines running at different tempi,
which one do you track?
Actually, no. I can't think of anything that would track the beat
if it wasn't started on a beat.
So, how do you suggest a plugin should know when to start...? In all
sequencers I've seen so far, it's perfectly possible to start
playback at any point on the timeline - which may well be in the
middle of a beat. *That's* what locking deals with. (As well as
making sure that you don't drift out of sync due to rounding errors
or other issues.)
Assuming 4/4 time, and a note
played on an eith note between beats - what kind of effect would
lock onto a true beat edge?
A beat sync'ed arpeggiator. (Or it wouldn't be beat sync'ed! Just
tempo sync'ed.)
However, many beat sync effects may not receive any note events or
similar events at all, so they definitely need their "trig"
information from elsewhere - and that is the timeline.
I really would expect anything to sync
to a beat-width and do a (delay, whatever), but that effect to be
off by 1/2 beat because it was started by 1/2 beat off.
That applies only to a few special kind of effects, which basically
all belong in the "tempo sync'ed delay" category. Beat sync is not
the same thing as tempo sync.
Can you
give me an example?
Yep, did so. Can probably give you some more, if you like.
They need
different event types, but that applies to string and
raw data controls as well. And this just makes them easier to
handle.
I want to limit the number of special case events. If we have to
special case this stuff, then I'm going to argue against controls
again :)
Well, then we'll have to implement 64 bit double controls - including
ramping. And the tempo control could end up receiving non-linear
ramps... I'm not sure this is a good idea.
Also note that many plugins that deal with musical time will *still*
have to special-case the tempo and position controls - which means
you get an extra check for every control you receive, just to see if
it's timeline related stuff.
Finally, the meter is two floats (tempo has it's own event), and
nothing like a normal Control event. We could use two float controls
with ramping disabled, though.
TRANSPORT_START/STOP don't need events of their own either. Those
would be a single control where any non-zero value means "rolling!"
(No interpolation.)
Hmm... Ok, so the only special cases I have so far are:
XAP_A_POSITION, /* Set new song position */
XAP_A_TIME_INFO, /* Time Info changed! */
The first is 64 bit double, while the other is just a notification
event that you get in case of an unexpected modification in the
current time info. (Or something. I have to think some more about the
details here. Would like to avoid having plugins polling hysterically
all the time...)
Do you expect
a synth to play anything but some default
frequency, without pitch input? :-)
Umm, more or less, yes. A simple sample player with no pitch
control would just play the sample. A whitenoise generator would
make noise but not have any sense of pitch.
Well, yes - they would just use the default values. Same applies to
beat and tempo sync plugins. Just have default values for tempo and
transport on/off, and start with POSITION at 0, and the plugin will
effectively have it's own, free running timeline.
//David Olofson - Programmer, Composer, Open Source Advocate
.- The Return of Audiality! --------------------------------.
| Free/Open Source Audio Engine for use in Games or Studio. |
| RT and off-line synth. Scripting. Sample accurate timing. |
`--------------------------->
http://olofson.net/audiality -'
---
http://olofson.net ---
http://www.reologica.se ---