// Fairly silly program to synthesize the // word "chuck" in ChucK. Perry Cook, Nov. 2007 TwoPole r[3]; // Resonators Noise n => Envelope ne => r[0] => TwoZero z => Gain gain => dac; n => r[1] => z; n => r[2] => z; Impulse i => Envelope ie => OnePole o => r[0]; o => r[1]; o => r[2]; 0.99 => o.pole; 10.0 => o.gain; 1.0 => z.b0; 0.0 => z.b1; -1.0 => z.b2; // louder 4.0 => gain.gain; // say doCh(); 1 => int notDone; doUhh(); doKay(); fun void doUhh() { 0.1=>ie.time; 0.0 => n.gain; 600.0 => r[0].freq; 0.995 => r[0].radius; 1.0 => r[0].gain; 1500.0 => r[1].freq; 0.995 => r[1].radius; 0.5 => r[1].gain; 3900.0 => r[2].freq; 0.99 => r[2].radius; 0.2 => r[2].gain; spork ~ doimpulse(); 0.4 => i.gain; 1.0 => i.gain; 1 => ie.keyOn; 0.1 :: second => now; 1 => ie.keyOff; 0.1 :: second => now; 0 => notDone; } fun void doCh() { <<< "Ch" >>>; 0.03=>ne.time; 1900.0 => r[0].freq; 0.99 => r[0].radius; 1.0 => r[0].gain; 2700.0 => r[1].freq; 0.99 => r[1].radius; 0.7 => r[1].gain; 3200.0 => r[2].freq; 0.99 => r[2].radius; 0.8 => r[2].gain; 0.0 => i.gain; 0.02 => n.gain; 1=>ne.keyOn;0.03 :: second => now; 1=>ne.keyOff;0.03 :: second => now; } fun void doKay() { <<< "kK" >>>; 0.0 => i.gain; 0.05 :: second => now; 0.005=>ne.time; 0.007 => n.gain; 380.0 => r[0].freq; 0.99 => r[0].radius; 0.7 => r[0].gain; 1700.0 => r[1].freq; 0.99 => r[1].radius; 1.0 => r[1].gain; 4500.0 => r[2].freq; 0.99 => r[2].radius; 0.7 => r[2].gain; 1 => ne.keyOn; 0.005 :: second => now; 1 => ne.keyOff;0.01=>ne.time; 0.01 :: second => now; } fun void doimpulse() { 150.0 => float freq; <<< "uhh" >>>; while (notDone) { 1.0 => i.next; (1.0 / freq) :: second => now; freq * 0.98 => freq; } }