// Listing 7.17 Using ChucK's VoicForm formant voice UGen // Simple singing example using the VoicForm UG VoicForm singer => dac; 0.05 => singer.vibratoGain; [40,42,44,45,47,45,44,42] @=> int scale[]; // Start singing our first note Std.mtof(scale[0]) => singer.freq; 11 => singer.phonemeNum; // (1) Selects vowel by number 1 => singer.noteOn; // sing through whole scale 0 => int note; while (note < scale.cap()){ dipth("lll","ahh",scale[note]); // (2) Sings a diphthong (transition between two vowels) 1 +=> note; } // last note dipth("lll","ahh",scale[0]); 0.15 => singer.vibratoGain; 2.0 :: second => now; 1 => singer.noteOff; 0.2 :: second => now; fun void dipth(string phon0, string phon1, int note) { phon0 => singer.phoneme; 0.1 :: second => now; phon1 => singer.phoneme; Std.mtof(note) => singer.freq; 0.4 :: second => now; }