[PD] [OT] Sequencing design

Frank Barknecht fbar at footils.org
Sat Dec 3 11:33:00 CET 2005


Hallo,
bstine at telus.net hat gesagt: // bstine at telus.net wrote:

> I know this is a little off topic, but this seems like the best place to ask.  I
> was wondering what the best way to implement a sequencer is.  I know that's a
> big question, but I mean in the most abstract way. 

It is indeed a big question. There are several approaches to
sequencing in general, some are also used in Miller's Pd docs and of
course in his book (http://crca.ucsd.edu/~msp/techniques.htm) in the
chapter on control computations. In the RRADical sequencers mentioned
here I took a very simple approach, which is limited to pop music in
4/4 and with constant beat dvisions: I just divide a beat into 16 or
32 event slots, which are visited by a counter. If there is an event
stored, when the counter hits a specific slot, it is output. Events
can be one or two numbers in the current sequencers. This looks like: 

slot ev1 ev2 
0    60 127
1    
2    60 0
3    40 75
...
16   60 127

Then I just use many of these to build real patterns. 

Note that this is indeed very limited. A better approach IMO is to
introduce a more general notion of an "Event" and then store the time
of occurence or the so called Inter-onset Interval. The IOI is more
popular in computer music I think, as you can do a lot of fine
calculations on it, like scaling the IOI will make a sequence run in a
differnet tempo etc. 

[qlist] uses IOI times and can be used to record and playback events.
However it's hard to get at the data stored inside a qlist to do
funkier things. To find out the IOI between two events a 

  [t b b]
  |    |
  [timer]

has proven to be very reliable.

Miller's data structure sequencer in the data structure examples is
also somehow using IOI internally. The data structure events use
x-position as onset times, but then Miller calculates the actual IOIs
to drive a [delay] to the next event.

Data structures are really nice to do sequencing. You can put a lot of
data, not just note and velocity, into the structure, position it and
play it, do transformations by traversing all notes etc. 

An example on how to record into a data structure windows is here:
http://royalrabbit.goto10.org/svn/goto10/pd-patches/fbar/pipeseq/

Instead of using a data structure window to store a sequence, in other
patches I also used the h_list and h_map externals from PDConainter
for sequencing. They lack the graphical appearance, but have some
other nice features. The basic idea there is to either [timer]-tag
rows in a [h_list], then sent the complete list to [pipe], or use a
[del]-construction similar to the data structure sequencer which uses
IOI times. This is more flexible if you want to to stuff like tempo
changes while a sequence is playing - which never happens in techno
music so there all this unnecessary anyways.

For reading about this stuff, I can for example recommend Robert
Rowe's "Machine Musicianship" at MIT Press, IIRC.

Ciao
-- 
 Frank Barknecht                 _ ______footils.org_ __goto10.org__




More information about the Pd-list mailing list