// Listing 6.15 Musical fun with a resonant filter and three delay lines // Fun with UGens! By UG dude, Oct 14, 2020 // Impulse-excited resonant filter drives // three delay lines, fed back to themselves Impulse imp => ResonZ rez => Gain input => dac; // (1) Direct path of resonant filtered impulse. 100 => rez.Q; 100 => rez.gain; 1.0 => input.gain; // We can make arrays of UGens, too Delay del[3]; // (2) Array of three delay lines. // Let's have some stereo (3) Left, right, center delay outputs. input => del[0] => dac.left; input => del[1] => dac; input => del[2] => dac.right; // (4) Set up all the delay lines for (0 => int i; i < 3; i++) { del[i] => del[i]; 0.6 => del[i].gain; // (5) Each delay time is different but related. (0.8 + i*0.3) :: second => del[i].max => del[i].delay; } // Define note array for our song // (6) Array of notes that you'll draw from. [60, 64, 65, 67, 70, 72] @=> int notes[]; notes.cap() - 1 => int numNotes; // Let the fun begin! (and continue forever) while (1) { // (7) Play a random note (resonant filter frequency). Std.mtof(notes[Math.random2(0,numNotes)]) => rez.freq; 1.0 => imp.next; // (8) Fires impulse (output 1 on next sample). 0.4 :: second => now; }