#!/usr/bin/perl -w use Audio::Wav; my $wav = new Audio::Wav; my $sample_rate = 44100; my $bits_sample = 16; my $details = { 'bits_sample' => $bits_sample, 'sample_rate' => $sample_rate, 'channels' => 1, }; my $write = $wav -> write( 'testout400.wav', $details ); &add_sine(100, 5 ); sub add_sine { my $hz = shift; my $hz1 = $hz+.1; my $length = shift; my $pi = ( 22 / 7 ) * 2; $length *= $sample_rate; my $max_no = ( 2 ** $bits_sample ) / 2; for my $pos ( 0 .. $length ) { my $time = $pos / $sample_rate; my $time1 = $time; $time *= $hz; $time1 *= $hz1; my $val = sin $pi * $time; $val += sin $pi * $time*2; $val += sin $pi * $time*4; $val += sin $pi * $time*8; $val += sin $pi * $time*16; $val = $val/5; my $val1 = sin $pi * $time1; $val1 += sin $pi * $time1*2; $val1 += sin $pi * $time1*4; $val1 += sin $pi * $time1*8; $val1 += sin $pi * $time1*16; $val1 = $val1/5; $val= (5*$val+5*$val1)/10; my $samp = $val * $max_no; $write -> write( $samp ); } } $write -> finish();