#!/usr/local/bin/perl -w
use Audio::Data;
use Audio::Play;
use IO::File;
use Getopt::Std;
my %opt = ( r => 8000, a => 1 );
getopts('f:ar:',\%opt);

my %freq = ( 1 => [697,1209],
             2 => [697,1336],
             3 => [697,1477],
             4 => [770,1209],
             5 => [770,1336],
             6 => [770,1477],
             7 => [852,1209],
             8 => [852,1336],
             9 => [852,1477],
             '*' => [941,1209],
             '0' => [941,1336],
             '#' => [941,1477]
	   );  


my $rate = $opt{r};

warn "rate = ${rate}Hz\n";

my $sil = Audio::Data->new(rate => $rate, silence => 0.1);

$| = 1;

my $au = Audio::Data->new(rate => $rate);

foreach (@ARGV)
 {
  foreach $digit (split(//,$_))
   {
    next unless exists $freq{$digit};
    my ($l,$h) = @{$freq{$digit}};
    print "$digit";
    my $lo = Audio::Data->new(rate => $rate);     
    my $hi = Audio::Data->new(rate => $rate); 
    $lo->tone($l,0.125,0.4);
    $hi->tone($h,0.125,0.4);
    $au .= ($lo+$hi);   
    $au->silence(0.05); 
   }
  print "\n";
 }

if ($opt{f})
 {
  open(my $fh,">",$opt{f}) || die "Cannot open $opt{f}:$!";
  $au->Save($fh);
  close($fh);   
 }

if ($opt{a})
 {
  my $svr = Audio::Play->new;
  $svr->play($au);
 }
