// CHORDS ARRAYS // // min [0., 3., 7., 0.] @=> float min[]; // min4/2 [-2., 0., 3., 7.] @=> float min42[]; // Maj [0., 4., 7., 12.] @=> float maj[]; /////////////////// // Global UGen // // patch low -> rev -> dax -> LPF low => NRev rev => dac; // Set Param for UGen // // mix reverb .4 => rev.mix; // set LPF 500 => low.freq; 1 => low.Q; 0.5 => low.gain; // FUNCTIONS // fun void playChord(int root, float chord[], float vel, dur a, dur d, float s, dur r) { // ugens "local" to the function TriOsc osc[4]; ADSR e => low; // patch for(0 => int i; i < osc.cap(); i++) { osc[i] => e; } // freq and gain for(0 => int i; i < osc.cap(); i++) { Std.mtof(root + chord[i]) => osc[i].freq; vel => osc[i].gain; } // open env (e is your envelope) e.set(a, d, s, r); e.keyOn(); // A through end of S e.releaseTime() => now; // close env e.keyOff(); // release e.releaseTime() => now; } fun void play(int root, float chord[]) { .5 => float vel; for(0 => int i; i < 8; i++) { playChord(root, chord, vel, 50::ms, 50::ms, 0.5, 100::ms); 80::ms => now; vel - .2 => vel; } } /////////////////////////////////////////////////////////////////////// // MUSICAL STATEMENT // play(62, min42); // d min play(65, maj); // f maj play(60, maj); // c maj play(67, min); // g min 5::second => now; ////////////////////////