X-Git-Url: http://erislabs.net/gitweb/?p=id3fs.git;a=blobdiff_plain;f=lib%2FID3FS%2FAudioFile%2FMp3.pm;fp=lib%2FID3FS%2FAudioFile%2FMp3.pm;h=b4f340c0b6691ffbb89e76aa69a94f4017b8ae77;hp=d51e0b0d45a11e9719980f80502438cf92e5202b;hb=4f5ee0606c8b9726493ffab0e97872c670498184;hpb=c90fade565eeffaff51cc240c30e05f6e1f6e196 diff --git a/lib/ID3FS/AudioFile/Mp3.pm b/lib/ID3FS/AudioFile/Mp3.pm index d51e0b0..b4f340c 100644 --- a/lib/ID3FS/AudioFile/Mp3.pm +++ b/lib/ID3FS/AudioFile/Mp3.pm @@ -19,6 +19,7 @@ package ID3FS::AudioFile::Mp3; use strict; use warnings; use MP3::Tag; +use MP3::Info; sub new { @@ -28,7 +29,8 @@ 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}={}; @@ -39,16 +41,16 @@ sub set { 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; } @@ -56,13 +58,13 @@ sub choose { 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; } @@ -82,8 +84,8 @@ sub v1genre 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; @@ -94,8 +96,8 @@ sub v1genre 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 @@ -109,7 +111,7 @@ sub get_tags { $oldout=select(NULL); } - eval { $self->{mp3}->get_tags; }; + eval { $self->{mp3tag}->get_tags; }; warn("$self->{path}: $@\n") if($@); if(defined($oldout)) { @@ -128,11 +130,10 @@ sub add_tags return($self->set("genre", $genre)); } - sub write { my $self=shift; - $self->{mp3}->update_tags(); + $self->{mp3tag}->update_tags(); } sub delete_artist { shift->delete("artist"); } @@ -170,13 +171,13 @@ sub delete_tags 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; } } @@ -184,52 +185,52 @@ sub delete { 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"); } } } @@ -243,4 +244,26 @@ sub uniq } +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;