Dan;
it's not a technical paper, but a paper about the musical effects of the syncing, which at the time was quite amazing.
Quite interesting indeed.
for instance, to sync with Matmos, running a specific BPM, we've had the players simply use their ears (!) to sync. this has worked quite well, and with a distributed audio system like PLOrk, it may well be that this kind of sync is *better* than network sync.
That sounds more or less like mixing two locked groove records using quartz lock on turntables, that's indeed not that hard while it does open up a lot of space for intuitive ways of dealing with things like the contrast between jazz-style brushed hits and techno-style stacato beats. I noticed I neglected to post the code I promissed before (now it's really there). As silly as it may sound; I seriously considered to augment this with a tap-tempo using -say- spacebar and the enter key for intuitive control over global tempo while livecoding. There is certainly a lot more to this topic than what we've seen so far in general applications, I feel. Yours; Kas. public class clk { //beats per minute static float BPM; //beats per bar static int bpb; static dur period; static int beatnr; static int barnr; static Event @ bar; static Event @ beat; fun static void bpm(float value) { if (value > 0) { value => BPM; minute / BPM => period; } else <<<"BPM should be greater than 0">>>; } } new Event @=> clk.beat; new Event @=> clk.bar; 120 => clk.bpm; 4 => clk.bpb; while(1) { if(!clk.beatnr) { clk.barnr++; clk.bar.broadcast(); } clk.beat.broadcast(); clk.period => now; clk.beatnr++; clk.bpb %=> clk.beatnr; }