class SinGen { SinOsc @ s; Gain @ g; // constructor work around fun SinGen SinGen(float freq, float gain, UGen out) { SinGen sg; SinOsc so @=> sg.s; Gain ga @=> sg.g; freq => sg.s.freq; gain => sg.g.gain; 0 => sg.s.op; sg.s => sg.g => out; return sg; } fun void beep(dur d) { 1 => s.op; d => now; 0 => s.op; } } SinGen gens[0]; gens << (SinGen sg).SinGen(400, 0.04, dac) << sg.SinGen(800, 0.02, dac) << sg.SinGen(1600, 0.02, dac) << sg.SinGen(3200, 0.02, dac) << sg.SinGen(6400, 0.02, dac); fun void mod() { SinOsc s => blackhole; 0.5 => s.freq; while(true) { (((s.last()+1)/2)+1)*200 => gens[0].s.freq; 2::ms => now; } } spork ~ mod(); me.yield(); while(true) { for( 0 => int i; i < gens.size(); i++ ) { spork ~ gens[i].beep(200::ms); me.yield(); 100::ms => now; } }