[linux-audio-dev] programming time signature and tempo

Tim Goetze tim at quitte.de
Sat Jan 10 15:29:21 UTC 2004


James W. Morris wrote:

>can anyone point me to some information about time signatures and tempo
>which would be useful from a programmers perspective.  I've looked on the
>internet and what I found either told me nothing I did not know or just said
>that time signature was irrelevant (ie for notation only) and it was down to
>the performers to decide.

true, from my experience. unless you want to code event-generating
algorithms that rely on bar/beat/tick notation.

a good resource is probably the standard MIDI file spec; i guess most
sequencers still work with the scheme described therein. lots of
open-source MIDI file players and sequencers out there, too.

>so far my code is based on 4/4 (4 'beats' of quarter notes per bar/measure).
>  a single bar has a value of 256, with halfnote 128, etc.  What I need to
>work out is how a different time signature will effect this, would I need to
>change the value of a bar etc?

on a sidenote: usually, a 'beat' equals a 1/4 note and has a 'value'
(to use your term) that is divisible by both 3 and 4. if using integer
'values' (the unit of which is usually called a 'tick') this allows
for precise notation of triplets and even beats alike. for instance:

1/4 note = 12 ticks; 1/8 note = 6 ticks; 1/8 triplet = 4 ticks etc.

getting the length of a bar then is as simple as you think. if 1/4 has
12 ticks, a 3/4 measure is 3 * 12 ticks, a 7/8 is 7 * 6 ticks etc. to
get the bar/beat/tick notation at an arbitrary point in a song
containing time signature changes, you need to iterate all prior
signatures (yes, caching b/b/t for every signature change 'event' is a
good idea if you need this often).

expressing tempo as quarter notes per minute (bpm) [or ticks per
second for ease of computation] regardless of time signature is the
simplest way, with no obvious drawbacks. as you assume, this allows
the sequencer engine to run without looking at time signature.

>I tried some experiments in cubase (i've not got any realtime sequencers
>working in linux yet) with audio blocks snapped to every half bar.  What
>confused me completely was when I changed the time signature to 5/8.  the
>snaps to half bars stayed in the same place, but the snaps to bars changed,
>ending with every 5th block snapped to a half note actually landing on a
>bar.   Uh?

i remember that cubase's 'snap' behaviour was irritating when it had
to deal with odd time signatures (back when i used it, years ago, on
an atari st). i can very well imagine it still is.

tim



More information about the Linux-audio-dev mailing list