#!/usr/bin/perl -w
use strict;
use MP3::Tag;
my ($mp3, $count, $v1, $v2)=(undef,0,0,0);
die "usage: tagged.pl filename(s)" if $#ARGV == -1;
my $t = time;
for my $filename (@ARGV) {
next until -f $filename;
print " -- $filename:\n";
$mp3 = MP3::Tag->new($filename);
$mp3->get_tags;
$count++;
if (exists $mp3->{ID3v1}) {
$v1++;
print " ** found ID3v1 - TAG\n";
print " Song: " .$mp3->{ID3v1}->song . "\n";
print " Artist: " .$mp3->{ID3v1}->artist . "\n";
print " Album: " .$mp3->{ID3v1}->album . "\n";
print "Comment: " .$mp3->{ID3v1}->comment . "\n";
print " Year: " .$mp3->{ID3v1}->year . "\n";
print " Genre: " .$mp3->{ID3v1}->genre . "\n";
print " Track: " .$mp3->{ID3v1}->track . "\n";
if (0==1) { # write a test tag
$mp3->new_tag("ID3v1") unless exists $mp3->{ID3v1};
$mp3->{ID3v1}->comment("This is only a Test Tag");
$mp3->{ID3v1}->song("testing");
$mp3->{ID3v1}->genre("Blues");
$mp3->{ID3v1}->artist("Artest");
$mp3->{ID3v1}->album("Test it");
$mp3->{ID3v1}->year("1965");
$mp3->{ID3v1}->track("5");
# or at once
# $mp3->{ID3v1}->all("song title","artist","album","1900","comment",10,"Ska");
$mp3->{ID3v1}->write_tag;
}
}
if (exists $mp3->{ID3v2}) {
$v2++;
print " ** found ID3v2 - TAG; size = $mp3->{ID3v2}->{tagsize} (+10);\n";
my $frames = $mp3->{ID3v2}->get_frame_ids();
foreach my $frame (keys %$frames) {
my ($info, $name) = $mp3->{ID3v2}->get_frame($frame);
next unless defined $info;
if (ref $info) {
print "$frame $name:\n";
while(my ($key,$val)=each %$info) {
if (0==1 && $frame eq "APIC" && $key eq "_Data") { # view pics
open (FH, ">/tmp/temp.$v2");
print FH $val;
close FH;
system("xview /tmp/temp.$v2 &"); #choose this to another program if you want
}
$val= length($val) ." Bytes" if $key =~ /^_/; # _... means binary data
$val =~ s/\0/\\0/g; # Multiple strings in a frame
print " * $key => '$val'\n" unless $key eq "tagname";
}
} else {
$info =~ s/\0/', '/g; # Multiple strings in a frame
print "$frame $name: '$info'\n";
}
}
if (0==1) { # add a id3v2 comment
$mp3->new_tag("ID3v2") unless exists $mp3->{ID3v2};
$mp3->{ID3v2}->add_frame("COMM","ENG","Test","This is an example, how to add an ID3v2 frame");
$mp3->{ID3v2}->write_tag;
}
}
}
warn "$count Files | $v1 ID3v1 Tags | $v2 ID3v2 Tags | ". (time-$t) . "s \n";