// Listing 8.8 Jazz band:
// save as "flute.ck"
// Our famous headliner flute solo (with EFX)
Flute solo => JCRev rev => dac; // (1) Flute soloist through reverb...
0.1 => rev.mix;
solo => Delay d => d => rev; // (2) ...also through a delay line.
0.8 :: second => d.max => d.delay; // (3) Sets delay to 0.8 seconds.
0.5 => d.gain;
0.5 => solo.gain;
// jazz scale data
[41,43,45,48,50,51,53,60,63] @=> int scale[]; // (4) Jazz scale array.
// then our main loop headliner flute soloist
while (1) { // (5) Infinite loop.
// (6) Waits either 0.2, 0.4, 0.6, 0.8, or 1.0 seconds.
(Math.random2(1,5) * 0.2) :: second => now;
if (Math.random2(0,3) > 1) { // (7) Occasionally (50% of time)
Math.random2(0,scale.cap()-1) => int note; // picks a new note...
Math.mtof(24+scale[note])=> solo.freq;
Math.random2f(0.3,1.0) => solo.noteOn;
}
else 1 => solo.noteOff; // (8) ...otherwise turns note off.
}