0.15 => dac.gain; SqrOsc a; SqrOsc b; SqrOsc c; SqrOsc d; [a, b, c, d] @=> SqrOsc oscs[]; LPF lpf => ADSR e => dac; 7000 => lpf.freq; e.set(10::ms, 500::ms, 0.5, 50::ms); for (0 => int i; i < 4; i++) { oscs[i] => lpf; } // play a chord (assumes "osc" and "e" are globals) fun void playChord( int root, int 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, 7, 10], 1, 1::second); playChord(55, [0, 3, 7, 10], 0.75, 1.5::second); playChord(57, [0, 3, 7, 10], 1, 500::ms); playChord(52, [0, 3, 7, 10], 1, 1.5::second);