#!/usr/bin/perl use strict; use Digest::MD5; my $file = shift or die "Usage: audmd5 \n"; die "Not a file: $file" unless -f $file; my $fh; if ($file =~ /\.mp3$/i) { open ($fh, "-|", "mpg123", "-q", "-s", $file) or die "Couldn't open mpg123 for decoding: $!\n"; } elsif ($file =~ /\.ogg$/i) { open ($fh, "-|", "ogg123", "-q", "-d", "raw", "-o", "byteorder:little", "-f", "-", $file) or die "Couldn't open ogg123 for decoding: $!\n"; } else { die "Not mp3 or ogg" unless $file =~ /\.(mp3|ogg)$/i; } my $ctx = Digest::MD5->new; my $buf; my $rv; while ($rv = read($fh, $buf, 1024*16)) { $ctx->add($buf); } die "Error reading: $!" unless defined $rv; print $ctx->hexdigest, "\n";