#!/usr/bin/perl # display headers of wave files if ($#ARGV < 0 ) { print "display \n"; print "# display headers of wave files.\n"); exit; } # open it open(WAV,$ARGV[0]) || die "Can't open $ARGV[0]"; # RIFF Header read (WAV, $riffheader, 12); print "RIFF Header\n"; print "-----------\n"; @riffhdr = unpack("C32",$riffheader); for($i=0;$i<12;$i++) { if( ($i%8) ==0 && $i!=0 ){print "\n";} printf("%02x ",$riffhdr[$i]); } print "\n\n"; # verify header ---------------------------------- read (WAV, $header, 32); print "WAVE Header\n"; print "-----------\n"; @hdr = unpack("C32",$header); # print out header for($i=0;$i<32;$i++) { if( ($i%8) ==0 && $i !=0 ){print "\n";} printf("%02x ",$hdr[$i]); } print "\n\n"; #ckID --------------------------------- print "ckID: "; for($p=0,$i=0;$i<4;$i++){printf("%02x ",$hdr[$p++]);} $p-=4; for($i=0;$i<4;$i++){printf("%c",$hdr[$p++]);} print "\n"; #nChunkSize --------------------------- print "nChunkSize: "; for($i=0;$i<4;$i++) {printf("%02x ",$hdr[$p++]);} $p-=4; $nChunkSize = $hdr[$p++] + 256*$hdr[$p++] + 65536*$hdr[$p++] + 256*256*256*$hdr[$p++]; print "($nChunkSize bytes)\n"; #wFormatTag --------------------------- print "wFormatTag: "; printf("%02x ",$hdr[$p++]); printf("%02x \n",$hdr[$p++]); #nChannels ---------------------------- print "nChannels: "; printf("%02x ",$hdr[$p++]); printf("%02x \n",$hdr[$p++]); #nSamplesPerSec ----------------------- print "nSamplesPerSec: "; for($i=0;$i<4;$i++){printf("%02x ",$hdr[$p++]);} $p-=4; $nSamplesPerSec = $hdr[$p++]+256*$hdr[$p++] + 65536*$hdr[$p++] + 256*256*256*$hdr[$p++]; print "($nSamplesPerSec samples per second)\n"; #nAvgBytesPerSec ---------------------- print "nAvgBytesPerSec: "; for($i=0;$i<4;$i++) {printf("%02x ",$hdr[$p++]);} $p-=4; $nAvgBytesPerSec = $hdr[$p++]+256*$hdr[$p++] + 65536*$hdr[$p++]+256*256*256*$hdr[$p++]; print "($nAvgBytesPerSec average bytes per second)\n"; #nBlockAlign -------------------------- print "nBlockAlign: "; for($i=0;$i<2;$i++) {printf("%02x ",$hdr[$p++]);} $p-=2; $nBlockAlign = $hdr[$p++]+256*$hdr[$p++]; print "\n"; #nBitsPerSample ----------------------- print "nBitsperSample: "; for($i=0;$i<2;$i++) {printf("%02x ",$hdr[$p++]);} $p-=2; $nBlockAlign = $hdr[$p++]+256*$hdr[$p++]; print "\n";