#------------------------------------------------------------------------------
# File: MPC.pm
#
# Description: Read Musepack audio meta information
#
# Revisions: 11/14/2006 - P. Harvey Created
#
# References: 1) http://www.musepack.net/
#------------------------------------------------------------------------------
package Image::ExifTool::MPC;
use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::FLAC;
$VERSION = '1.01';
# MPC metadata blocks
%Image::ExifTool::MPC::Main = (
PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream,
GROUPS => { 2 => 'Audio' },
NOTES => q{
Tags used in Musepack (MPC) audio files. ExifTool also extracts ID3 and APE
information from these files.
},
'Bit032-063' => 'TotalFrames',
'Bit080-081' => {
Name => 'SampleRate',
PrintConv => {
0 => 44100,
1 => 48000,
2 => 37800,
3 => 32000,
},
},
'Bit084-087' => {
Name => 'Quality',
PrintConv => {
1 => 'Unstable/Experimental',
5 => '0',
6 => '1',
7 => '2 (Telephone)',
8 => '3 (Thumb)',
9 => '4 (Radio)',
10 => '5 (Standard)',
11 => '6 (Xtreme)',
12 => '7 (Insane)',
13 => '8 (BrainDead)',
14 => '9',
15 => '10',
},
},
'Bit088-093' => 'MaxBand',
'Bit096-111' => 'ReplayGainTrackPeak',
'Bit112-127' => 'ReplayGainTrackGain',
'Bit128-143' => 'ReplayGainAlbumPeak',
'Bit144-159' => 'ReplayGainAlbumGain',
'Bit179' => {
Name => 'FastSeek',
PrintConv => { 0 => 'No', 1 => 'Yes' },
},
'Bit191' => {
Name => 'Gapless',
PrintConv => { 0 => 'No', 1 => 'Yes' },
},
'Bit216-223' => {
Name => 'EncoderVersion',
PrintConv => '$val =~ s/(\d)(\d)(\d)$/$1.$2.$3/; $val',
},
);
#------------------------------------------------------------------------------
# Extract information from an MPC file
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
# - Just looks for MPC trailer if FileType is already set
# Returns: 1 on success, 0 if this wasn't a valid MPC file
sub ProcessMPC($$)
{
my ($et, $dirInfo) = @_;
# must first check for leading ID3 information
unless ($$et{DoneID3}) {
require Image::ExifTool::ID3;
Image::ExifTool::ID3::ProcessID3($et, $dirInfo) and return 1;
}
my $raf = $$dirInfo{RAF};
my $buff;
# check MPC signature
$raf->Read($buff, 32) == 32 and $buff =~ /^MP\+(.)/s or return 0;
my $vers = ord($1) & 0x0f;
$et->SetFileType();
# extract audio information (currently only from version 7 MPC files)
if ($vers == 0x07) {
SetByteOrder('II');
my $pos = $raf->Tell() - 32;
if ($et->Options('Verbose')) {
$et->VPrint(0, "MPC Header (32 bytes):\n");
$et->VerboseDump(\$buff, DataPos => $pos);
}
my $tagTablePtr = GetTagTable('Image::ExifTool::MPC::Main');
my %dirInfo = ( DataPt => \$buff, DataPos => $pos );
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
} else {
$et->Warn('Audio info currently not extracted from this version MPC file');
}
# process APE trailer if it exists
require Image::ExifTool::APE;
Image::ExifTool::APE::ProcessAPE($et, $dirInfo);
return 1;
}
1; # end
__END__
=head1 NAME
Image::ExifTool::MPC - Read Musepack audio meta information
=head1 SYNOPSIS
This module is used by Image::ExifTool
=head1 DESCRIPTION
This module contains definitions required by Image::ExifTool to extract meta
information from Musepack (MPC) audio files.
=head1 AUTHOR
Copyright 2003-2018, Phil Harvey (phil at owl.phy.queensu.ca)
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=head1 REFERENCES
=over 4
=item L
=back
=head1 SEE ALSO
L,
L
=cut