use Win32::Sound; # Create the object my $WAV = new Win32::Sound::WaveOut(44100, 16, 1); my $data = ""; my $counter = 0; my $increment = 440/44100; # Generate 44100 samples ( = 1 second) for my $i (1..44100) { # Calculate the pitch # (range 0..65335 for 16 bits) $v = int(sin($counter/2*3.14) * (65335/2)); #signed integer (v) range -32768 <-> 32767 print "$v = ".unpack("v",pack("v", $v))."\n"; $data .= pack("v", $v); $counter += $increment; } $WAV->Load($data); # get it $WAV->Write(); # hear it 1 until $WAV->Status(); # wait for completion $WAV->Save("16.wav"); # write to disk $WAV->Unload(); # drop it exit;