#!/usr/bin/perl use strict; use Digest::MD5; use Data::Dumper; my $file = shift or die "Usage: audmd5 \n"; my @files = (); foreach (@ARGV) { # Get all the valid files if (-r $_) { push (@files,$_); } } if (!@files) { die("No files found to process"); } foreach my $file(@files) { 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 "$file: " . $ctx->hexdigest, "\n"; }