From 513a3718ede09c9b237b428b5e1e7784ff002351 Mon Sep 17 00:00:00 2001 From: Marius Gavrilescu Date: Tue, 3 Sep 2013 00:45:27 +0300 Subject: [PATCH] Add OGG Vorbis support --- Makefile.PL | 11 ++++++----- lib/App/MusicExpo.pm | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index 06f4c12..31d11bc 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -5,11 +5,12 @@ WriteMakefile( NAME => 'App::MusicExpo', VERSION_FROM => 'lib/App/MusicExpo.pm', PREREQ_PM => { - 'Audio::FLAC::Header' => 0, - 'HTML::Template::Compiled' => 0, - 'Memoize' => 0, - 'MP3::Tag' => 1.12, - 'DB_File' => 0, + 'Audio::FLAC::Header' => 0, + 'HTML::Template::Compiled' => 0, + 'Memoize' => 0, + 'MP3::Tag' => 1.12, + 'DB_File' => 0, + 'Ogg::Vorbis::Header::PurePerl' => 0, }, MIN_PERL_VERSION => 5.014, EXE_FILES => [ 'musicexpo' ], diff --git a/lib/App/MusicExpo.pm b/lib/App/MusicExpo.pm index 3c0f4b7..68ef5da 100644 --- a/lib/App/MusicExpo.pm +++ b/lib/App/MusicExpo.pm @@ -7,6 +7,7 @@ use Audio::FLAC::Header qw//; use HTML::Template::Compiled qw//; use Memoize qw/memoize/; use MP3::Tag qw//; +use Ogg::Vorbis::Header::PurePerl; use DB_File qw//; use File::Basename qw/fileparse/; @@ -70,6 +71,23 @@ sub mp3info{ } } +sub vorbisinfo{ + my $file=$_[0]; + my $ogg=Ogg::Vorbis::Header::PurePerl->new($file); + + freeze +{ + format => 'Vorbis', + title => fix($ogg->comment('TITLE') || '?'), + artist => fix ($ogg->comment('artist') || '?'), + year => fix ($ogg->comment('DATE') || '?'), + album => fix ($ogg->comment('ALBUM') || '?'), + tracknumber => fix ($ogg->comment('TRACKNUMBER') || '?'), + tracktotal => fix ($ogg->comment('TRACKTOTAL') || '?'), + genre => fix ($ogg->comment('GENRE')) || '?', + path => $file, + } +} + sub normalizer{ "$_[0]|".(stat $_[0])[9] } @@ -78,11 +96,13 @@ sub run { tie my %cache, 'DB_File', $cache, O_RDWR|O_CREAT, 0644 unless $cache eq ''; memoize 'flacinfo', NORMALIZER => \&normalizer, LIST_CACHE => 'MERGE', SCALAR_CACHE => [HASH => \%cache] unless $cache eq ''; memoize 'mp3info' , NORMALIZER => \&normalizer, LIST_CACHE => 'MERGE', SCALAR_CACHE => [HASH => \%cache] unless $cache eq ''; + memoize 'vorbisinfo' , NORMALIZER => \&normalizer, LIST_CACHE => 'MERGE', SCALAR_CACHE => [HASH => \%cache] unless $cache eq ''; my @files; for my $file (@ARGV) { push @files, thaw flacinfo $file if $file =~ /.flac$/i; push @files, thaw mp3info $file if $file =~ /.mp3$/i; + push @files, thaw vorbisinfo $file if $file =~ /.og(?:g|a)$/i; } my $ht=HTML::Template::Compiled->new( -- 2.39.2