// 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;}
// 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;
}