use strict;
use warnings;
+use Audio::FLAC::Header;
sub new
{
my $class=ref($proto) || $proto;
my $self={};
bless($self,$class);
- # FIXME
- print "FLAC UNIMPLEMENTED\n";
+
$self->{path}=shift;
+ my $flac=Audio::FLAC::Header->new($self->{path});
+ $self->{tags}=$flac->tags();
return $self;
}
+sub get
+{
+ my ($self, $tag, $verbose)=@_;
+ if(exists($self->{tags}->{$tag}) &&
+ defined($self->{tags}->{$tag}) &&
+ length($self->{tags}->{$tag}) &&
+ $self->{tags}->{$tag} =~ /\S+/)
+ {
+ my $val=$self->{tags}->{$tag};
+ $val =~ s/\//-/g; # drop slashes
+ return $val;
+ }
+ else
+ {
+ warn("$self->{path}: no $tag defined in FLAC comments\n") if($verbose);
+ return undef;
+ }
+}
+
+sub artist { shift->get("ARTIST", 1); }
+sub album { shift->get("ALBUM", 1); }
+sub audiotype { return "flac"; }
+sub haspic { return undef; } # FIXME
+sub v1genre { return undef; } # ID3 only
+
+# We don't care if year is not set
+sub year
+{
+ my ($self)=@_;
+ my $date=shift->get("DATE", 0);
+ return undef unless($date);
+ if($date =~/(\d\d\d\d)/)
+ {
+ $date=$1;
+ }
+ return $date;
+}
+
+sub tags
+{
+ my $self=shift;
+ my $genre=$self->get("GENRE");
+ return({}) unless($genre);
+ my @tags=split(/\s*,\s*/, $genre);
+ for my $tag (@tags)
+ {
+ if($tag=~/([^\/]+)\/(.*)/)
+ {
+ my $tagname=$1;
+ my $tagval=$2;
+ $tagval=~s/\//-/g;
+ $self->{tags}->{$tagname}=$tagval;
+ }
+ else
+ {
+ $self->{tags}->{$tag}=undef;
+ }
+ }
+ return $self->{tags};
+}
+
1;
+