* v1.22, Tuesday, March 13, 2007
* Backwards compatibility for Apache::MP3 & others not expecting array refs.
* Use Encode::Detect if available.
* Parse Xing, Lame & Lyrics headers.
* v1.21, Saturday, January 4, 2007
* Big patch from Justin Fletcher for proper ID3v2.4 frame parsing.
* Fix for ID3v2.2 frames in a v2.3 header - iTunes stupidity. - dsully
* Allow multiple null separated "name" TCON values per the v2.4 spec.
* v1.20, Saturday, January 7, 2006
* New maintainer & Sponsor:
Dan Sully - daniel | at | electricrain.com
Slim Devices, Inc - dan | at | slimdevices.com
* Read ReplayGain Information in:
- RVA, RVAD and RVA2 tags.
- COMM tags via J.River Media Center
- PRIV tags via Windows Media Player
* Unicode / Encode optimizations to only guess if the string isn't ascii.
* Proper numeric genre decoding, now in tune with the ID3 spec.
* Parse and return PIC & APIC data.
* Handle multiple COMM and TCON tags.
* Parse APE tags that are in the ID3v1 header space.
* Parse USLT - Lyrics tags, used by iTunes.
* v1.13, Wednesday, March 10, 2005
Fix for UTF-16 handling. (Wes Barris)
* v1.12, Wednesday, March 9, 2005
Add OFFSET to info. (Dan Sully)
* v1.11, Friday, January 14, 2005
Fix for ID3v2 tags that happen to be UTF-16LE. (Dan Sully)
* v1.10, Thursday, December 30, 2004
Make utf8 enabled by default (if available).
perl 5.6 is now required.
Remove dependency on Symbol.pm.
Use three-arg open. (Alex Marandon)
Make reading of genres a bit more nimble. (Brian S. Stephan)
Fix frame counting. (Ben Winslow, Anthony DiSante)
Fix syncsafe byte reading. (Pierre-Yves Thoulon, et al)
Some Unicode fixes. (Ilya Konstantinov)
More changes for Unicode. Unicode::String no longer used; Encode is used
instead. Encode::Guess used as last resort. (Dan Sully)
Optimizations and other fixes. (michael, Dan Sully)
Support for reading ID3v2 tags from WAV and AIFF files. Not fully
supported. (Dan Sully)
* v1.02, Sunday, March 2, 2003
Fix broken argument parsing for use_mp3_utf8. (Ben Gertzfield)
Document that UTF8 can be access in ":all" export tag. (Ben Gertzfield)
Better document for new() method.
Add can() method. (Ken Williams)
Stick failure warnings in $@. (Jeffrey Friedl)
Added support for reasonable data from ID3v2 tags with RAW_V2 == 2.
(brian d foy and others)
Deal with broken iTunes comment frames in ID3v2.3.0/2.4.0. (Many users)
remove_mp3tag() was reporting 128 bytes removed even if no bytes were
removed. (scfc_de)
Allow calling methods on objects where tag does not exist (e.g., don't fail
if there is no comment but you call $mp3->comment).
Various bugfixes.
* v1.01, Friday, February 26, 2002
That was less reasonable than previously thought. Just strip off text
encoding bit, and then bytes for language and "up to first null" if COMM
field (COMM fields can have an extra comment about the comment, which is
terminated with a NULL, of course ...). Some encoders like to put in an
extra NULL at the end; plus, it was doing the wrong thing for
non-Latin-1 text. (Ben Gertzfield)
Also make it work better with ID3v2.2 tags, and make a more reasonable
guess at which comment to use if there's more than one.
Add some support for ID3v2.4.0 and Unicode strings in tags; see
use_mp3_utf8. (Ben Gertzfield)
Add TAGVERSION to get_mp3tag result.
* v1.00, Tuesday, January 22, 2002
Get more reasonable data out of ID3v2 tags by stripping up to
last null in tag.
Don't get FRAME_LENGTH if no FRAMES (Woodrow Hill).
* v0.91, Saturday, February 10, 2001
Fix dumb bug with /o. (David Reuteler)
Fix bug where get_mp3tag() would return an empty hashref instead of
undef if ID3v1 tag is asked for, and there is no ID3v1 tag, but there is
an ID3v2 tag. (Stuart)
* v0.90, Sunday, January 14, 2001
Added experimental OOP support for getting and setting data;
doesn't work for removing tags.
Made all functions optionally accept filehandle in place of filename.
Remove all croaks/dies and replace with simple returns or carps/warns.
(Jeffrey Sumler)
Fix various input data problems, bad warnings, division by zero, etc.
Undef $/ in set_mp3tag() so caller can't mess up the print.
Fix bitrate if ID == 0 and VBR. (Kyle Farrell, Per Bolmstedt)
Split off _get_info() from get_mp3info(), so, eventually, programmers
can access that functionality without passing in a file or filehandle.
Not supported yet, but available for playing.
Added total frames, leftover milliseconds, and formatted time.
Fixed sample frequency for MPEG 2.5 files (perhaps not including
VBR, though ... see bug above).
Add in some additional genres. (Peter Marschall)
Added ID3v2 tag removal. (Ronan Waide) NOTE: this is DANGEROUS. It is
tested, but needs more testing. The file is rewritten entirely. Lots
of data moving around.
Added ID3v2.2.0 tag reading. (Ronan Waide, Kee Hinckley)
Changed ID3v2 tag recognition to only match [A-Z0-9] instead of \w.
(Christoph Oberauer)
* v0.80, Monday, March 6, 2000
Better stripping of bad data (after nulls) in ID3 tags (Dave O'Neill)
Fixed VERSION in get_mp3info to properly return 2 when appropriate.
(Bogdan Surdu)
Added VBR support. Average bitrate is returned as BITRATE, and
minutes and seconds (MM and SS) should be accurate.
(Andy Waite for pointer to MP3Ext)
Made time calculation better overall.
Made MP3 header validation routines more comprehensive.
(Matthew Sachs for pointer to xmms source)
Changed name to MP3::Info (with wrapper still named MP3::Info).
* v0.71, Thursday, July 8, 1999
Several fixes to ID3v2 support unpack unsigned instead
of signed, don't bail out after 4096-byte offsets on long ID3v2 headers.
Thanks much to Matthew Sachs.
* v0.70, Saturday, July 3, 1999
Added preliminary ID3v2 reading support in get_mp3tag(). Thanks much
to Tom Brown.
* v0.64, Thursday, July 1, 1999
Found bug in checking TRACKNUM parameter, used \d instead of \d+.
Only gives spurious warnings, doesn't affect anything else.
Cleaned up a bit, prepare for impending ID3v2 support.
NOTE: truncate() broken in some builds of ActivePerl (517, maybe
others). No changes to module to fix problem. (Brian Goodwin)
* v0.63, Friday, April 30, 1999
Added ID3v1.1 support. (Trond Michelsen, Pass F. B. Travis)
Added 255 (\xFF) as default genre. (Andrew Phillips)
I think I fixed bug relating to spaces in ID3v2 headers. (Tom Brown)
* v0.62, Sunday, March 7, 1999
Doc updates.
Fix small unnoticable bug where ID3v2 offset is tag size plus 10,
not just tag size.
Not publickly released.
* v0.61, Monday, March 1, 1999
Fixed problem of not removing nulls on return from get_mp3tag() (was
using spaces for padding before ... now trailing whitespace and
all nulls are removed before returning tag info).
Made tests more extensive (more for my own sanity when making all
these changes than to make sure it works on other platforms and
machines :).
* v0.60, Sunday, February 28, 1999
Cleaned up a lot of stuff, added more comments, made get_mp3info()
much faster and much more reliable, and added recognition of ID3v2
headers. (Tom Brown)
* v0.52, Sunday, February 21, 1999
Fixed problem in get_mp3tag() that changed value of $_ in caller
(Todd Hanneken).
* v0.51, Saturday, February 20, 1999
Fixed problem with %winamp_genres having the wrong numbers
(Matthew Sachs).
* v0.50, Friday, February 19, 1999
Added remove_mp3tag(). Added VERSION to the hash returned by
get_mp3info(), and fixed a bug where STEREO was not being set
correctly.
Export all genre data structures on request. Added use_winamp_genres()
to use WinAmp genres. (Roland Steinbach)
Added a $MPEG::MP3Info::try_harder ($MP3::Info::try_harder)
variable that will try harder to find the MP3 header in a file. False
by default. Can take a long time to fail, but should find most headers
at any offsets if set to true.
Thanks to Matthew Sachs for his input and fixes, and for mp3tools.
* v0.20, Saturday, October 17, 1998
Changed name from MPEG::MP3Tag to MPEG::MP3Info, because it does
more than just TAG stuff now.
Made header stuff even more reliable. Lots of help and testing from
Meng Weng Wong again. :-)
* v0.13, Thursday, October 8, 1998
Had some problems with header verification, got some code from Predrag
Supurovic with his mpgtools. Great stuff. Also did some looping to find
a header if it is not in the "right" place. I did what I think it is a
smart way to do it, since some files have the header as far down as 2
kbytes into the file. First, I look at position 0, then at position 36
(a position where I have found many headers), then I start at 0 again
and jump in 128-byte chunks. Once I do that a bunch of times, I go back
at the beginning and try at 0 and go ahead in 1-byte chunks for a bunch
more times.
If you have an MP3 that has the header begin at an odd place like byte
761, then I suggest you strip out the junk before the header begins. :-)
* v0.12, Friday, October 2, 1998
Added get_mp3info(). Thanks again to mp3tool source from
Johann Lindvall, because I basically stole it straight (after
converting it from C to Perl, of course).
I did everything I could to find the header info, but if
anyone has valid MP3 files that are not recognized, or has suggestions
for improvement of the algorithms, let me know.
* v0.04, Tuesday, September 29, 1998
Changed a few things, replaced a regex with an unpack().
(Meng Weng Wong)
* v0.03, Tuesday, September 8, 1998
First public release.