seqzero
The minimalist headless osc sequencer that does the job
It is written in python, you'll need to write some simple code to set it up.
Concepts
sequencer
- has a
bpm
- is step-by-step, with substeps
- loops through
sequences
of arbitrary lengths - plays/stops
scenes
- is controllabe via osc
- is not real-time (see
timer
below)
sequences
- are named
- can be
enabled/disabled/toggled
- can be added via osc using
JSON
notation - are
lists
([]
) of steps, which can bemessages
lists
ofmessages
to be sent at the same timeFalse
orNone
for empty stepstuples
(()
) of substeps that will divide the beat evenly
messages
- are
lists
([]
) of arguments- [optional] port
number
or target (ip:port
string). If omitted, the sequencer's default target will be used) - osc
address
string (/a/b/c
) - osc arguments
- [optional] port
scenes
- are named
- are threaded
python
scripts that are executed outside thesequencer
loop - take the
sequencer
object as argument and can access its methods, including some helper functions (ie to interpolate values), and atimer
object which provides an accuratewait
method. - are defined in a separated module file which is provided to the sequencer
- can't run multiple times concurrently (playing a scene that is already playing makes it stop and start from the beginning)
timer
The timer compensates for python's timing innaccuracy by measuring the time elasped between two calls to its wait
method and substracting it from the 2'nd wait
's duration.
The sequencer's timing critical methods (/play
, /scene/play
) support an optional extra osc timestamp argument meant for compensating the network latency, it must be an osc timetag (osc type 't') as returned by liblo's time()
.
Long story short: seqzero may be late, but will catch up on the first occasion.
Requirements
python
2.7+ / 3python-liblo
Tested on gnu/linux only
Getting started
See examples (more docs to come...)
OSC API
See API (osc addresses are case-insensitive)