#!/tools/local/perl -w
my $N    = 256;
my $STEP = 16;
use strict;
use Tk;
use Tk::widgets qw(Photo);
use Audio::Data;
my $file = shift;
open(AU,$file) || die "Cannot open $file";
binmode(AU);
my $au = new Audio::Data;
$au->Load(\*AU);
close(AU);
my $rate = $au->rate;
print "Rate is $rate\n";
my $n = $au->samples;
my $w = 0;
my $s = new Audio::Data;
my $max = 0;
my $min = 1000;
for (my $st = 0; $st < $n; $st += $STEP)
 {
  my $window = $au->hamming($N,$st);
  $window->r2_fft;
  my @amp = $window->dB(0,$N/2+1);
  foreach my $v (@amp)
   {
    $max = $v if $v > $max;
    $min = $v if $v < $min;
   }
  $s .= \@amp;
  $w++;
 }
my $mw = MainWindow->new;
my $img = $mw->Photo(-width => $w, -height => $N/2+1);
for (my $x = 0; $x < $w; $x++)
 {
  my @amp = $s->amplitude($x*($N/2+1),$N/2+1);
  for (my $y = 0; $y < @amp; $y++)
   {
    my $c = int(255*($amp[$y]-$max)/($min-$max));
    $c = sprintf("#%02X%02X%02X",$c,$c,$c);
    $img->put([[$c]], -to => $x, (@amp-1-$y));
   }
 }
$mw->Label(-image => $img)->pack;
MainLoop;

