Using scheduler: a strangeness or my misunderstanding?

Dear users,

I expect that ‘Code A’ works the same way as ‘Code B’, except ‘Code A’ posts the elapsed times. However, ‘Code A’ lets many synths work. Why does this occur?

// Code A:
(
var scheduler, startedAt, elapsed, synth;

startedAt = Main.elapsedTime;
elapsed = { (Main.elapsedTime - startedAt).postcs };
synth = { |midiPitch|
	{ SinOsc.ar(midiPitch.midicps.postcs, 0, 0.2) 
		* Env.perc.kr(doneAction: Done.freeSelf) 
}.play };
scheduler = SystemClock;
scheduler.sched(0.5, { synth.(64); elapsed.() });
//scheduler.sched(2.0, { synth.(72); elapsed.() });
//scheduler.sched(0.0, { synth.(60); elapsed.() });
//scheduler.sched(1.0, { synth.(67); elapsed.() });
)
::
// Code B:
(
var scheduler, startedAt, elapsed, synth;

synth = { |midiPitch|
	{ SinOsc.ar(midiPitch.midicps.postcs, 0, 0.2) 
		* Env.perc.kr(doneAction: Done.freeSelf) 
}.play };
scheduler = SystemClock;
scheduler.sched(0.5, { synth.(64) });
//scheduler.sched(2.0, { synth.(72) });
//scheduler.sched(0.0, { synth.(60) });
//scheduler.sched(1.0, { synth.(67) });
)

best regards,

They shouldn’t work the same.

This is explained in the tutorial series: 14. Scheduling Events | SuperCollider 3.12.2 Help

hjh

1 Like

Thanks! Yes, it is. Oh, my goodness, I am foolish and have a terrible memory…