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