#!/usr/bin/perl # Generates a 24-bit wav file for audio ramp testing use strict; use Audio::Wav; use POSIX; my $max = (2**24) - 1; my $wav = new Audio::Wav; sub ramp { my $file = shift; my $rate = shift; my $details = { 'bits_sample' => 24, 'sample_rate' => $rate, 'channels' => 2, }; my $write = $wav->write($file, $details); $write->set_info('name' => 'Ramp test'); my $left = 0; my $right = floor($max/2); for (my $i=0; $i<=$max; $i++) { my @samples = ($left, $right); # Audio::Wav can only write 16-bit samples $write->write_raw_samples(pack('CCCCCC', @samples[0] & 0xFF, (@samples[0] >> 8) & 0xFF, (@samples[0] >> 16) & 0xFF, @samples[1] & 0xFF, (@samples[1] >> 8) & 0xFF, (@samples[1] >> 16) & 0xFF, )); if (++$left > $max) { $left = 0; } if (--$right < 0) { $right = $max; } } $write->finish(); } ramp("ramp44100.wav", 44100); ramp("ramp48000.wav", 48000); ramp("ramp88200.wav", 88200); ramp("ramp96000.wav", 96000);