How to get the length of wav file?

L

lgj573

I have tried Audio::Wav module,but it cann't get the length of a
compressed file such as u-law 8bit 8khz.Is there any other module will
do?
 
Z

zentara

I have tried Audio::Wav module,but it cann't get the length of a
compressed file such as u-law 8bit 8khz.Is there any other module will
do?

Try this

#!/usr/bin/perl -w
use strict;
use Fcntl;

my $fnm = shift;
sysopen WAV,$fnm,O_RDONLY;
my $riff;
sysread WAV,$riff,12;
my $fmt;
sysread WAV,$fmt,24;
my $data;
sysread WAV,$data,8;
close WAV;

# RIFF header: 'RIFF', long length, type='WAVE'
my ($r1,$r2,$r3) = unpack "A4VA4", $riff;
# WAV header, 'fmt ', long length, short unused, short channels,
# long samples/second, long bytes per second, short bytes per sample,
# short bits per sample
my ($f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8) = unpack "A4VvvVVvv",$fmt;
# DATA header, 'DATA', long length
my ($d1,$d2) = unpack "A4V", $data;

my $playlength = $d2/$f6;

print << "EOF";
RIFF header: $r1, length $r2, type $r3

Format: $f1, length $f2, always $f3, channels $f4,
sample rate $f5, bytes per second $f6,
bytes per sample $f7, bits per sample $f8

Data: $d1, length $d2
Playlength: $playlength seconds
EOF

__END__
 
L

lgj573

I try many wav file with the same format,and the $d2 are the same
value.
But other format works well.What is the problem?
Here is the result:

RIFF header: RIFF, length 272306, type WAVE


Format: fmt, length 18, always 7, channels 1,
sample rate 8000, bytes per second 8000,
bytes per sample 1, bits per sample 8


Data:
fa, length 291939
Playlength: 36.492375 seconds
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,184
Messages
2,570,979
Members
47,579
Latest member
CharaS3188

Latest Threads

Top