use Win32::Sound; print "===================================================================\n"; # Create the object $WAV = new Win32::Sound::WaveOut(44100, 16, 2); $data = ""; $counter = 0; $increment = 440/44100; $x[1] = 0; $y[1] = 2000; $n[1] = 10; $x[2] = 0; $y[2] = 2100; $n[2] = 17; # Generate 44100 samples ( = 1 second) for $i (1..44100*10) { # Calculate the pitch # (range 0..255 for 8 bits) # $v = sin($counter/2*3.14) * 32000 + 32000; $i = 1; $v[$i] = $x[$i]+3200; $x[$i] = $x[$i] + $y[$i]/$n[$i]; $y[$i] = $y[$i] - $x[$i]/$n[$i]; $i = 2; $v[$i] = $x[$i]+3200; $x[$i] = $x[$i] + $y[$i]/$n[$i]; $y[$i] = $y[$i] - $x[$i]/$n[$i]; # "pack" it twice for left and right $data .= pack("SS", $v[1], $y[1]+3200); $counter += $increment; } $n[1] = 20; $n[2] = 25; # Generate 44100 samples ( = 1 second) for $i (1..44100*10) { # Calculate the pitch # (range 0..255 for 8 bits) # $v = sin($counter/2*3.14) * 128 + 128; $i = 1; $v[$i] = $x[$i]+10000; $x[$i] = $x[$i] + $y[$i]/$n[$i]; $y[$i] = $y[$i] - $x[$i]/$n[$i]; $i = 2; $v[$i] = $x[$i]+10000; $x[$i] = $x[$i] + $y[$i]/$n[$i]; $y[$i] = $y[$i] - $x[$i]/$n[$i]; # "pack" it twice for left and right $data .= pack("SS", $v[1]+$v[2], $v[2]); $counter += $increment; } $WAV->Load($data); # get it $WAV->Save("sinus.wav"); # write to disk print "===================================================================\n"; $WAV->Write(); # hear it 1 until $WAV->Status(); # wait for completion # $WAV->Save("sinus.wav"); # write to disk $WAV->Unload(); # drop it