examples\book\digital-artists\chapter8\flute.ck
// 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.
}
home .. language .. program .. examples