// Listing 5.15 Recursive (function that calls itself) scale-playing function
// sound chain, mandolin to audio out
Mandolin mand => dac; // (1) Mandolin instrument
// recursive scale player
fun int recurScale(int note, dur rate) { // (2) recurScale function definition
Std.mtof(note) => mand.freq; // (3) Sets frequency of mandolin note
1 => mand.noteOn; // (4) Plays note using noteOn
rate => now; // (5) Waits for duration rate
// only do it until some limit is reached
if (note > 40) // (6) Limit for recursion
{
// here's the recursion, it calls itself!
recurScale(note-1, 0.9*rate); // (7) recurScale can call recurScale!
}
}
// now play a couple of scales
recurScale(60, 0.5 :: second);
recurScale(67, 1.0 :: second);