[livecode] Programming time in livecoding systems

From: Jeff Rose <jeff_at_rosejn.net>
Date: Thu, 24 Sep 2009 12:18:22 +0200

I've been experimenting with different programming models for
livecoding, and currently I'm focused on the way time is modeled and
passed around in a musical process. I'm wondering if other people on
the list might have some thoughts and experiences in different ways of
dealing with time in musical programming?

Looking at what seem to be the popular "platforms" for musical
generation, it seems like there are pretty much four models of time:

* Chuck style synchronous time, where each thread manages its own
execution timing using what is basically a sleep mechanism.

* Impromptu's asynchronous callbacks, where function calls are scheduled
for future execution.

* SuperCollider patterns (Pbind & friends) with "managed time", where
either a fixed duration or a sequence of durations are used to specify
execution timing, but the actually scheduling is done for you by the
stream generation machinery.

* Max/MSP metronome events, where a timer fires an event to start
triggering notes.

I'm sure you can mix and match these styles in each system and language,
but in my dabbling in each of these worlds it seems like this is the
typical way people think of time when using them.

So, what I'm wondering is what are the tradeoffs, advantages and
disadvantages of these various models? For example, in Impromptu you
end up scheduling both audio events for musical timing as well as
program events for execution timing, which gives you full control while
also making you deal with more complexity. Chuck weaves these two
together so typically people think of them as the same thing, but I
think it also makes it harder to change things on the fly. Using
something like a metronome lets you ignore time completely and just
focus on generating the right notes, but it also diminishes your
expressive capabilities.

Can these be mixed? Are there certain styles or instruments that are
better suited for one model of time over another? Hopefully this is
something people can share some incite on.

-Jeff

P.S. I'm building a livecoding system in Clojure that sits on
SuperCollider. It's still in a very experimental stage, but it's
available here: http://github.com/rosejn/overtone
Received on Thu Sep 24 2009 - 10:20:29 BST

This archive was generated by hypermail 2.4.0 : Sun Aug 20 2023 - 16:02:23 BST