eval "use Audio::Data"; my ($server,$sound); eval { # Don't crash and burn if they don't have Audio installed. my $silent = Audio::Data->new(rate=>44100.); my $shk = Audio::Data->new(rate=>44100.); my $delay = 0.06; # so it doesn't occur at the same instant as the sound of the clicking key my $duration = 0.05; $silent->silence($delay); $shk->noise($duration,1.6); my $n = $shk->samples; my $attack_frac = .1; for (my $i=0; $i<=$n; $i++) { my $attack = 1.; if ($i<$n*$attack_frac) {$attack=$i/($n*$attack_frac)} my $tail = ($n-$i)/$n; my $env = $attack*$attack*$tail*$tail*$tail; $shk->[$i] *= $env; } $sound = Audio::Data->new(rate=>44100.); $sound = $silent . $shk; };