Audio::File - Audio file abstraction library


Audio-File documentation Contained in the Audio-File distribution.

Index


Code Index:

NAME

Top

Audio::File - Audio file abstraction library

SYNOPSIS

Top

  use Audio::File;
  my $file = Audio::File->new( "foo.bar" );

  print "The ". $file->type() ."-file ". $file->name
  		." is ". int $file->length() ." seconds long.\n";

  print "It's interpreted by ". $file->tag->artist()
  		." and called ". $file->tag->title() ".\n";

DESCRIPTION

Top

Audio::File abstracts a single audio file, independant of its format. Using this module you can access a files meta-info like title, album, etc. as well as the files audio-properties like its length and bitrate.

Currently only the formats flac, ogg vorbis and mp3 are supported, but support for other formats may be easily added.

METHODS

Top

new

  $file = Audio::File->new( "foobar.flac" );

Constructor. It takes the filename of the your audio file as its only argument and returns an instance of Audio::File::${Type} if the corresponding file type is supported. The file type will be determined using the file extension. Currently flac, ogg and mp3 are supported but new formats may be added easily by creating a Audio::File::${Type} that inherits from Audio::File::Type, which is the base class for all file type classes.

The methods and behaviour of the returned are documented in Audio::File::Type.

TODO

Top

* Add possibility to change file and its tags.
* better (easier) interface?
* user shouldn't be forced to use Audio::File if he only want's the files tag or audio properties.
* Add possibility to access raw audio data (Audio::File::Data)

That could be done via Audio::Data or equivalent.

SEE ALSO

Top

Audio::File::Type, Audio::File::Tag, Audio::File::AudioProperties

AUTHOR

Top

Florian Ragwitz <flora@cpan.org>

COPYRIGHT AND LICENSE

Top


Audio-File documentation Contained in the Audio-File distribution.
package Audio::File;

use strict;
use warnings;

our $VERSION = '0.11';

sub new {
	my $class = shift;
	$class = ref $class || $class;
	my $self = {};
	bless $self, $class;
	return $self->_create(@_);
}

sub _create {
	my($self, $filename) = @_;
	
	return unless length($filename) > 4;

	(my $type = $filename) =~ s/.*\.//;
	$type = ucfirst lc $type;
	return unless $type;

	my $loaded = 0;
	eval "require Audio::File::$type; \$loaded = 1;";
	return "Audio::File::$type"->new( $filename ) if $loaded;
}

1;