A simple sequencer

The Sequencer actor stores a time-stamped list of messages to be sent to (other) actors. Any message that a client can send to an actor can be added to a SequenceActor and then played back later.

To use the Sequencer implementation, load seq.so and create an actor of type SeqActor.

(Note: if you misspell SeqActor as "SequenceActor" or "SequencerActor" (the way you probably pronounce it), it'll still work. You'll get a SeqActor. No warning is issued for this. Normally if you misspell an actor's name, you get error messages about undefined actors and DSO's not loaded; this case is an exception.)

SeqActor messages

In addition to the messages understood by all generator actors, the SeqActor understands the following messages:
SetTempo hActor x
Set the tempo of this sequence to x beats per minute (default is 60).
SetBeatLength hActor x
Set the tempo of this sequence to x seconds per beat (default is 1, obviously, from above).
AddMessage hActor beat message...
Add an event to the list at time beat, in beats from the start of the sequence. message... is the message to be sent.
SetNumLoops hActor numloops
Set the number of times to execute the body of the sequence.
Defaults to -1, which means to loop forever.
0 means don't do it at all (i.e., don't play anything);
1 means do it once;
2 means twice, and so on.
SetLoopStart hActor beat
Set the loop start point to beat (default 0).
SetLoopEnd hActor beat
Set the loop end point to beat (default 1 million).
JumpTo hActor beat
Change the position of playback to beat.
Rewind hActor beat
Change the position of playback, backwards, to beat. If beat is omitted, it defaults to zero.
SkipEvents hActor count
Fast-forward, skipping the next count events. (Skipping backwards doesn't work as of this writing.)
Active hActor activeStatus
Play or pause the sequence (activeStatus is 1 or 0 respectively).