1* v1.24 Sat Nov  8 17:05:15 PST 2008
2   * RT #13970: get_mp3info goes into infinite loop if no 0xFF byte in file
3   * Fix VBR check for files that have Info header.
4   * Add VBRI check from KDF.
5   * Fix parsing of id3v2 APIC frame when it uses UTF8 encoding
6   * Support new WAV id3v2 block type, ID32 - Andy Grundman
7   * Handle ULT like USLT
8
9* v1.23 Thu Jul 26 14:11:08 2007
10
11   * Handle all tags with NULL delimited lists - Patch from Justin Fletcher <gerph (at) gerph.org>
12   * Fix MP3::Info for tag reading in AIF (and WAV, presumably) - kdf
13   * Read RVA2 (signed short) in big-endian order - andyg
14
15* v1.22 Tue Mar 13 16:16:59 2007
16
17   * Backwards compatibility changes for non-SlimServer callers of MP3::Info
18
19* v1.21 Thu Jan  4 13:41:42 PST 2007
20
21   * Use Module::Install
22   * Prefer Encode::Detect::Detector over Encode::Detect if available.
23   * Skip over Lyrics3 tags
24   * Pull out iTunes iTunNORM gain info.
25   * Handle Named genres separated by nulls & multiple genres
26   * Skip over broken iTunes ID3v2.2 frames that are in a ID3v2.3/2.4 header.
27   * Patch from Justin Fletcher <gerph (at) gerph.org> to fix ID3v2.4 header & footer parsing.
28
29* v1.20, Saturday, January 7, 2006
30
31   * New maintainer & Sponsor:
32
33	Dan Sully - daniel | at | electricrain.com
34	Slim Devices, Inc - dan | at | slimdevices.com
35
36   * Read ReplayGain Information in:
37
38	- RVA, RVAD and RVA2 tags.
39	- COMM tags via J.River Media Center
40	- PRIV tags via Windows Media Player
41
42   * Unicode / Encode optimizations to only guess if the string isn't ascii.
43
44   * Proper numeric genre decoding, now in tune with the ID3 spec.
45
46   * Parse and return PIC & APIC data.
47
48   * Handle multiple COMM and TCON tags.
49
50   * Parse APE tags that are in the ID3v1 header space.
51
52   * Parse USLT - Lyrics tags, used by iTunes.
53
54* v1.13, Wednesday, March 10, 2005
55
56   Fix for UTF-16 handling.  (Wes Barris)
57
58* v1.12, Wednesday, March 9, 2005
59
60   Add OFFSET to info.  (Dan Sully)
61
62* v1.11, Friday, January 14, 2005
63
64   Fix for ID3v2 tags that happen to be UTF-16LE.  (Dan Sully)
65
66* v1.10, Thursday, December 30, 2004
67
68   Make utf8 enabled by default (if available).
69
70   perl 5.6 is now required.
71
72   Remove dependency on Symbol.pm.
73
74   Use three-arg open.  (Alex Marandon)
75
76   Make reading of genres a bit more nimble.  (Brian S. Stephan)
77
78   Fix frame counting.  (Ben Winslow, Anthony DiSante)
79
80   Fix syncsafe byte reading.  (Pierre-Yves Thoulon, et al)
81
82   Some Unicode fixes.  (Ilya Konstantinov)
83
84   More changes for Unicode.  Unicode::String no longer used; Encode is used
85   instead.  Encode::Guess used as last resort.  (Dan Sully)
86
87   Optimizations and other fixes.  (michael, Dan Sully)
88
89   Support for reading ID3v2 tags from WAV and AIFF files.  Not fully
90   supported.  (Dan Sully)
91
92* v1.02, Sunday, March 2, 2003
93
94   Fix broken argument parsing for use_mp3_utf8.  (Ben Gertzfield)
95
96   Document that UTF8 can be access in ":all" export tag.  (Ben Gertzfield)
97
98   Better document for new() method.
99
100   Add can() method.  (Ken Williams)
101
102   Stick failure warnings in $@.  (Jeffrey Friedl)
103
104   Added support for reasonable data from ID3v2 tags with RAW_V2 == 2.
105   (brian d foy and others)
106
107   Deal with broken iTunes comment frames in ID3v2.3.0/2.4.0.  (Many users)
108
109   remove_mp3tag() was reporting 128 bytes removed even if no bytes were
110   removed.  (scfc_de)
111
112   Allow calling methods on objects where tag does not exist (e.g., don't fail
113   if there is no comment but you call $mp3->comment).
114
115   Various bugfixes.
116
117
118* v1.01, Friday, February 26, 2002
119
120   That was less reasonable than previously thought.  Just strip off text
121   encoding bit, and then bytes for language and "up to first null" if COMM
122   field (COMM fields can have an extra comment about the comment, which is
123   terminated with a NULL, of course ...). Some encoders like to put in an
124   extra NULL at the end; plus, it was doing the wrong thing for
125   non-Latin-1 text.  (Ben Gertzfield)
126
127   Also make it work better with ID3v2.2 tags, and make a more reasonable
128   guess at which comment to use if there's more than one.
129
130   Add some support for ID3v2.4.0 and Unicode strings in tags; see
131   use_mp3_utf8.  (Ben Gertzfield)
132
133   Add TAGVERSION to get_mp3tag result.
134
135
136* v1.00, Tuesday, January 22, 2002
137
138   Get more reasonable data out of ID3v2 tags by stripping up to
139   last null in tag.
140
141   Don't get FRAME_LENGTH if no FRAMES (Woodrow Hill).
142
143
144* v0.91, Saturday, February 10, 2001
145
146   Fix dumb bug with /o.  (David Reuteler)
147
148   Fix bug where get_mp3tag() would return an empty hashref instead of
149   undef if ID3v1 tag is asked for, and there is no ID3v1 tag, but there is
150   an ID3v2 tag.  (Stuart)
151
152
153* v0.90, Sunday, January 14, 2001
154
155   Added experimental OOP support for getting and setting data;
156   doesn't work for removing tags.
157
158   Made all functions optionally accept filehandle in place of filename.
159
160   Remove all croaks/dies and replace with simple returns or carps/warns.
161   (Jeffrey Sumler)
162
163   Fix various input data problems, bad warnings, division by zero, etc.
164
165   Undef $/ in set_mp3tag() so caller can't mess up the print.
166
167   Fix bitrate if ID == 0 and VBR.  (Kyle Farrell, Per Bolmstedt)
168
169   Split off _get_info() from get_mp3info(), so, eventually, programmers
170   can access that functionality without passing in a file or filehandle.
171   Not supported yet, but available for playing.
172
173   Added total frames, leftover milliseconds, and formatted time.
174
175   Fixed sample frequency for MPEG 2.5 files (perhaps not including
176   VBR, though ... see bug above).
177
178   Add in some additional genres.  (Peter Marschall)
179
180   Added ID3v2 tag removal.  (Ronan Waide)  NOTE: this is DANGEROUS.  It is
181   tested, but needs more testing.  The file is rewritten entirely.  Lots
182   of data moving around.
183
184   Added ID3v2.2.0 tag reading.  (Ronan Waide, Kee Hinckley)
185
186   Changed ID3v2 tag recognition to only match [A-Z0-9] instead of \w.
187   (Christoph Oberauer)
188
189
190* v0.80, Monday, March 6, 2000
191
192   Better stripping of bad data (after nulls) in ID3 tags (Dave O'Neill)
193
194   Fixed VERSION in get_mp3info to properly return 2 when appropriate.
195   (Bogdan Surdu)
196
197   Added VBR support.  Average bitrate is returned as BITRATE, and
198   minutes and seconds (MM and SS) should be accurate.
199   (Andy Waite for pointer to MP3Ext)
200
201   Made time calculation better overall.
202
203   Made MP3 header validation routines more comprehensive.
204   (Matthew Sachs for pointer to xmms source)
205
206   Changed name to MP3::Info (with wrapper still named MP3::Info).
207
208
209* v0.71, Thursday, July 8, 1999
210
211   Several fixes to ID3v2 support unpack unsigned instead
212   of signed, don't bail out after 4096-byte offsets on long ID3v2 headers.
213   Thanks much to Matthew Sachs.
214
215
216* v0.70, Saturday, July 3, 1999
217
218   Added preliminary ID3v2 reading support in get_mp3tag().  Thanks much
219   to Tom Brown.
220
221
222* v0.64, Thursday, July 1, 1999
223
224   Found bug in checking TRACKNUM parameter, used \d instead of \d+.
225   Only gives spurious warnings, doesn't affect anything else.
226
227   Cleaned up a bit, prepare for impending ID3v2 support.
228
229   NOTE: truncate() broken in some builds of ActivePerl (517, maybe
230   others).  No changes to module to fix problem.  (Brian Goodwin)
231
232
233* v0.63, Friday, April 30, 1999
234
235   Added ID3v1.1 support.  (Trond Michelsen, Pass F. B. Travis)
236
237   Added 255 (\xFF) as default genre.  (Andrew Phillips)
238
239   I think I fixed bug relating to spaces in ID3v2 headers.  (Tom Brown)
240
241
242* v0.62, Sunday, March 7, 1999
243
244   Doc updates.
245
246   Fix small unnoticable bug where ID3v2 offset is tag size plus 10,
247   not just tag size.
248
249   Not publickly released.
250
251
252* v0.61, Monday, March 1, 1999
253
254   Fixed problem of not removing nulls on return from get_mp3tag() (was
255   using spaces for padding before ... now trailing whitespace and
256   all nulls are removed before returning tag info).
257
258   Made tests more extensive (more for my own sanity when making all
259   these changes than to make sure it works on other platforms and
260   machines :).
261
262
263* v0.60, Sunday, February 28, 1999
264
265   Cleaned up a lot of stuff, added more comments, made get_mp3info()
266   much faster and much more reliable, and added recognition of ID3v2
267   headers.  (Tom Brown)
268
269
270
271* v0.52, Sunday, February 21, 1999
272
273   Fixed problem in get_mp3tag() that changed value of $_ in caller
274   (Todd Hanneken).
275
276
277* v0.51, Saturday, February 20, 1999
278
279   Fixed problem with %winamp_genres having the wrong numbers
280   (Matthew Sachs).
281
282
283* v0.50, Friday, February 19, 1999
284
285   Added remove_mp3tag().  Added VERSION to the hash returned by
286   get_mp3info(), and fixed a bug where STEREO was not being set
287   correctly.
288
289   Export all genre data structures on request.  Added use_winamp_genres()
290   to use WinAmp genres.  (Roland Steinbach)
291
292   Added a $MPEG::MP3Info::try_harder ($MP3::Info::try_harder)
293   variable that will try harder to find the MP3 header in a file.  False
294   by default. Can take a long time to fail, but should find most headers
295   at any offsets if set to true.
296
297   Thanks to Matthew Sachs for his input and fixes, and for mp3tools.
298
299
300* v0.20, Saturday, October 17, 1998
301
302   Changed name from MPEG::MP3Tag to MPEG::MP3Info, because it does
303   more than just TAG stuff now.
304
305   Made header stuff even more reliable.  Lots of help and testing from
306   Meng Weng Wong again.  :-)
307
308
309* v0.13, Thursday, October 8, 1998
310
311   Had some problems with header verification, got some code from Predrag
312   Supurovic with his mpgtools. Great stuff.  Also did some looping to find
313   a header if it is not in the "right" place.  I did what I think it is a
314   smart way to do it, since some files have the header as far down as 2
315   kbytes into the file.  First, I look at position 0, then at position 36
316   (a position where I have found many headers), then I start at 0 again
317   and jump in 128-byte chunks. Once I do that a bunch of times, I go back
318   at the beginning and try at 0 and go ahead in 1-byte chunks for a bunch
319   more times.
320
321   If you have an MP3 that has the header begin at an odd place like byte
322   761, then I suggest you strip out the junk before the header begins. :-)
323
324
325* v0.12, Friday, October 2, 1998
326
327   Added get_mp3info().  Thanks again to mp3tool source from
328   Johann Lindvall, because I basically stole it straight (after
329   converting it from C to Perl, of course).
330
331   I did everything I could to find the header info, but if
332   anyone has valid MP3 files that are not recognized, or has suggestions
333   for improvement of the algorithms, let me know.
334
335
336* v0.04, Tuesday, September 29, 1998
337
338   Changed a few things, replaced a regex with an unpack().
339   (Meng Weng Wong)
340
341
342* v0.03, Tuesday, September 8, 1998
343
344   First public release.
345