// name: dtmf.ck // desc: dual tone multiple frequency // (can be played into analog phones to place calls) // author: Perry Cook SinOsc row => dac; SinOsc col => dac; // frequencies [1209.0, 1336.0, 1477.0] @=> float cols[]; [697.0, 770.0, 852.0, 941.0] @=> float rows[]; // if you want to look up by number ( 0 - 9, *, # ) fun int key2col( int key ) { if( !key ) return 1; return (key - 1) % 3; } fun int key2row( int key ) { if( !key ) return 3; return (key - 1) / 3; } 0 => int i; int r,c,n; // go! while (i < 7) { .5 => row.gain; .5 => col.gain; Math.random2(0,3) => r; Math.random2(0,2) => c; 1 + r * 3 + c => n; if (n==11) 0 => n; if (n==10) { <<< r , c, "*" >>>; } else if (n==12) { <<< r , c, "#" >>>; } else <<< r , c, n >>>; rows[r] => row.freq; cols[c] => col.freq; 0.1 :: second => now; 0.0 => row.gain; 0.0 => col.gain; 0.05 :: second => now; i + 1 => i; }