On Tuesday 17 December 2002 03.45, Paul Davis wrote:
David Olofson
wrote:
>On Monday 16 December 2002 21.59, Paul Davis wrote:
>[...]
>
>> so yes, ticks-per-beat is still necessary, but its a constant
>> (1920 in ardour).
>
>I suggest 1.0/beat for XAP. (64 bit double.)
this is awful. 1 tick per beat provides lousy resolution. when
something happens 1/3rd of the way through a beat, we don't want
float representation saying 0.33333333 and not 1/3.
Well, double has some 14 figures of accuracy (decimal), so it would
be more like 0.33333333333333 or so. When you're at tick 1000.0 (1000
*beats*!), it would be 1000.3333333333. Given 120 BPM, that would be
at a sample rate of 192 kHz, you'll have 12 fractional bits per
sample. 1000 beats at 120 BPM is 83.3 days.
Please check; I could be missing something.
If not, I simply have to disagree. :-)
Note that I'm *not* suggesting that sequencers must use this
internally.
>One may
claim that that's not an exact representation, but who
> cares, as long as it's much more accurate than what you need for
> sample accurate timing?
its not accurate enough, i think. but more importantly, it just
makes things non-intutitive: the tick is supposed to be a finer
resolution unit than the beat.
How much finer?
having 1 tick per beat is just ...
well, its just dumb, even if it is floating point.
Why call it a "tick" at all? (That's not really my invention. I'd
just call it "musical time".)
the good thing
about 1920 is it is divisible by both 3 and 4;
this lets both triplets and even sub-beats evaluate to integer
ticks.
precisely. actually, 1920 is the preferred value because its wholly
divisable by:
2,3,4,5,6,8,10,12 ...
Well, "exact" *is* nicer than "approximate", so... I'm beginning
to
like this. :-)
now even if you
implement ticks as float, it does make
programming and debugging of tick arithmetics a good deal
easier.
agreed. that was my point entirely.
Well, since I assume you've both done it, while I (IIRC) have only
done it with integers; point taken.
it is a value
that should be set by the host, or in turn
the user, exercising his right to make the choice.
ok, but implementation wise this can get tricky, because a tick
should ideally correspond to the smallest discrete unit of time
that we can schedule a musical event for.
Still, if it's floating point, there is no such restriction, really.
You *could* implement a sequencer with higher resolution, and make
use of the fractions below 1920.
in audio terms, this is
obviously 1 frame, but thats not so simple if you are doing a MIDI
or even MIDI-over-network or even SKINI implementation.
Right. There's no absolute maximum resolution.
So, considering the advantage of double with 1920 ticks/beat being
truly useful inside sequencers (no rounding errors), and it still
providing sub-tick accuracy, I move over to the 1920 side.
XAP audio time unit: 1920.0 ticks/beat
//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 ---