Specifications

7.3 Events and sequencing 81
s time
timebase 60 4 0
r time
/ 2
change
change
/ 4
0
intint
s quartime
s halftime
trigger float float
r halftime
r quartime
mod 16
/ 16
* 6.282
sin
tabwrite a
tabwrite b
r time
r time
r lfo1
r lfo2
s lfo1
mod 16
/ 16
* 6.282
s lfo2
b
a
r time
tabwrite c
c
* 6.282
r time
sin
sin
mod 64
/ 64
s lfo3
r lfo3
fig 7.23: Synchronous message LFOs
illustrates why you should often use a timebase that is a large multiple (say 64
times) of the re al event rate you want. You might use this to create interesting
polyrhythms or elaborate slow moving control signals for wind, rain or spinning
objects.
List sequencer
An alternative to an absolute timebase is using lists and delays to make a rela tive
time sequencer . Events are stored in a list, which we define to have a particular
meaning to a sequencer that will interpret it. In this case the list is read in
pairs, an event type and a time offset from the last event. So, a list like {1 0
2 200 1 400 } describes three events and two event ty pes. Event 1 occurs at
time = 0 and then at time = 200 event 2 occurs , followed by event 1 again at
time = 200 + 400 = 6 00. Times are in milliseconds and event types usually
correspond to an object name or a MIDI note number. The patch in Fig. 7.24
is hard to follow, so I will describe it in detail. The sequence list arrives at the
first inlet of
list split 2
where it is chopped at the second element. The firs t two
elements pass to the
unpack
where they are separated and processed, while the
remainder of the lis t passes out of the second outlet of
list split 2
and into the
right inlet of
list append
. Returning to
unpack
, our first half of the current pair
which identifies a float event type is sent to the cold inlet of a
float
where it
waits, while the second part which represents a time delay is passed to
delay
.
After a delay corresponding to this second value
delay
emits a bang message
which flushes out the value stored in
float
for o utput. Finally,
list append
is