SystemClock is more accurate, but cannot call GUI primitives.
You will need to use the SystemClock to get accurate/musical scheduling.
See Clock for general explanation of how clocks operate.
The float you return specifies the delta to resched the function for. Returning nil will stop the task from being rescheduled.
(
AppClock.sched(0.0,{ arg time;
["AppClock has been playing for ",time].postln;
rrand(0.1,0.9);
});
)
xxxxxxxxxx
(
t = Main.elapsedTime;
"It is now % seconds after the computer booted.".format(t).postln;
AppClock.sched(2.0, { "It is now % sec later".format(Main.elapsedTime - t).postln; nil })
)
Schedules a task to be performed at a particular time. Because AppClock
is not intended to schedule with high precision, this time is approximate.
When the scheduling time is up, the task's awake
method is called. If the method returns a number, the task will be rescheduled for the time equal to the last scheduling time plus the returned value.
See also: Clock: Scheduling, Object: -awake.
xxxxxxxxxx
(
t = Main.elapsedTime;
"It is now % seconds after the computer booted.".format(t).postln;
AppClock.schedAbs(t + 1.0, { "It is now % sec later".format(Main.elapsedTime - t).postln; nil })
)
Clear the AppClock's scheduler to stop it.
xxxxxxxxxx
AppClock.clear;
The Routine (or Task) yields a float value indicating the delta (secs) for the AppClock to wait until resuming the Routine.
xxxxxxxxxx
(
var w, r;
w = Window.new("trem", Rect(512, 256, 360, 130));
w.front;
r = Routine({ arg appClockTime;
["AppClock has been playing for secs:",appClockTime].postln;
60.do({ arg i;
0.05.yield;
w.bounds = w.bounds.moveBy(10.rand2, 10.rand2);
w.alpha = cos(i*0.1pi)*0.5+0.5;
});
1.yield;
w.close;
});
AppClock.play(r);
)
AppClock.tick is called periodically by the SuperCollider language interpreter. This updates the Scheduler and causes any scheduled tasks to be executed. You should never call this method yourself.