use strict;
use warnings;
use MP3::Tag;
+use MP3::Info;
sub new
{
bless($self,$class);
$self->{path}=shift;
- $self->{mp3}=MP3::Tag->new($self->{path});
+ $self->{mp3tag}=MP3::Tag->new($self->{path});
+ $self->{mp3info}=MP3::Info->new($self->{path});
$self->get_tags();
$self->{tags}={};
{
my ($self, $func, $value)=@_;
return $self->choose($func) unless($value);
- unless(exists($self->{mp3}->{ID3v1}))
+ unless(exists($self->{mp3tag}->{ID3v1}))
{
- $self->{mp3}->new_tag("ID3v1");
+ $self->{mp3tag}->new_tag("ID3v1");
}
- unless(exists($self->{mp3}->{ID3v2}))
+ unless(exists($self->{mp3tag}->{ID3v2}))
{
- $self->{mp3}->new_tag("ID3v2");
+ $self->{mp3tag}->new_tag("ID3v2");
}
my $method=$func . "_set";
- $self->{mp3}->$method($value, 1);
+ $self->{mp3tag}->$method($value, 1);
return $value;
}
{
my($self, $func)=@_;
my $thing=undef;
- if(exists($self->{mp3}->{ID3v2}))
+ if(exists($self->{mp3tag}->{ID3v2}))
{
- $thing=$self->{mp3}->{ID3v2}->$func();
+ $thing=$self->{mp3tag}->{ID3v2}->$func();
}
- if(exists($self->{mp3}->{ID3v1}) && (!defined($thing) || !length($thing)))
+ if(exists($self->{mp3tag}->{ID3v1}) && (!defined($thing) || !length($thing)))
{
- $thing=$self->{mp3}->{ID3v1}->$func();
+ $thing=$self->{mp3tag}->{ID3v1}->$func();
}
return $thing;
}
my($self, $val)=@_;
if($val)
{
- $self->{mp3}->new_tag("ID3v1") unless(defined($self->{mp3}->{ID3v1}));
- $self->{mp3}->{ID3v1}->genre($val);
+ $self->{mp3tag}->new_tag("ID3v1") unless(defined($self->{mp3tag}->{ID3v1}));
+ $self->{mp3tag}->{ID3v1}->genre($val);
return $val;
}
my $genre=undef;
sub tags
{
my $self=shift;
- return() unless(exists($self->{mp3}->{ID3v2}) && defined($self->{mp3}->{ID3v2}));
- return($self->{mp3}->{ID3v2}->genre());
+ return() unless(exists($self->{mp3tag}->{ID3v2}) && defined($self->{mp3tag}->{ID3v2}));
+ return($self->{mp3tag}->{ID3v2}->genre());
}
sub get_tags
{
$oldout=select(NULL);
}
- eval { $self->{mp3}->get_tags; };
+ eval { $self->{mp3tag}->get_tags; };
warn("$self->{path}: $@\n") if($@);
if(defined($oldout))
{
return($self->set("genre", $genre));
}
-
sub write
{
my $self=shift;
- $self->{mp3}->update_tags();
+ $self->{mp3tag}->update_tags();
}
sub delete_artist { shift->delete("artist"); }
sub delete_all
{
my($self)=@_;
- if(exists($self->{mp3}->{ID3v1}))
+ if(exists($self->{mp3tag}->{ID3v1}))
{
- $self->{mp3}->{ID3v1}->remove_tag;
+ $self->{mp3tag}->{ID3v1}->remove_tag;
}
- if(exists($self->{mp3}->{ID3v2}))
+ if(exists($self->{mp3tag}->{ID3v2}))
{
- $self->{mp3}->{ID3v2}->remove_tag;
+ $self->{mp3tag}->{ID3v2}->remove_tag;
}
}
{
my($self, $thing)=@_;
- if(exists($self->{mp3}->{ID3v1}) && $thing ne "genre")
+ if(exists($self->{mp3tag}->{ID3v1}) && $thing ne "genre")
{
my $action=$thing;
$action="genre" if($action eq "v1genre");
if($action eq "track")
{
- $self->{mp3}->{ID3v1}->track("00");
+ $self->{mp3tag}->{ID3v1}->track("00");
}
else
{
- $self->{mp3}->{ID3v1}->$action(" ");
+ $self->{mp3tag}->{ID3v1}->$action(" ");
}
}
- if(exists($self->{mp3}->{ID3v2}))
+ if(exists($self->{mp3tag}->{ID3v2}))
{
print "2: remove: $thing\n";
if($thing eq "artist")
{
- $self->{mp3}->{ID3v2}->remove_frame("TPE1");
- $self->{mp3}->{ID3v2}->remove_frame("TPE2");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TPE1");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TPE2");
}
elsif($thing eq "album")
{
- $self->{mp3}->{ID3v2}->remove_frame("TALB");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TALB");
}
elsif($thing eq "song")
{
- $self->{mp3}->{ID3v2}->remove_frame("TIT2");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TIT2");
}
elsif($thing eq "track")
{
- $self->{mp3}->{ID3v2}->remove_frame("TRCK");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TRCK");
}
elsif($thing eq "year")
{
- $self->{mp3}->{ID3v2}->remove_frame("TYER");
- $self->{mp3}->{ID3v2}->remove_frame("TDRC");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TYER");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TDRC");
}
elsif($thing eq "comment")
{
- $self->{mp3}->{ID3v2}->remove_frame("COMM");
+ $self->{mp3tag}->{ID3v2}->remove_frame("COMM");
}
elsif($thing eq "genre")
{
- $self->{mp3}->{ID3v2}->remove_frame("TCON");
+ $self->{mp3tag}->{ID3v2}->remove_frame("TCON");
}
}
}
}
+sub channels
+{
+ my($self)=@_;
+ return undef unless($self->{mp3info});
+ return( ($self->{mp3info}->stereo()) ? 2 : 1 );
+}
+
+sub bitrate
+{
+ my($self)=@_;
+ return undef unless($self->{mp3info});
+ return( int($self->{mp3info}->bitrate()) );
+}
+
+sub samplerate
+{
+ my($self)=@_;
+ return undef unless($self->{mp3info});
+ return(int($self->{mp3info}->frequency() * 1000));
+}
+
+
1;
my $audiotype=$file->audiotype();
my @tags=$file->tags();
my $haspic=$file->haspic();
+ my $channels=$file->channels();
+ my $bitrate=$file->bitrate();
+ my $samplerate=$file->samplerate();
$artist=undef unless($self->ok($artist));
print "$self->{me}: $path: no artist tag defined\n" unless(defined($artist));
my $artist_id=$self->add_to_table("artists", $artist);
my $path_id=$self->add_to_table("paths", $pathpart);
$album=undef unless($self->ok($album));
- if($self->{verbose} && !defined($album))
+# if($self->{verbose} && !defined($album)) FIXME
+ if(!defined($album))
{
print "$self->{me}: $path: no album tag defined\n";
}
$self->add_tag($file_id, "UNTAGGED");
}
- $year="UNKNOWN" unless($self->ok($year));
+ $year="UNKNOWN" if(!$self->ok($year) || $year =~ /^0+$/);
$self->add_tag($file_id, "year", $year);
if($year=~/^(\d\d\d)\d$/)
{
{
$self->add_tag($file_id, "audiotype", $audiotype);
}
+
+ if($self->ok($channels))
+ {
+ if($channels eq "2")
+ {
+ $self->add_tag($file_id, "channels", "stereo");
+ }
+ elsif($channels eq "1")
+ {
+ $self->add_tag($file_id, "channels", "mono");
+ }
+ else
+ {
+ $self->add_tag($file_id, "channels", $channels);
+ }
+ }
+
+ if($self->ok($bitrate))
+ {
+ $self->add_tag($file_id, "bitrate", $bitrate);
+ }
+
+ if($self->ok($samplerate))
+ {
+ $self->add_tag($file_id, "samplerate", $samplerate);
+ }
+
}
sub add_tag