0.15 => dac.gain; SqrOsc a; SqrOsc b; SqrOsc c; SqrOsc d; [a, b, c, d] @=> SqrOsc oscs[]; LPF lpf => ADSR e => Echo ec => JCRev r => dac; e.set(10::ms, 500::ms, 0.5, 50::ms); 0.1 => ec.mix; 0.05 => r.mix; for (0 => int i; i < 4; i++) { oscs[i] => lpf; } float t; fun void adjustLPF() { while(true) { // sweep the cutoff -350*Math.cos(t)+750 => lpf.freq; // increment t .03 +=> t; // advance time 10::ms => now; } } spork ~ adjustLPF(); // play a chord (assumes "osc" and "e" are globals) fun void playChord( int root, float interval[], float amp, dur T ) { // set freq (osc is your oscillator) for (0 => int i; i < 4; i++) { root + interval[i] => Std.mtof => oscs[i].freq; amp => oscs[i].gain; } // set amplitude // open env (e is your envelope) e.keyOn(); // A through end of S T-e.releaseTime() => now; // close env e.keyOff(); // release e.releaseTime() => now; } playChord(50, [0., 3.863, 7., 11.], 1, 1::second); playChord(55, [0., 3.863, 7., 11.], 0.75, 1.5::second); playChord(57, [0., 3.863, 7., 11.], 1, 500::ms); playChord(52, [0., 3.863, 7., 11.], 1, 2::second);