the code is supposed to make play and save a wav file each time you enter a repeat value. on win32, if your sound is turned up you should hear the number of clicks that repeats is set to. temp.wav is also created in the working folder. this all works. the only problem is that something is not resetting. if you enter 2 repeats it does 2 repeats. then enter 5 and it does 5 but if you then enter 1, it does 5 again. here is the script with the variables localized. also tried it with warnings and get back warnings that i do not understand about the data packing.
use strict;
#use warnings;
use Win32::Sound;
my $input = 1;
while ($input){
print "\nenter number of repetitions of pulse \"enter\" to quit.\
+n";
$input=<STDIN>;
chomp $input;
make_wav($input);
}
sub make_wav{
my $repeats = shift;
my $data = "";
my $counter = 0;
my $increment = 440/44100;
my $WAV = new Win32::Sound::WaveOut(44100, 8, 2);
$data = "";
$counter = 0;
for ( my $i = 1 ; $i < $repeats + 1 ; $i++ ) {
print "\ndoing repeat number $i";
for my $j (1..4410) {
my $v = sin($counter/2*3.14) * 128 + 128;
$data .= pack("cc", $v, $v);
$counter += $increment;
}
for my $k (1..440) { #silence between pulses
my $v = 128;
$data .= pack("cc", $v, $v);
}
}
$WAV->Unload(); # drop it
$WAV->Load($data); # get it
$WAV->Write(); # hear it
1 until $WAV->Status(); # wait for completion
$WAV->Save("temp.wav",$data); # write to disk
$WAV->Close();
|