// name: hevymetl-algo3.ck // desc: demo of STK FM HevyMetl (Algorithm 3) // // name: Perry R. Cook // date: June 2021, for REPAIRATHON 2021 // patch HevyMetl h => NRev r => dac; // reverb mix 0.05 => r.mix; // set delay h => Delay d => d => r; // quarter note length 0.25::second => dur T; // delay 4*T => d.max => d.delay; // feedback gain 0.25 => d.gain; // time loop while( true ) { // LFO depth 0.0 => h.lfoDepth; // play notes playNote( 66,2*T ); playNote( 66,T ); playNote( 66,T ); playNote( 67,T ); playNote( 67,3*T ); playNote( 64,T ); // from time to time... if( maybe*maybe ) playNote(64+2*Math.random2(0,5),2*T); else playNote(64,2*T); playNote(66,5*T); riff(); } fun void playNote( int note, dur dure ) { Std.mtof(note) => h.freq; 1 => h.noteOn; 0.9*(dure) => now; 1 => h.noteOff; 0.1*(dure) => now; } fun void riff() { [74,69,66,72,67,62,71,67,62,69] @=> int notes[]; [1,1,1,2,1,1,2,1,1,5] @=> int durs[]; for (int i; i < notes.cap(); i++) { Std.mtof(notes[i]) => h.freq; 1 => h.noteOn; if (i == notes.cap()-1) 0.3 => h.lfoDepth; durs[i]*T => now; } 1 => h.noteOff; }