#!/usr/bin/perl -s # mp3time - show total time of mp3 files $ENV{PATH}="/bin:/usr/bin"; $ENV{BASH_ENV}=""; $mp3info = "/usr/bin/mp3info"; @mopts = ("-p", "%S\n"); # was -F1 $tfld = 17; # 17th field is seconds (in old mp3info) foreach $a (@ARGV) { if (-d $a) { $seconds = &mp3secs(<$a/*.mp3>); push(@seclist,$seconds); &printtime($a,$seconds); } elsif (-f $a) { $seconds = &mp3secs($a); push(@seclist,$seconds); &printtime($a,$seconds); } else { print STDERR "Invalid name $a\n"; next; } } if ($#ARGV > 0) { $seconds = 0; map { $seconds += $_ } @seclist; &printtime("------",$seconds); } exit 0; sub printtime { my $name = shift; my $seconds = shift; my $minutes = $seconds/60; my $hours = $minutes/60; my $days = $hours/24; my $printed = 0; #my $opts = $s + $m + $h + $d; if ($name) { print "$name\t"; } if ($s) { print "$seconds\t"; $printed++; } if ($m) { if ($c) { my ($min,$sec); $min=int($minutes); $sec=int(($minutes-$min)*60); printf "%6d:%02d\t",$min,$sec; } else { printf "%8.2f\t",$minutes; } $printed++; } if ($h) { if ($c) { my ($hr,$min); $hr=int($hours); $min=int(($hours-$hr)*60); printf "%5d:%02d\t",$hr,$min; } else { printf "%8.2f\t",$hours; } $printed++; } if ($d) { if ($c) { my ($dy,$hr); $dy=int($days); $hr=int(($days-$dy)*60); printf "%3d:%02d\t",$dy,$hr; } else { printf "%6.2f",$days; } $printed++; } if ($printed) { print "\n"; } else { printf "%d\t%8.2f\t%8.2f\t%6.2f\n", $seconds, $minutes, $hours, $days; } } sub mp3secs { my @margs = @_; my $seconds = 0; #print STDERR "$mp3info $mopts @margs\n"; #open(INFO,"$mp3info $mopts @margs|"); $pid = open(INFO, "-|"); if ($pid) { # parent while () { #print STDERR; $t = $_; #$t = (split(/\|/, $_))[$tfld]; $seconds += $t; #print STDERR "$t\n"; } close(INFO) || warn "mp3info exited with $?\n"; } else { # child exec($mp3info, @mopts, @margs) || die "can't exec program: $!"; # NOTREACHED } return $seconds; }