#!/usr/bin/perl -CS use strict; use warnings; use Audio::Scan; use DateTime::Format::ISO8601::ParseDateTag; use Error qw(:try); if ($#ARGV == -1) { exit 0 } my $filename = "$ARGV[ 0 ]"; my $hash = Audio::Scan->scan_tags($filename); my $tags = $hash->{ "tags" }; sub default { if (defined $tags->{ $_[0] }) { if ( ref($tags->{ $_[0] }) ne 'ARRAY' ) { print "$_[1]: $tags->{ $_[0] }\n"; } else { my $length = length("$_[1]s: "); my $array = $tags->{ $_[0] }; print "$_[1]s: $$array[0]\n"; shift(@$array); foreach my $var (@$array) { printf("%*s%s\n",$length,"",$var); }; }; }; }; # ARTIST default("ARTIST","Artist"); # ALBUM if (defined $tags->{ "ALBUM" }) { print "Album: $tags->{ ALBUM }"; #DISCNUMBER if (defined $tags->{ "DISCNUMBER" }) { print ", Disc $tags->{ DISCNUMBER }"; } # *VOLUME if (defined $tags->{ "VOLUME" }) { print " [$tags->{ VOLUME }]" }; # *EDITION if (defined $tags->{ "EDITION" }) { print " ($tags->{ EDITION })" }; print "\n"; } # TRACKNUMBER default("TRACKNUMBER","Track"); # TITLE if (defined $tags->{ "TITLE" }) { print "Title: $tags->{ TITLE }"; # OPUS if (defined $tags->{ "OPUS" }) { if ( $tags->{ OPUS } =~ /^[0-9]*$/ ) { print " (Opus $tags->{ OPUS })" } else { print " ($tags->{ OPUS })" }; }; # *AKA if (defined $tags->{ "AKA" }) { print " \"$tags->{ AKA }\"" }; # *KEY if (defined $tags->{ "KEY" }) { print " in $tags->{ KEY }" }; # PART if only one part if ((defined $tags->{ "PART" }) && ( ref($tags->{ "PART" }) ne 'ARRAY' )) { print ", $tags->{ PART }" } # *PARTNUMBER elsif (defined $tags->{ "PARTNUMBER" }) { print ", Part $tags->{ PARTNUMBER }" }; # VERSION if (defined $tags->{ "VERSION" }) { print " \[$tags->{ VERSION }\]" } print "\n"; }; # PART if multiple parts if ((defined $tags->{ "PART" }) && ( ref($tags->{ "PART" }) eq 'ARRAY' )) { default("PART","Part"); } # COMPOSER default("COMPOSER","Composer"); # CONDUCOR default("CONDUCOR","Conductor"); # PERFORMER default("PERFORMER","Performer"); # ENSEMBLE default("ENSEMBLE","Ensemble"); # ARRANGER default("ARRANGER","Arranger"); # LYRICIST default("LYRICIST","Lyricist"); # AUTHOR default("AUTHOR","Author"); # LABEL default("LABEL","Label"); # *COLLECTION default("COLLECTION", "Collection"); # PUBLISHER default("PUBLISHER","Publisher"); # COPYRIGHT default("COPYRIGHT","Copyright"); # EAN/UPN default("EAN/UPN","EAN/UPN"); # GENRE default("GENRE", "Genre"); # PRODUCER default("PRODUCER", "Producer"); # DATE if (defined $tags->{ "DATE" }) { my $dateparser = DateTime::Format::ISO8601::ParseDateTag->new; if ( ref($tags->{ "DATE" }) ne 'ARRAY' ) { try { print $dateparser->parse($tags->{ "DATE" }) . "\n"; } catch Error with { print "$@" }; } else { my $array = $tags->{ "DATE" }; foreach my $var (@$array) { try { print $dateparser->parse($var) . "\n"; } catch Error with { print "$@" }; }; }; } # LOCATION default("LOCATION", "Location"); # LICENSE default("LICENSE", "License"); # SOURCEMEDIA default("SOURCEMEDIA", "Sourcemedia"); # ENCODING default("ENCODING", "Encoding"); # ENCODED-BY default("ENCODED-BY", "Encoded-by"); # CDDB default("CDDB", "CDDB"); # LABELNO default("LABELNO", "LabelNO"); # ISRC default("ISRC", "ISRC"); # COMMENTS default("COMMENT", "Comment");