| [ Index ] |
PHP Cross Reference of Drupal 6 (yi-drupal) |
[Summary view] [Print] [Text view]
1 ///////////////////////////////////////////////////////////////// 2 /// getID3() by James Heinrich <info@getid3.org> // 3 // available at http://getid3.sourceforge.net // 4 // or http://www.getid3.org // 5 ///////////////////////////////////////////////////////////////// 6 // // 7 // changelog.txt - part of getID3() // 8 // See readme.txt for more details // 9 // /// 10 ///////////////////////////////////////////////////////////////// 11 12 » denotes a major feature addition/change 13 € denotes a change in the returned structure 14 ! denotes a cry for help from developers 15 * Bugfix: denotes a fixed bug 16 17 Version History 18 =============== 19 20 1.7.9: [2009-03-08] James Heinrich 21 » Added DSS (Digital Speech Standard) support 22 new file: module.audio.dss.php 23 (thanks luke*wilkinsØdtsam*com) 24 » Added MPC (Musepack) SV8 support 25 (thanks WaldoMonster) 26 € some MPC [header] keys renamed to be the same between SV7/SV8 27 € start aligning demos CSS styling with v2.x styles 28 new file: demos/getid3.css 29 € JPEG now returns parsed IPTC tags in [iptc] 30 € getid3_lib::GetDataImageSize now requires $imageinfo parameter 31 € better support for Matroska files with AC3/DTS/MP3/OGG audio 32 (support still lacking for AAC) 33 € standardize ID3v2 TCMP key to 'part_of_a_set' between reading 34 and writing (thanks aaron_stormØyahoo*com) 35 € added ID3v2 keys 'TCMP','TCP' to for writing iTunes-style tags 36 (thanks aaron_stormØyahoo*com) 37 € back-ported PICTURE tag handling in FLAC tags 38 (thanks WaldoMonster) 39 € added alternate method to get [video][frame_rate] from QuickTime 40 * added partial support for "TCMP"/"TCP" ID3v2 frames (iTunes 41 non-standard part-of-a-compilation tag) 42 (thanks aaron_stormØyahoo*com) 43 * slightly improved scanning through FLV files speed 44 (thanks franki) 45 * faster Matroska scanning by stopping at cluster chunks once 46 needed header chunks are found (much faster for large files) 47 * added workaround for broken tagging programs that miss terminating 48 null byte for numeric ID3v2.4 genres 49 (thanks yam655Øgmail*com) 50 * Bugfix: MultiByteCharString2HTML() did not escape common HTML 51 special characters like & and ? 52 * Bugfix: cleaned up some malformed HTML errors in demo.browse.php 53 * Bugfix: under Windows files >2GB might not be processed due to 54 "dir" command not finding file with double directory slashes 55 * Bugfix: "MODule (assorted sub-formats)" was falsely matching 56 some random files (e.g. JPEGs) (thanks qwertywin) 57 * Bugfix: suppress PHP_notice on failed SWF-compressed 58 decompression failure (thanks mkron) 59 60 61 1.7.8b3: [2008-07-13] James Heinrich 62 » Experimental partial support for files > 2GB (gets filesize 63 from shell call to "dir" or "ls", parse files with PHP only 64 up to 2GB limit). See readme.txt for details on what formats 65 work properly and other limitations 66 » Initial support for Matroska. Has only been tested with a 67 limited number of sample files, please report any bugs 68 » Experimental support for PHP-RAR reading. Known buggy, disabled 69 by default, enable with care 70 € getid3_lib::CastAsInt() now returns ints up to 2^31 (not 2^30) 71 € Quicktime: [video] now returns [frame_rate] and [fourcc] for MP4 72 video files 73 * MP3: headerless VBR files now only have up to 10 blocks of 5000 74 frames each scanned by default and bitrate extrapolated from that 75 distribution for speed (thanks glau*stuffØridiculousprods*com) 76 * Quicktime: support "co64" atom 77 * SWF: lower memory use when compressed SWF files processed 78 (thanks doughammondØblueyonder*co*uk) 79 * Bugfix: FLV height and width was calculated incorrectly 80 (thanks moysevichØgmail*com) 81 * Bugfix: FLV GETID3_FLV_TAG_META parsed incorrectly 82 (thanks moysevichØgmail*com) 83 * Bugfix: Quicktime: 'tkhd' matrix_v and matrix_d were switched 84 (thanks rjjmoroØhotmail*com) 85 * Bugfix: Quicktime: frame_rate was often incorrect for MP4 video 86 * Bugfix: getid3_lib::CastAsInt returned -2147483648 when passed 87 2147483648 (0x80000000) 88 89 90 1.7.8b2: [2007-10-15] James Heinrich, Allan Hansen 91 * Video bitrate now calculated even if not explicitly stated in 92 file metadata, but if overall and audio bitrates are known 93 * Bugfix: 'comments_html' missing last letter in id3v2 tags. 94 * Bugfix: module objects (e.g. getid3_riff) that are instantiated 95 in other modules are explicitly disposed once no longer needed. 96 * Bugfix: some AVI files were not returning audio information 97 because "strh" chunk was not being read in 98 * Bugfix: asf [audio][<streamnumber>][dataformat] should be set 99 to "wma" but wasn't 100 * Bugfix: [mpeg][audio][bitrate_mode] should always be one of 101 ("cbr", "vbr", "abr") but wasn't for some values in 102 LAMEvbrMethodLookup() 103 * Bugfix: MP3 audio in AVI files could show "cbr" instead of 104 correct audio bitrate_mode, and audio bitrate could be slightly 105 incorrect if multiple files were scanned in a loop (scanning 106 single files produced correct values). 107 * Bugfix: remove [audio/video][bitrate] key if falsely set to zero 108 * Bugfix: PlaytimeString returned non-matching value for negative 109 playtimes (which shouldn't happen either, but now they're at 110 least shown correctly, if they happen due to other bugs) 111 * Bugfix: Several ASF header values are invalid if the broadcast 112 flag is set, getID3() now calculates these values in other 113 ways if the broadcast flag is set (thanks fletchØpobox*com) 114 * Bugfix: lyrics3-flags-lyrics field was always false, and there 115 never was a lyrics3-flags-timestamp field present even though 116 the lyrics3-raw-IND field consisted of "10" (lyrics present, 117 timestamp not present). (thanks i*f*schulzØweb*de) 118 * Bugfix: TAR.GZ files produce PHP errors when 119 option_gzip_parse_contents == true in module.archive.gzip.php 120 (thanks alan*harderØsun*com) 121 122 123 1.7.8b1: [2007-01-08] Allan Hansen 124 » Major update to readme.txt 125 » PHP 4.2.0 required 126 » Tagwriter requires metaflac 1.1.1+ in order to write FLAC tags. 127 » Removed broken and non-fixable tagwriting module for real format. 128 ! Developers please help fix the above module: 129 http://www.getid3.org/phpBB2/viewtopic.php?t=677 130 » Avoided security issues with demo.browse.php, demo.write.php and 131 demo.mysql.php. These demos are now disabled by default and has 132 to be enabled in the source. 133 * Bugfix: id3v2 genre broken since 1.7.7. 134 » Added DTS module (module.audio.dts.php) 135 € ASF/WMV files now return largest video stream dimensions in 136 [video][resolution_x] and [video][resolution_y] 137 * Bugfix: Minor issues with midi module (avoid PHP_NOTICE). 138 * Bugfix: Minor issues with lyrics3 (avoid PHP_NOTICE). 139 * Bugfix: PHP_NOTICE issues in MultiByteCharString2HTML() 140 * Bugfix: PHP_NOTICE issue in BigEndian2Float() 141 * Bugfix: fread() zero bytes issue in real module. 142 * Bugfix: ASF module returned mime type video/x-ms-wma instead of 143 video/x-ms-wmv for certain FourCCs. 144 * Bugfix: PHP_NOTICE issues with broken ID3v2 tag/garbage. 145 * Bugfix: PNG module broken in regards to gIFg and gIFx chunks. 146 » Removed detection of short filenames 8dot3 under windows, as 147 it only worked for English versions of windows and has other 148 problems. 149 * Bugfix: Some CBR MP3 files detected as VBR with plenty of warnings. 150 * Bugfix: PHP_NOTICE issues in MP3 module. 151 * Bugfix: Quicktime returned incorrect frame rate. 152 * Bugfix: DivByZero on zero length FLV files. 153 * Bugfix: PHP_NOTICE one some FLV files. 154 * Bugfix: ID3v2 UTF-8/16 encoded frames terminated by \x00 155 * Bugfix: ID3v2 LINK frames iconv error. 156 * Bugfix: ID3v2 padding length calculated incorrectly. 157 * Bugfix: ID3v2.3 extended headers non-conformance 158 » SVG file detection. 159 » Added SVG user module (user_modules/module.graphic.svg.php). 160 Thanks to Roan Horning. 161 » PAR2 file detection (no parsing) 162 * Bugfix: Wave files being detected as MP3. 163 * Bugfix: ASF padding offset bug. 164 * Bugfix: Shorten module not working for wav files with fmt 165 chunks <> 16 bytes. 166 € RIFF: Zero sized chunk invokes warning instead of error. 167 € FLAC: Removed some ['raw'] keys. 168 € MPC: Mime type returned: audio/x-musepack 169 170 1.7.7: [2006-06-25] Allan Hansen 171 * Bugfix: AAC static bitrate cache wrong result when parsing 172 several files. 173 * Bugfix: Do not return NULL video bitrate for ASF v3. 174 * Bugfix: getid3_lib::GetImageSize() broken => JPG module broken. 175 * Bugfix: Encoder options should now be returned with correct 176 "--alt-preset n" / "--alt-preset cbr n" when scanning more files. 177 * Bugfix: Shorten module not escapeshellarg() filenames (UNIX only). 178 * Bugfix: Filenames not escapeshellarg() for md5_data and 179 sha1_data (UNIX only). 180 * Bugfix: UNIX: head and tail called with -cNNN instead of "-c NNN". 181 » Added detection support for PDF and MS Office documents 182 (*.doc, *.xls, *.pps, etc) (thanks zeromassmediaØgmail*com) 183 € Bugfix: ID3v2 "TDRC" frame now used as "year" in comments if TYER 184 unavailable (TYER is deprecated in ID3v2.4) 185 (thanks matthiasØpanczyk*org) 186 € Removed GETID3_OS_DIRSLASH, replaced with DIRECTORY_SEPARATOR 187 * Bugfix: added LAME preset guessing for presets 410,420,440,490 188 (thanks adminØlogbud*com) 189 * Bugfix: Added escapeshellarg() call in getid3_lib::hash_data 190 (thanks towbØgmx*net) 191 » TAR module no longer reads entire file into memory 192 » FLV module no longer reads entire file into memory 193 * Bugfix: added LAME preset guessing for presets 410,420,440,490 194 (thanks adminØlogbud*com) 195 * Bugfix: Added escapeshellarg() call in getid3_lib::hash_data 196 (thanks towbØgmx*net) 197 * Bugfix: Error message when padding in FLAC files were used up. 198 * Bugfix: Shorten module not working under windows. 199 € Bugfix: gmmktime() instead of mktime(). 200 € Using gmmktime() instead of mktime() in ISO, ZIP, PNG and RIFF 201 modules to avoid E_STRICT notices with PHP5.1+. 202 * Bugfix: ['comments_html'] and ['comments'] contains different 203 value when having multiple tags (one of them ID3v1) and the 204 long field names. 205 206 1.7.6: [2006-03-12] James Heinrich 207 * Rewrote getid3_lib::GetDataImageSize() to use GetImageSize() 208 instead of using code by filØrezox*com 209 * Bugfix: incorrect dimensions from disabled Quicktime tracks 210 (thanks m-1Øgmx*net) 211 * Bugfix: ['codec'] key warning in module.audio-video.asf.php 212 (thanks niel*archerØblueyonder*co*uk) 213 * Bugfix: undefined array in write.php 214 (thanks drewishØkatherinehouse*com) 215 * Bugfix: DeleteAPEtag() incorrectly failing when no tag present 216 (thanks drewishØkatherinehouse*com) 217 * Bugfix: ID3v2 writing frames with URL fields failing when URL 218 is not in ISO-8859-1 (thanks drewishØkatherinehouse*com) 219 * Bugfix: PHP notices on bad ID3v2 frames 220 (thanks cw264701Øohiou*edu) 221 * Bugfix: audio & video bitrates sometimes wrong in ASF files 222 (thanks kris_kauperØexcite*com) 223 224 1.7.5: [2005-12-29] James Heinrich 225 » Added FLV (FLash Video) support -- new file: 226 module.audio-video.flv.php 227 (thanks Seth Kaufman <seth@whirl-i-gig.com> for code) 228 » Real tags can now be written (previous Real tag writing 229 code was not supposed to be in public releases, as it 230 was not complete) 231 » GETID3_HELPERAPPSDIR now autodetected under Windows 232 € ASF lyrics now returned under [comments][lyrics] 233 * Bugfix: removed "--lowpass xxxxx" info from guessed 234 LAME presets when source frequency <= 32kHz 235 * Bugfix: ID3v2 extended header errors 236 * Bugfix: missing ob_end_clean() in write.id3v2.php 237 (thanks rasherØgmail*com) 238 239 1.7.4: [2005-05-04] James Heinrich 240 € Added ['quicktime']['hinting'] key (boolean) 241 (thanks jonØwebignition*net) 242 * Bugfix: major UTF-8 to UTF-16/ISO-8859-1 conversion 243 bug (empty string returned) when using iconv_fallback 244 (thanks chrisØfmgp*com) 245 * Bugfix: Missing 'lossless' key in RIFF-WAV 246 (thanks bobbfwedØcomcast*net) 247 248 1.7.3: [2005-04-22] James Heinrich 249 » Added TAR support -- new file: module.archive.tar.php 250 (thanks Mike Mozolin <teddybearØmail*ru> for code!) 251 » Added GZIP support -- new file: module.archive.gzip.php 252 (thanks Mike Mozolin <teddybearØmail*ru> for code!) 253 * Bugfix: demo.browse.php now displays embedded images 254 internally instead of passing local filename as IMG 255 SRC (should allow demo.browse.php to correctly show 256 embedded images over a network) 257 (thanks patpowermanØhotmail*com) 258 * Bugfix: minor UTF-8 display issues in demo.browse.php 259 * Bugfix: demo.browse.php now works even if the evil 260 setting magic_quotes_gpc is turned on 261 (thanks patpowermanØhotmail*com) 262 * Bugfix: incorrect MIDI playtime for some files 263 (thanks joelØoneporpoise*com) 264 * Bugfix: 'url_source' typo in module.tag.id3v2.php 265 (thanks richardlynchØusers*sourceforge*net) 266 * Bugfix: Quicktime 'mvhd' matrix values were wrong 267 (thanks webØbobbymac*net) 268 € ID3v2 now returns xx/yy for ['track'] (if 269 available), with xx in ['tracknum'] and yy in 270 ['totaltracks']. Previously ['tracknum'] was not 271 available and ['track'] had only xx. 272 Bugfixes and improvements to /demo/demo.mysql.php: 273 - remix/version parsed from tags and stored in 274 database, can be used when renaming files 275 - track number can be used for renaming files 276 277 278 1.7.2: [2004-10-18] Allan Hansen 279 » Added support for WavPack v4.0+ 280 (thanks ahØartemis*dk) 281 » Removed code for parsing EXE files 282 (thanks ahØartemis*dk) 283 Removed file: module.misc.exe.php 284 * Bugfix: Large ID3v2 tags inside ASF not parsed 285 properly under PHP5. 286 * Bugfix: Certain Wavpack3 files failed under PHP5 due 287 to new undocumented tmpfile() limit (same problem as 288 above). 289 * Bugfix: New iTunes crashes PHP - temp fix - no tags 290 on those files. 291 * Bugfix: ['nsv']['NSVs']['framerate_index'] might be 292 wrong (thanks ahØartemis*dk) 293 * Bugfix: transparent color was wrong from truecolor 294 PNG (thanks ahØartemis*dk) 295 * Bugfix: Changed MPC SV7 header size from 30 to 28, 296 this will change hash values for MPC files 297 (thanks ahØartemis*dk) 298 * Bugfix: Changed MPC SV4-6 header size from 28 to 8, 299 this will change hash values for MPC files 300 (thanks ahØartemis*dk) 301 € Trim/unset wavpack encoder_options to match 2.0.0b2 302 output. 303 € Commented-out unknown/unused values in NSV and ISO 304 modules (thanks ahØartemis*dk) 305 306 307 1.7.1b1: [July-26-2004] James Heinrich 308 » Added support for Apple Lossless Audio Codec 309 » Added support for RealAudio Lossless 310 » Added support for TTA v3 311 » Added support for TIFF 312 New file: /getid3/module.graphic.tiff.php 313 » Modified iconv_fallback to work with UTF-8, UTF-16, UTF-16LE, 314 UTF-16BE and ISO-8859-1 even if iconv() and/or XML support is 315 not available. This means that iconv() is no longer required 316 for most users of getID3() 317 (thanks Jeremia, khleeØbitpass*com) 318 » Added support for Monkey's Audio v3.98+ (thanks ahØartemis*dk) 319 » Included new demo showing most-basic getID3() usage 320 New file: /demos/demo.basic.php 321 * Bugfix: LAME3.94+ presets cached incorrectly if multiple files 322 are scanned in one batch and first file is LAME3.93 or earlier 323 (thanks enoyandØyahoo*com) 324 * Bugfix: Added warning if compressed ID3v2 frame decompression 325 fails. (thanks Mike Billings) 326 * Bugfix: Assorted small fixes to ensure compatability with PHP5 327 * Bugfix: ID3v1 genre "Blues" could not be written 328 (thanks Jeremia) 329 * Bugfix: ['bitrate_mode'] typo in module.audio-video.real.php 330 (thanks asukakenjiØusers*sourceforge*net) 331 * Bugfix: ['zip']['files'] is now populated with filenames even 332 if End Of Central Directory couldn't be parsed 333 * Bugfix: ['audio']['lossless'] was incorrect for FLAC 334 (thanks WaldoMonster) 335 * Bugfix: MD5 File was incorrect in directory browse mode for 336 /demo/getid3.browse.php 337 * Bugfix: PHP v5 compatability changes (float array keys, fread() 338 calls with zero data length) 339 (thanks getid3Øjsc*pp*ru) 340 * Bugfix: was dying if on compressed ID3v2 frames if 341 gzuncompress() function was unavailable 342 * Bugfix: ['vqf']['COMM'] was always empty 343 * Bugfix: MIDI playtime was missing for single-track MIDI files 344 * Bugfix: removed � characters from ['comments_html'] 345 (thanks p*quaedackersØplanet*nl) 346 * Bugfix: improved MIDI playtime accuracy 347 (thanks joelØoneporpoise*com) 348 * Bugfix: BMP subtypes 4 and 5 were not being identified 349 * Bugfix: frame_rate in AVI was incorrectly truncated to integer 350 * Bugfix: FLAC cuesheet track index was incorrect 351 (thanks tetsuo*yokozukaØoperamail*com) 352 € ['quicktime']['display_scale'] now contains the playback scale 353 multiplier for QuickTime movies - a movie set to playback at 354 double-size will have "2" here. Other values are "1" and "0.5" 355 € Added LAME preset guessing for --preset medium with v3.90.3 356 (thanks phwipØfish*co*uk) 357 € Added $encoding_id3v1 to allow for ID3v1 encodings other than 358 the standard ISO-8859-1 359 € Default AVI video bitrate_mode is now 'vbr' 360 (thanks eltoderØpisem*net) 361 Force getID3() to abort if Shorten files have ID3 or APE tags 362 (thanks ahØartemis*dk) 363 Editable textbox for parent directory in demo.browse.php 364 (thanks eltoderØpisem*net) 365 366 367 1.7.0-hotfix [2004-03-17] Allan Hansen 368 (hotfix version released by Allan Hansen) 369 * Bugfix: PHP 4.1.x compatiblity - fgets($fp) => fgets($fp, 1024) 370 * Bugfix: Added default charset to TextEncodingNameLookup() in 371 module.tag.id3v2.php 372 Ø Removed option_no_iconv 373 iconv() support is only a requirement for WMA/WMW/ASF, and for 374 destination encodings other than ISO-8859-1 and UTF-8, iconv is 375 not needed otherwise. New 'iconv_req' in GetFileFormatArray() 376 only set for WMA/WMV/ASF. analyze() now refuses to analyse 377 WMA/ASF file if iconv is not present. 378 iconv_fallback() only dies on internal errors not missing iconv() 379 380 381 1.7.0: [January-19-2004] James Heinrich 382 » Added support for RIFF/CDXA files (MPEG video in RIFF container 383 format (thanks chrisØdigitekdesign*com) 384 » Added support for TTA v2 (thanks ahØartemis*dk) 385 € ID3v2 unsynchronisation scheme disabled by default because most 386 tag-reading programs cannot read unsynchronised tags. Can be 387 overridden by setting id3v2_use_unsynchronisation to true. 388 (thanks mikeØdelusion*org) 389 € extention.*.php renamed to extension.*.php 390 (thanks tp62Øcornell*edu) 391 € /demo/demo.check.php renamed to /demo/demo.browse.php 392 € Added id3v2_paddedlength configuration parameter to WriteTags() 393 and renamed tag_language to id3v2_tag_language 394 € MPEG audio layers are now represented as 1, 2 or 3 instead of 395 'I', 'II', or 'III' 396 € Added [audio][wformattag] and [video][fourcc] for WAV and AVI 397 € Added [audio][streams] which contains one entry for each audio 398 stream present in the file (usually only one). The data is a 399 copy of what is usually found in [audio]. If there are multiple 400 audio streams then [audio] will contain a sum of the bitrates 401 of all audio streams, and the data format of the first stream 402 (if streams are of different data types) 403 € Added BruteForce mode to mp3 scanning. Disabled by default as 404 it is extremely slow and only files that are broken enough to 405 not really play will gain any benefit from this. 406 € Suppress '--resample xxxxx' appended to encoder options for mp3 407 with low-quality presets for default sampling frequencies 408 € Enhanced LAME preset guessing for pre-3.93 with a better lookup 409 table, --resample/--lowpass guessing (thanks phwipØfish*co*uk) 410 € RIFF files with non-MP3 contents no longer have 411 [audio][encoder_options] set 412 € Added [audio][encoder_options] to audio formats where possible 413 (including LiteWave, LPAC, OptimFROG, TTA) 414 € Moved [quantization] and [max_prediction_order] from 415 [lpac][flags] to just [lpac] 416 € WavPack flags are now parsed into [wavpack][flags] 417 * Bugfix: APEtags with ReplayGain information stored with comma- 418 seperated decimal values (ie "0,95" instead of "0.95") were 419 giving wrong peak and gain values 420 * Bugfix: Filesize > 2GB not always detected correctly 421 * Bugfix: Some ID3v2 frames had data key unset incorrectly 422 (thanks chrisØdigitekdesign*com) 423 * Bugfix: Warnings on empty-strings-only comments 424 * Bugfix: ID3v2 tag writing may have had incorrect padding length 425 if padded length less than current ID3v2 tag length and 426 merge_existing_data is false (thanks mikeØdelusion*org) 427 * Bugfix: hash_data() for SHA1 was broken under Windows 428 * Bugfix: BigEndian2Float()/LittleEndian2Float() were broken 429 * Bugfix: LAME header calculated track peaks were incorrect for 430 LAME3.94a15 and earlier 431 * Bugfix: AVIs with VBR MP3 audio data reported incorrect bitrate 432 and bitrate_mode 433 * Bugfix: AVIs sometimes had incorrect or missing video and total 434 bitrates 435 * Bugifx: AVIs sometimes had incorrect ['avdataend'] and 436 therefore also incorrect data hashes (md5_data, sha1_data) 437 * Bugfix: ID3v1 genreid no longer returned for Unknown genre 438 * Bugfix: ID3v1 SCMPX genres were broken 439 Modified LAME header parsing to correctly process peak track 440 value for LAME3.94a16+ (thanks Gabriel) 441 md5_file() and sha1_file() now work under Windows in PHP < 4.2.0 442 and 4.3.0 respectively with helper apps 443 Default md5_data() tempfile location is now system temp directory 444 instead of same directory as file (thanks towbØtiscali*de) 445 Improved list of RIFF ['INFO'] comment key translations 446 More helpful error message when GETID3_HELPERAPPSDIR has spaces 447 /demo/demo.browse.php now autogets both MD5 and SHA1 hashes for 448 files < 50MB 449 Replaced PHP_OS comparisons with GETID3_OS_ISWINDOWS define 450 (thanks necroticØusers*sourceforge*net) 451 452 453 1.7.0b5: [December-29-2003] James Heinrich 454 » Windows only: Various binary files are now required for some 455 file formats, especially for tag writing, as well as md5sum 456 (and other) calculations. These binaries are now stored in the 457 directory defined as GETID3_HELPERAPPSDIR in getid3.php 458 (default is /helperapps/ parallel to /getid3/). 459 Note: This directory must not have any spaces in the pathname. 460 All neccesary files are available as a seperate download. 461 See /helperapps/readme.txt for more information 462 New file: /helperapps/readme.txt 463 » Unified tag-writing interface for all tag formats 464 New file: /getid3/write.php 465 /getid3/write.apetag.php 466 /getid3/write.id3v1.php 467 /getid3/write.id3v2.php 468 /getid3/write.lyrics3.php 469 /getid3/write.metaflac.php 470 /getid3/write.vorbiscomment.php 471 » Added support for Shorten - requires shorten binary (head.exe 472 is also required under Windows). 473 New file: /getid3/module.audio.shorten.php 474 » Added support for RKAU 475 New file: /getid3/module.audio.rkau.php 476 » Added (minimal) support for SZIP 477 New file: /getid3/module.archive.szip.php 478 » Added MySQL caching extention (thanks ahØartemis*dk) 479 New file: /getid3/extention.cache.mysql.php 480 » Added DBM caching extention (thanks ahØartemis*dk) 481 New file: /getid3/extention.cache.dbm.php 482 » Added sha1_data hash option (thanks ahØartemis*dk) 483 » Added option to allow getID3() to skip ID3v2 without parsing it 484 for faster scanning when ID3v2 data is not required. If you 485 want to enable this feature delete /getid3/module.tag.id3v2.php 486 (thanks ahØartemis*dk) 487 € 8-bit WAV data now calculates MD5 checksums as normal, not 488 converting to signed data as before, so stored md5_data_source 489 in FLAC files will no longer match md5_data for the equivalent 490 decoded 8-bit WAV. A warning will be generated for 8-bit FLAC 491 files 492 € Added option_no_iconv option to allow getID3() to work 493 partially without iconv() support enabled in PHP 494 (thanks ahØartemis*dk) 495 € All '*_ascii' keys removed for ASF/WMA/WMV files 496 € All 'ascii*' keys removed for ID3v2 tags 497 € Ogg filetypes now return MIME of "application/ogg" instead of 498 the previous "application/x-ogg" 499 (thanks blakewattersØusers*sourceforge*net) 500 € Force contents of ['id3v2']['comments'] to UTF-8 format from 501 whatever encoding each frame may have (text encoding can vary 502 from frame to frame in ID3v2) 503 € MP3Gain information from APE tags suppressed from ['tags'] and 504 parsed into ['replay_gain'] 505 € ReplayGain information (all formats) changed from "Radio" and 506 "Audiophile" to "Track" and "Album" respectively 507 € ['volume'] and ['max_noclip_gain'] are now available in both 508 ['replay_gain']['track'] and ['replay_gain']['album'] for all 509 formats that calculate ReplayGain. 510 € ['video']['total_frames'] is available for AVIs 511 € All parsed ID3v2 frame data is now in ['id3v2'][XXXX][#] 512 (previously some frame types would have numeric array keys if 513 multiple instances of that frame type were allowed and other 514 frame types would not) 515 € ASF/WMA "WM/Picture" images are now parsed in the same manner 516 as ID3v2 with the image (ex JPEG) data returned in [data] 517 rather than [value] 518 * Bugfix: Optional tag processing options were being ignored (ie 519 ID3v1 still processed even if option_tag_id3v1 == false) 520 (thanks ahØartemis*dk) 521 * Bugfix: fixed MultiByteCharString2HTML() for UTF-8 522 * Bugfix: Quicktime files not always reporting video frame_rate 523 * Bugfix: False ID3v1 synch patterns in APE or Lyrics3 tags are 524 now detected and incorrect ID3v1 data not returned 525 (thanks sebastian_maresØusers*sourceforge*net for the idea) 526 * Bugfix: WMA9 Lossless now reported as lossless 527 * Bugfix: two typos in ID3v1 genre list 528 * Bugfix: MPEG-2/2.5 ABR/VBR MP3 files had doubled playtime 529 * Bugfix: MPEG-2/2.5 LayerII (ie MP2: 24/22.05/16kHz) files were 530 not detected due to incorrect frame length calculation 531 * Bugfix: MPEG LayerI files were not detected due to incorrect 532 frame length calculation (must be multiple of slot length) 533 Added alternative md5_data via system call - twice as fast. Needs 534 "getID3()-WindowsSupport" to work under Windows. 535 (thanks ahØartemis*dk) 536 ID3v2.4 compressed frames are now supported 537 php_uname() calls changed to use PHP_OS constant 538 Added SCMPX extensions to ID3v1 genres (0xF0-0xFE) 539 Obfuscated contributor email address in changelog and sourcecode 540 Added memory-saving EmbeddedLookup() function for lookup tables 541 in RIFF and ID3v2 modules (thanks ahØartemis*dk) 542 Major memory patches to many modules by using 543 $var = &$INFO_ARRAY_AT_SOME_INDEX 544 in place of large multi-dimensional array declarations. 545 Memory saved: RIFF: ~200kB; ID3v2: ~475kB; ASF: ~50kB etc. 546 (thanks ahØartemis*dk) 547 548 549 1.7.0b4: [November-19-2003] James Heinrich 550 » Support added for MPC files with old SV4-SV6 structure 551 » RealVideo now properly supported with resolution, framerate, etc 552 (thanks jcsston) 553 » RealAudio files with old-style file format (v2-v4) are now 554 fully supported 555 » Support added for DolbyDigital WAV files (thanks ahØartemis*dk) 556 € ['RIFF'] is now ['riff'] to conform to make all root key names 557 lowercase 558 € ['OFR'] is now ['ofr'] to conform to make all root key names 559 lowercase 560 € ['tags_html'] is now available as a copy of ['tags'] but 561 with all text replaced with an HTML version of all characters 562 above chr(127), translated according to whatever the encoding 563 of the source tag is, in the HTML form Ӓ 564 € CopyTagsToComments() is now available in getid3_lib 565 € QuicktimeVR files now return a ['video']['dataformat'] of 566 'quicktimevr' instead of 'quicktime' (thanks gtsØtsu*biz) 567 € Quicktime video files with DivX, Xvid, 3ivx or MPEG4 video 568 streams now return those names as ['video']['dataformat'] 569 € MPEG video files are now identified with ['video']['codec'] set 570 to either 'MPEG-1' or 'MPEG-2' (rather than just 'MPEG'). If you 571 see a file wrongly identified, please report it! 572 (thanks fccHandler) 573 € All bitrate values in ['mpeg']['audio'] is now reported in bps 574 rather than kbps (ie 128000 instead of 128) for consistancy 575 € AVIs with MP2 audio now report ['audio']['dataformat'] as 'mp2' 576 rather than 'wav' (thanks metalbrainØnetian*com) 577 € Added ['md5_data_source'] for OptimFROG 578 € AC3 in RIFF-WAV now identified with ['audio']['dataformat'] 579 returning 'ac3' 580 € WavPack ['extra_bc'] now returned as integer 581 € WavPack ['extras'] now returned as 3-element array of integers 582 € MP3 ['audio']['encoder options'] now returns 'VBR' or 'CBR' only 583 (no bitrate) if no LAME preset is used, or 'VBR q??' where ?? is 584 a number 0-100 for Fraunhofer-encoded VBR MP3s 585 * Bugfix: VBR MP3s could have incorrect bitrate reported 586 * Bugfix: Quicktime files with MP4 audio were not returning 587 ['video']['dataformat'] (thanks robØmassive-interactive*nl) 588 * Bugfix: strpad vs str_pad typo in module.riff.php 589 (thanks nicojunØusers*sourceforge*net) 590 * Bugfix: ReplayGain information was often wrong for MPC files 591 * Bugfix: MD5 and other post-TAIL chunks were not being processed 592 in module.audio.optimfrog.php 593 * Bugfix: Undefined variable in table_var_dump() in demo/check.php 594 * Bugfix: QuickTime files now only return information in [audio] 595 or [video] if those exist in the file 596 * Bugfix: WavPack no longer tries to read entire compressed data 597 chunk 598 * Bugfix: Properly handle VBR MP3s with "Info" (rather than 599 "Xing") header frame. foobar2000 adds this to MP3 files when 600 "Fix MP3 Header" function is used (thanks ahØartemis*dk) 601 * Bugfix: Fraunhofer VBRI headers for MP3s were assuming 2-byte 602 entries for TOC rather than using stride, and were ignoring the 603 scaling value. (thanks sebastianØmaresweb*net) 604 Several QuickTime atoms have been added to an exclusion list 605 because they have been observed, but I have no idea what they 606 are supposed to do so I can't add real support for them, but 607 they should not generate warnings (robØmassive-interactive*nl) 608 Old MPC encoder (before v1.06) was return as v0.00, now returned 609 as 'Buschmann v1.7.0-v1.7.9 or Klemm v0.90-v1.05' 610 (thanks ahØartemis*dk) 611 Added check for magic_quotes_runtime and code to disable it if 612 neccesary (thanks stefan*kischkelØt-online*de) 613 Added 3ivx fourCCs to module.audio-video.quicktime.php 614 MP3 and AC3 streams are now parsed when contained inside RIFF-WAV 615 or RIFF-AVI container formats 616 Better detection of named presets in LAME 3.93/3.94 617 618 619 1.7.0b3: [October-17-2003] James Heinrich 620 » AC-3 (aka Dolby Digital) is now supported. 621 New file: /getid3/module.audio.ac3.php 622 * Bugfix: ID3v2-writing function Unsynchronise() was broken, which 623 made ID3v2 tag containing binary data (typically pictures) get 624 corrupted. (thanks t*coombesØbendigo*vic*gov*au, 625 i*kuehlbornØndh*net, mikeØdelusion*org, mikeØftl*com) 626 * Bugfix: Zip comments now returned as array instead of string, 627 as they're supposed to be. 628 * Bugfix: Quicktime/MP4 files may have reported extremely low 629 bitrates (thanks spunkØdasspunk*com) 630 Improved double-ID3v1 check to prevent false detection when string 631 "TAG" is present in APE or Lyrics3 632 Fixed /demo/simple.php 633 Fixed /demo/joinmp3.php 634 Fixed /demo/mimeonly.php 635 Fixed /demo/write.php 636 637 638 1.7.0b2: [October-15-2003] James Heinrich 639 » TTA Lossless Audio Compressor format now supported. 640 (http://tta.iszf.irk.ru) 641 New file: /getid3/module.graphic.tta.php 642 » PhotoCD (PCD) format now supported. Image data for the three 643 lowest resolutions (192x128, 384x256, 768x512) can be optionally 644 extracted. 645 New file: /getid3/module.graphic.pcd.php 646 € RIFF-MP3 files now should return the same ['md5_data'] as the 647 identical MP3 file outside the RIFF container 648 € Name of LAME preset used (if available, needs LAME v3.90+) 649 returned in ['mpeg']['audio']['LAME']['preset_used'] and also as 650 part of ['audio']['encoder_options'] 651 € VQF module now sets ['audio']['encoder_options'] to i.e. CBR96 652 € MP3 module now sets ['audio']['encoder_options'] on CBR files 653 and all LAME-encoded files 654 € MPC module now sets ['audio']['encoder_options'] 655 € Monkey module now sets ['audio']['encoder_options'] 656 € AAC module now sets ['audio']['encoder_options'] to profile name 657 € ASF module now sets ['audio']['encoder_options'] 658 € Ogg module adds ['audio']['encoder_options'] -b 128 on 659 Ogg Vorbis 1.0+ ABR files 660 € Ogg module adds ['audio']['encoder_options'] -q N on 661 Ogg Vorbis 1.0+ VBR files 44k/48k sample rate/stereo files only. 662 € Ogg module ['audio']['encoder_options'] "Nominal birate: 80k" to 663 other Ogg Vorbis files. 664 € ID3v2 track number now returned as string (with leading zeros, 665 if present in data) rather than integer (thanks Plamen) 666 € ASF module returns ['asf']['comments']['encoding_time_unix'] if 667 available (from WM/EncodingTime) 668 € Fixed /demo/mysql.php and added some new features: 669 - encoder options 670 - ID3v2 "Encoded By" 671 - non-empty comments 672 - total entries in database summary (totals & averages) 673 - database version update 674 * Bugfix: 'UNICODE' iconv() charset changed to 'UTF-16LE' or 675 'UTF-16BE' as appropriate 676 * Bugfix: iconv_fallback() function created in case iconv() fails 677 * Bugfix: fixed MD5 calls in demo/check.php 678 * Bugfix: reenabled detection of APE + Lyrics3 tags in same file 679 * Bugfix: ASF module now returns ID3v1 genre as string instead of 680 number - patch from Eugene Toder. 681 * Bugfix: ASF module now reads non-standard field names, 682 i.e. "date" as well as WM/Year - patch from Eugene Toder. 683 * Bugfix: ASF module now returns genre as-is if it is not a 684 standard ID3v1 genre (thanks wonderboy) 685 * Bugfix: Eliminated false-synch problem in MP3 module 686 * Bugfix: Fixed missing root ['bitrate'] for most formats 687 * Bugfix: ['audio']['compression_ration'] missing for MPC 688 (thanks WaldoMonster) 689 * Bugfix: NSV module died in 1.7.0b1 690 * Bugfix: ASF module died in 1.7.0b1 when WM/Picture preset 691 * Bugfix: ASF tracknumber incorrect when specified by WM/Track 692 rather than WM/TrackNumber (thanks jgriffiniiiØhotmail*com) 693 * Bugfix: MPEG audio+video playtime should now be pretty accurate 694 (ie within 0.1% variation at most) 695 (thanks mgrimmØhealthtvchannel*org) 696 * Bugfix: ID3v2 not being copied to ['tags'] in some cases 697 * Bugfix: LAME CBR files with Info tag were being incorrectly 698 flagged as VBR (thanks Jojo) 699 * Bugfix: LAME tag not being detected for LAME 3.90 (original) 700 Changed regex pattern match for MP3 to include 3rd byte for more 701 reliable/accurate pattern matching 702 Added duplicate-ID3v1 tag checking (two ID3v1 tags, one after the 703 other) that has been known to occur with iTunes 704 (thanks towbØtiscali*de) 705 Added instructions for enabling iconv() support under Windows 706 Removed some unneccesary debugging code 707 Suppressed duplicate PHP warnings for missing include files 708 Included some missing dependencies in various files 709 /demo/audioinfo.class.php now copies ['audio']['encoder_options'] 710 711 712 1.7.0b1: [2003-09-28] Allan Hansen 713 This beta version was not made by James Heinrich. It was made by 714 Allan Hansen <ahØartemis*dk> - please send bug reports on this 715 beta directly to me. 716 717 James Heinrich will release 1.7.0 final, but it may take some time 718 to work out the bugs from the major rewrite. 719 720 This version could be called getID3lite. It makes a lot of checks 721 optional and makes it easy to remove support for undesired formats 722 723 It also is more library-like. Older versions of getID3() declared 724 an incredible amount of global scope functions and defined several 725 constants. 1.7.0beta1 still declares constants, but they are all 726 prepended by GETID3_. It declares no global scope functions - they 727 are all wrapped into classes. 728 729 » Made getID3() depend on iconv library: compile PHP --with-iconv 730 » Created new directory structure 731 Moved all demos to demos/ 732 Moved all getID3() files to getid3/ 733 Renamed most files to module.something 734 Changed header in all module.something to explain what they do 735 Simply remove all modules you don't need 736 Wrapped all modules into classes 737 * Bugfix: Implemented misc patches from Eugene Toder 738 * Bugfix: Implemented misc patches from "six" 739 € Added root key 'encoding' 740 € Added prefix GETID3_ to all defined constants. 741 € Wrapped getid3.php into getid3 class 742 € Wrapped getid3.functions.php into getid3_lib class 743 Removed unused functions 744 Moved several functions away from getid3.functions.php and 745 into the files where they are actually used. 746 Renamed getid3.functions.php to getid3.lib.php 747 Moved getid3.rgad.php functions into getid3_lib 748 Moved getid3.getimagesize.php funcitons ingo getid3_lib 749 € Moved getid3.ogginfo.php into ogg module 750 € Combined GetTagOnly() and GetAllFileInfo() in method analyze 751 € Removed redundant and unuseful root keys 752 'file_modified_time' == filemtime($filename) 753 'md5_file' == md5_file($filename) 754 'exist' == file_exists($filename) 755 € Changed root key ['tags'] from array of string to array of array 756 of comments. 757 Simplified code for detecting base path. 758 Removed ob_ from InitializeFilepointerArray(). That was really a 759 ugly HACK to get output from fopen. If user want the reason, 760 he should open the file himself! 761 Checking for APE tags before lyrics3 - makes Lyrics3 not depend 762 on APE tag. It seems to work on my test file. 763 Changed ['error'] and ['warning'] in multiple files to append to 764 array instead of appending to string. That simplified code in 765 getid3.php too. 766 Simplified clean-up procedure: simply remove all empty root keys 767 Setting tags in individual modules instead of main getid3.php 768 Made Bonk and ASF modules non-dependent on id3 modules - id3 769 optional. 770 Rewrote HandleAllTags() - simplified and convert comments to 771 desired encoding. 772 Replaced all calls to RoughTranslateUnicodeToASCII() in ASF module 773 with a TrimConvert() method. This uses iconv() for conversion. 774 It also converts from UNICODE instead of UTF-16BE, as the spec 775 says it should. 776 Replaced all calls to RoughTranslateUnicodeToASCII() in id3v2 777 module with iconv(). id3v2 module also reads 778 $ThisFileInfo['encoding'] and converts all comments to this 779 format. All other formats just add their comments in their 780 native charset, but every comment field in id3v2 can have a 781 different encoding, so this is needed. 782 Did same thing as above with ISO module. However - it does not 783 work. I need to find out how to specify big-endian unicode != 784 UNICODING encoding name given to iconv(). 785 Built-in assume mp3 format in getid3.php 786 Temporarily nuked root key ['comments'] and CopyCommentsToRoot() 787 Updated demo/audioinfo.class.php 788 Updated demo/check.php - some thing don't work! 789 Other demos are out of order! 790 791 792 1.6.5: [October-06-2003] James Heinrich 793 » Added support for LiteWave (thanks supportØclearjump*com) 794 Ø Split out speedup info from ['OFR']['OFR']['compression'] into 795 ['OFR']['OFR']['speedup'] 796 Ø If EXIF functions for JPEG not available, now warning not error 797 Ø ID3v2 track number now returned as string (with leading zeros, 798 if present in data) rather than integer (thanks Plamen) 799 * Bugfix: now correctly parses cbSize element of WAVEFORMATEX 800 structure (thanks supportØclearjump*com) 801 * Bugfix: ASF module now reads non-standard field names, 802 i.e. "date" as well as WM/Year - patch from Eugene Toder. 803 * Bugfix: ASF module now returns genre as-is if it is not a 804 standard ID3v1 genre (thanks wonderboy) 805 * Bugfix: ['audio']['compression_ration'] missing for MPC 806 (thanks WaldoMonster) 807 Prevent infinite loop in MP3 histogram if framelength == 0 808 Added wFormatTag values 0x00FF and 0x2001 - 0x2005 809 (thanks steveØheadbands*com) 810 Added "twos" and "sowt" FourCCs for Mac AIFC 811 812 813 1.6.4: [June-30-2003] James Heinrich 814 » Added support for free-format MP3s 815 (thanks Sebastian Mares for the idea) 816 » Compressed (Flash 6+) SWF files are now handled properly 817 (thanks alan*cheungØalumni*ust*hk) 818 » Added DeleteLyrics3() to getid3.lyrics3.php 819 » Added FixID3v1Padding() to getid3.putid3.php 820 » Added new simple MP3-splicing sample file 821 (thanks tommybobØmailandnews*com for the idea) 822 New file: getid3.demo.joinmp3.php 823 » Moved all contents of getid3.putid3.php into either 824 getid3.id3v1.php or getid3.id3v2.php or getid3.functions.php as 825 appropriate 826 Removed file: getid3.putid3.php 827 € ['error'] and ['warning'] keys now return as arrays, not strings 828 € New root key for all files: ['file_modified_time'] (UNIX time) 829 € getid3.demo.scandir.php renamed to getid3.demo.mysql.php 830 € New demo file returns the MIME type only for a single file 831 (thanks adminØe-tones*co*uk for the idea) 832 New file: getid3.demo.mimeonly.php 833 € Added check for valid ID3v1 padding (strings should be padded 834 with null characters but some taggers incorrectly use spaces). 835 A warning will be generated if padding is invalid. New boolean 836 key ['id3v1']['padding_valid'] indicates padding validity. 837 € CleanUpGetAllMP3info() removes more useless root keys for 838 unknown-format files 839 € Extended LAME information in ['mpeg']['audio']['LAME'] is now 840 only returned for LAME v3.90+ 841 € LAME-encoded MP3s now return 842 ['mpeg']['audio']['LAME']['long_version'] as well as 843 ['mpeg']['audio']['LAME']['short_version'] - these are identical 844 in LAME v3.90+ but older versions will report longer more 845 detailed version information if available 846 € New Lyrics3 values: ['lyrics3']['raw']['offset_start'] and 847 ['lyrics3']['raw']['offset_end'] 848 € New optional parameter on getAPEtagFilepointer() to scan from a 849 defined offset rather than end-of-file to allow scanning of APE 850 tags before Lyrics3 tags 851 € ['tag_offset_start'] and ['tag_offset_end'] are now present in 852 ['ape'], ['lyrics3'], ['id3v1'] and ['id3v2'] 853 € Numerous changes to the returned structure and content for La 854 files, including parsing the seektable (if applicable) and 855 parsing RIFF data occuring after the end of the compressed audio 856 data (notably RIFF comments) 857 (thanks mikeØbevin*de) 858 € getSWFHeaderFilepointer() now has optional 3rd parameter 859 $ReturnAllTagData (default == false) which if set to true will 860 return data on all tags in ['swf']['tags'] 861 € ['swf']['bgcolor'] now returns the 6-character string 862 representing the background color in HTML hex color format 863 (thanks ubergeekØubergeek*tv) 864 € ['swf']['header']['frame_delay'] is no longer returned 865 € getQuicktimeHeaderFilepointer() now has two additional optional 866 parameters: $ReturnAtomData (default == true) and 867 $ParseAllPossibleAtoms (default == false). Setting 868 $ReturnAtomData to false will reduce the size of the returned 869 data array by unsetting ['quicktime']['moov'] before returning. 870 Leaving $ParseAllPossibleAtoms as false now suppresses parsing 871 of several atom types that contain very large tables of data 872 that are not typically useful. Atom type suppressed are: 873 stts, stss, stsc, stsz, and stco 874 (thanks ubergeekØubergeek*tv) 875 € ['fileformat'] no longer set to 'id3' if ID3v1 or ID3v2 tag 876 detected but no other data format recognized 877 * Bugfix: La files now return the correct values for 878 ['avdataoffset'] and ['avdataend'] and therefore the correct 879 values for ['md5_data'] - note that ['md5_data'] values will not 880 match values from previous versions of getID3() - the previous 881 versions were incorrect 882 (thanks mikeØbevin*de) 883 * Bugfix: A temporary file was being created in the web server's 884 root directory (not DocumentRoot) each time ['md5_data'] was 885 calculated, and not removed due to lack of permissions. Temp 886 file is now created (as it was supposed to be) in the directory 887 of the file being examined, or the system temp directory, and 888 properly removed when done. 889 * Bugfix: Several incorrect values were being returned inside 890 ['mpeg']['audio']['LAME'] (thanks bouvigneØmp3-tech*org) 891 * Bugfix: SWF frame rates values were usually incorrect. 892 (thanks alan.cheungØalumni*ust*hk and ubergeekØubergeek*tv) 893 * Bugfix: ID3v2.2 files always flagged 4 bytes of invalid padding 894 (thanks marcaØmac*com) 895 * Bugfix: Lyrics3 without ID3v1 was not working properly 896 * Bugfix: Lyrics3, APE & ID3v1 can all now exist in the same file. 897 A warning is issued if APE comes after Lyrics3 (because Lyrics3- 898 aware taggers probably are not APE-aware and therefore won't be 899 able to find the Lyrics3 tag) (thanks mp3gainØhotmail*com) 900 * Bugfix: WriteAPEtag() now writes the APE tag before any Lyrics3 901 tags (if present) and removes any incorrect ones that are after 902 existing Lyrics3 tags (thanks mp3gainØhotmail*com) 903 * Bugfix: RIFF-WAVE file with incorrect NumberOfSamples values in 904 the 'fact' chunk no longer cause incorrect playtime calculation 905 (thanks stprasadØindusnetworks*com) 906 * Bugfix: getid3.demo.simple.php had undefined variables if the 907 file needed to be deep-scanned with assumeFormat 908 * Bugfix: fixed previously-incorrect ['avdataend'] values for APE 909 and Lyrics3 tags in some cases, which in some cases means that 910 ['md5_data'] is different than previously (now correct) 911 Much-improved detection of AAC-ADTS, which also means MP3 912 format detection should now be nearly twice as fast 913 Truncated AVIs and WAVs are now reported 914 Number of new features and bugfixes in getid3.demo.mysql.php 915 Quicktime 'meta' atoms now parsed, so Quicktime MP4 files can now 916 return artist, title, album, etc (thanks spunkØdasspunk*com) 917 Consolidated all comments processing functions (processing the 918 ['comments'] and ['tags'] keys) into HandleAllTags() which now 919 also checks to ensure that APE tags are really better than ID3v2 920 before using them in ['comments'] 921 Known issue with Meracl ID3 Tag Writer v1.3.4 truncating last byte 922 of MP3 file when appending new ID3v1 tag now specifically noted 923 (rather than generic Probably Truncated File message) 924 getid3.demo.mysql.php now stores last-modified time for each file 925 getid3.demo.mysql.php is now case-sensitive for filenames 926 getid3.demo.mysql.php can generate M3U playlists of any of the 927 groups of files it can select (duplicate filenames, tag types, 928 etc.) 929 getid3.demo.mysql.php can now find mismatched tag contents and 930 filenames 931 getid3.demo.check.php now shows total number of errors & warnings 932 GetFileFormatArray() now matches actual patterns for MP3 files 933 based on the first two bytes of the file, rather than just the 934 first one 935 Simplified DeleteAPEtag() and made it work properly with Lyrics3 936 937 938 1.6.3: [May-17-2003] James Heinrich 939 » Added support for Bonk (thanks ahØartemis*dk) 940 New file: getid3.bonk.php 941 » Added support for AVR (thanks ahØartemis*dk) 942 New file: getid3.avr.php 943 € Contents of getid3.id3.php moved to getid3.id3v1.php 944 Removed file: getid3.id3.php 945 € Contents of getid3.frames.php moved to getid3.id3v2.php 946 Removed file: getid3.frames.php 947 € Returned data structure documentation improved and updated and 948 now stored in getid3.structure.txt rather than getid3.readme.txt 949 New file: getid3.structure.txt 950 € Now including the GNU General Public License in the distribution 951 as getid3.license.txt 952 New file: getid3.license.txt 953 € Added new, optional, parameter to WriteAPEtag() (and also 954 GenerateAPEtag()) which must be set to TRUE if the values you 955 are passing are already UTF8-encoded, otherwise all data is 956 encoded to UTF8 by default. For all ASCII/ANSI data this value 957 should be left at the defaul value of FALSE. 958 € Added third, optional, parameter to getID3v2Filepointer() - 959 $StartingOffset (default == 0) which can parse an ID3v2 tag 960 in a file at a position other than the start-of-file. 961 € ['video']['pixel_aspect_ratio'] now returned when known 962 € AVI files with WMA audio now return ['audio']['dataformat'] 963 of 'wma' rather than 'wav' 964 € ASF-WMA files now return the artist value from WM/AlbumArtist 965 in ['comments']['artist'] (thanks msibbaldØsaebauld*com) 966 € ASF-WMA files now return the 'author' value from 967 ['asf']['content_description'] in ['comments']['artist'] 968 instead of ['comments']['author'] 969 € ASF-WMA files now return the 'description' value from 970 ['asf']['content_description'] in ['comments']['comment'] 971 instead of ['comments']['description'] 972 * Bugfix: APE tag writing with multiple values for a tag (more 973 than one ARTIST for example) was not being correctly written 974 (thanks ahØartemis*dk) 975 * Bugfix: CreateDeepArray() was returning an empty-string key as 976 the top-level returned value - ['iso']['files'] now directly 977 contains the file listing without an empty array in between. 978 * Bugfix: ID3v2 genreid was not being returned in some cases. 979 * Bugfix: APEv1 tags would generate error messages 980 * Bugfix: APE tags would sometimes show phantom second entry for 981 each item (title, artist, etc) with no data 982 * Bugfix: APE tag writing was not UTF8-encoding the data - 983 non-ASCII characters (above chr(127)) were being incorrectly 984 stored (thanks ahØartemis*dk) 985 * Bugfix: getid3.demo.scandir.php had undefined function error 986 * Bugfix: getid3.demo.scandir.php would not display list of files 987 with no tags 988 Added link to getid3.demo.check.php from list of specific-tags 989 files in getid3.demo.scandir.php 990 991 992 1.6.2: [May-04-2003] James Heinrich 993 » New official mirror site for getID3() - http://www.getid3.org 994 » Added basic support for SWF (Flash) (thanks n8n8Øyahoo*com) 995 New file: getid3.swf.php 996 » Added experimental support for parsing the audio portion of 997 MPEG-video files. I don't have any actual documentation for 998 this, so this part is experimental and not guaranteed accurate, 999 but it seems to be working OK as far as I have been able to test 1000 it. Bug reports (or even better - documentation!) are welcome at 1001 info@getid3.org 1002 » Added new simple directory-scanning sample file 1003 New file: getid3.demo.simple.php 1004 » getid3.demo.write.php now writes APE tags as well. 1005 € Renamed getid3.write.php to getid3.demo.write.php 1006 € Renamed audioinfo.class.php to getid3.demo.audioinfo.class.php 1007 € getid3.php now automatically includes the getid3.functions.php 1008 function library file, no need to include it seperately. 1009 € getLyrics3Filepointer() has been changed to be consistant with 1010 all the other similar function structures - the parameters have 1011 changed. The old function has been renamed to getLyrics3Data() 1012 € Added DeleteAPEtag() function to getid3.ape.php 1013 € HandleID3v1Tag() now only handles ID3v1. Lyrics3 processing is 1014 now done by HandleLyrics3Tag() 1015 € If BitrateHistogram is enabled in getOnlyMPEGaudioInfo() it now 1016 also returns ['mpeg']['audio']['version_distribution'] showing 1017 the number of frames of each MPEG version (1, 2 or 2.5) - all 1018 frames *should* be of the same MPEG version 1019 € getID3v1Filepointer() always returns TRUE now, even if it didn't 1020 find a valid ID3v1 tag 1021 € getOnlyMPEGaudioInfo() now looks for MPEG sync in the first 128k 1022 bytes rather than the first 64k bytes 1023 € Added dummy function GetAllMP3info() to generate warning not to 1024 use that deprecated function. 1025 € ['video']['codec'] is now 'MPEG' for all MPEG video files (this 1026 will change to 'MPEG-1' or 'MPEG-2' as soon as I figure out how 1027 to determine that) (thanks jigalØspill*nl) 1028 € ['mpeg']['audio']['LAME']['mp3_gain'] renamed to 1029 ['mpeg']['audio']['LAME']['mp3_gain_db'] (gain in dB) 1030 € Added ['mpeg']['audio']['LAME']['mp3_gain_factor'] (gain as a 1031 multiplication factor) 1032 € Added support for Preset and Surround Info bytes from LAME VBR 1033 tag (http://gabriel.mp3-tech.org/mp3infotag.html) 1034 * Bugfix: APE tag writing would put the string 'Array' for all 1035 values rather than the actual data (thanks ahØartemis*dk) 1036 * Bugfix: Warning now generated for VBR MPEG-video files because 1037 getID3() cannot determine average bitrate. If you know of 1038 documentation that would tell me how to do this, please email 1039 info@getid3.org 1040 * Bugfix: Replay Gain values from Vorbis comments are now 1041 returned in ['replay_gain'] (and not in ['comments']) 1042 (thanks ahØartemis*dk) 1043 * Bugfix: Replay Gain values from APE comments are now correctly 1044 returned in ['replay_gain'] (thanks ahØartemis*dk) 1045 * Bugfix: getid3.demo.check.php is now case-insensitive when 1046 assuming a format for a corrupted file if standard detection 1047 does not identify the file type. 1048 * Bugfix: RIFF comments were overwriting/suppressing ID3 comments 1049 for RIFF-MP3 files (thanks wmØwofuer*com) 1050 * Bugfix: RIFF-MP3 files with 'RMP3' chunks instead of 'WAVE' were 1051 not being correctly identified. 1052 * Bugfix: ID3v2 padding shorter than the length of an ID3v2 frame 1053 header was not correctly detected 1054 * Bugfix: getid3.demo.check.php now does in-depth scanning for MP2 1055 and MP1 files the same as for MP3 files based on file extension 1056 if a MPEG-audio structure isn't found immediately at the start 1057 of the file 1058 * Bugfix: removed condition where RIFF-WAV was being scanned for 1059 MPEG-audio signature when it shouldn't be present (non-MP3 WAV) 1060 * Bugfix: ASF files were not always showing correct audio datatype 1061 * Bugfix: array_merge_clobber() and array_merge_noclobber() were 1062 not being conditionally defined in getid3.functions.php 1063 (thanks rich.martinØreden-anders*com) 1064 * Bugfix: stream_numbers was not being correctly returned in 1065 bitrate_mutual_exclusion_object chunks of ASF files 1066 * Bugfix: Added support for 24kHz and 12kHz audio in ASF files 1067 * Bugfix: Removed possible undefined offset error in MP3s where 1068 cannot find synch before end of file 1069 * Bugfix: Removed potential out-of-memory crash situation when 1070 parsing Real files with chunks larger than the available memory 1071 (thanks jigalØspill*nl) 1072 * Bugfix: ID3v1 was incorrectly taking precedence over ID3v2 in 1073 the ['comments'] array (thanks lionelflØwanadoo*fr) 1074 * Bugfix: No longer calculates overall bitrate and playtime for 1075 VBR MPEG video files based on the audio bitrate. 1076 * Bugfix: AssumeFormat was not working properly 1077 Added summary footer line to getid3.demo.check.php 1078 Added '.mpeg' to the list of assume-format-from-filenames list in 1079 getid3.demo.check.php 1080 MPEG-video files now more reliably detected 1081 A number of additional features have been added to 1082 getid3.demo.scandir.php 1083 Added many RIFF-AVI audio types and fourcc video types to the 1084 lookup functions in getid3.riff.php 1085 Now identifes files with Lyrics3 v1 tags that are of incorrect 1086 length (v1 Lyrics3 is supposed to be 5100 bytes long, but 1087 [unknown program] writes variable-length tags (which is illegal 1088 for Lyrics3 v1)). getID3() now correctly parses these tags and 1089 issues a warning. 1090 Split GetFileFormat() to GetFileFormat() and GetFileFormatArray() 1091 HTML colors in getid3.demo.check.php are now defined as constant 1092 variables at the top of the file (if you want to change them) 1093 Added support for OptimFROG v4.50x (non-alpha) (new header fields) 1094 (thanks floringhidoØyahoo*com) 1095 Added support for Lossless Audio v0.4 (thanks mikeØbevin*de) 1096 1097 1098 1.6.1: [March-03-2003] James Heinrich 1099 » Added support for writing APE v2. 1100 WriteAPEtag() in getid3.ape.php 1101 NOTE: APE v1 writing support will *not* be added to future 1102 versions of getID3() 1103 (thanks ahØartemis*dk and adamØphysco*com for the idea) 1104 » Added support for AIFF (Audio Interchange File Format) including 1105 AIFF, AIFC and 8SVX (thanks ahØartemis*dk for the idea) 1106 Removed file: getid3.aiff.php 1107 » Added support for OptimFROG (v4.50a and v4.2x) 1108 (thanks ahØartemis*dk for the idea) 1109 New file: getid3.optimfrog.php 1110 » Added support for WavPack (thanks ahØartemis*dk for the idea) 1111 » Added support for LPAC (thanks ahØartemis*dk for the idea) 1112 » Added support for NeXT/Sun .au format 1113 New file: getid3.au.php 1114 » Added support for Creative SoundBlaster VOC format 1115 New file: getid3.voc.php 1116 » Added support for the BWF (Broadcast Wave File) RIFF chunks 1117 "bext" and "MEXT" (thanks Ryan and njhØsurgeradio*co*uk) 1118 » Added support for the CART (Broadcast Wave File) RIFF chunks 1119 (thanks Ryan) 1120 » Added getid3.demo.scandir.php - a sample recursive scanning demo 1121 that scans every file in a given directory, and all sub- 1122 directories, and stores the resulting data in MySQL database, 1123 and then displays a list of duplicate files based on md5_data 1124 € ['md5_data_source'] now contains the MD5 value for the original 1125 uncompressed data for formats that store that information 1126 (currently only FLAC v0.5+). ['md5_data'] (if chosen to be 1127 calculated) will contain the calculated MD5 value for the 1128 compressed file. To check if 2 files are identical in every way, 1129 including all comments: compare ['md5_file']. To check if two 1130 files were compressed from the same source file: compare 1131 ['md5_data_source']. To check if the compressed audio/video data 1132 of two files is identical, even if comments or even the 1133 container file format is different (MP3 in RIFF container, 1134 FLAC in Ogg container, etc): compare ['md5_data']. 1135 € ['md5_data'] for 8-bit WAV files is now calculated based on a 1136 converted version of the data from unsigned to signed (MSB 1137 inverted) to match the MD5 value calculated by FLAC 1138 € New optional parameter added to GetAllFileInfo() - 1139 $MD5dataIfMD5SourceKnown (default: false). If false the md5_data 1140 value will NOT be calculated for files (such as FLAC) that have 1141 ['md5_data_source'] set, even if $MD5data == true. 1142 (thanks ahØartemis*dk) 1143 € getid3.check.php renamed to getid3.demo.check.php 1144 € Added GetTagOnly() function to getid3.php - similar to 1145 GetAllFileInfo() except only takes a filename as a parameter and 1146 only returns ID3v2, APE, Lyrics3 and ID3v1 tag information - no 1147 attempt is made to parse the data contents of the file at all. 1148 (thanks Phil for the idea) 1149 € Added ['audio']['lossless'] and ['video']['lossless'] for all 1150 formats (when known). Both are boolean values - true means the 1151 data is lossless-compressed, false means the data is lossy- 1152 compressed. 1153 € Added ['audio']['compression_ratio'] and/or 1154 ['video']['compression_ratio'] for all formats. Returns a number 1155 (usually) less than 1, where 1 represents no compression and 0.5 1156 represents a compressed file half the size of the original file 1157 € Added ['video']['bits_per_sample'] to all video formats (when 1158 known) 1159 € Added ['video']['frame_rate'] to all video formats (when known) 1160 € ['fileformat'] set to 'mp1' or 'mp2' instead of 'mp3' when 1161 ['audio']['dataformat'] is one of those (thanks ahØartemis*dk) 1162 € Added 4th parameter to md5_data(), $invertsign, which will invert 1163 the MSB of each byte before MD5'ing. This is needed for 8-bit 1164 WAV files because FLAC calculates the stored MD5 value on 1165 signed data rather than the original byte values. ['md5_data'] 1166 of an 8-bit WAV will now match the ['md5_data_source'] value 1167 (thanks lichvarmØphoenix*inf*upol*cz) 1168 € ['ape']['items']['data'] and ['ape']['items']['data_ascii'] now 1169 contains an array of values, if the tag contains UTF-8 text (as 1170 opposed to binary data) 1171 € ['mpeg']['audio']['bitratemode'] renamed to 1172 ['mpeg']['audio']['bitrate_mode'] 1173 * Bugfix: Removed potential bug that could replace all MP3 file 1174 contents with only the new ID3v2 tag in getid3.putid3.php 1175 * Bugfix: md5_data values calculated for RIFF (WAV, AVI) files 1176 were incorrect (thanks ahØartemis*dk) 1177 * Bugfix: MP3 data in an MP4 wrapper fileformat could not identify 1178 bitrate (thanks ahØartemis*dk) 1179 * Bugfix: ['audio'] and/or ['video'] keys would sometimes get 1180 removed even if not empty 1181 * Bugfix: Prevented creation of null entries in 1182 ['RIFF']['WAVE']['INFO'] if a comment entry was not present 1183 * Bugfix: Potential infinite-loop condition in getid3.ogg.php 1184 (thanks afshin.behniaØsbcglobal*net) 1185 * Bugfix: Ogg files with illegal ID3v1 (and/or APE or Lyrics3) 1186 tags were not finding the last Ogg page 1187 (thanks afshin.behniaØsbcglobal*net) 1188 * Bugfix: replay-gain values not properly set from LAME tag 1189 * Bugfix: RIFF-MP3 had incorrect md5_data 1190 * Bugfix: the LAME DLL CBR problem of not re-writing the LAME 1191 frame at the beginning of the data is now detected for MP3s 1192 with ID3v2 tags as well 1193 * Bugfix: APE tags with multiple values (ie multiple entries in 1194 the "artist" tag) are now shown properly in ['ape']['items'] 1195 * Bugfix: fixed condition where APE tag with no ID3v1 tag could be 1196 mistaken for APE tag with ID3v1 (and incorrectly parsed) 1197 * Bugfix: added warning if ID3v2 frame has zero-length data 1198 (thanks cmassetØclubinternet*fr) 1199 * Bugfix: getid3.frames.php looking for non-existant key in USER 1200 frames 1201 Improved detection of RIFF-MP3 data. [unknown program] encodes 1202 RIFF-WAV data with a chunk name of 'RMP3' instead of the 1203 standard 'RIFF' 1204 Encoder now returned in both ['comments'] and ['audio']['encoder'] 1205 for RIFF-WAV files with an INFO.ISFT chunk 1206 Generate a warning for FLAC files encoded with v0.3 or v0.4 1207 because audio_signature is not calculated during encoding 1208 (thanks ahØartemis*dk) 1209 Modified getid3.check.php to display md5_data_source as well as 1210 md5_file and md5_data if display-MD5 mode is selected 1211 Modified getid3.check.php to assume-format based on file extension 1212 in browse mode if fileformat is found to be 'id3' (formerly only 1213 if the fileformat was null) 1214 Changed scaling of BitrateColor() from representing 1-256kbps to 1215 representing 1-768kbps for better display of high-bitrate files, 1216 specifically lossless-compressed CD-audio (FLAC, LA, etc) 1217 1218 1219 1.6.0: [January-30-2003] James Heinrich 1220 » Added support for OggFLAC (FLAC data stored in an Ogg container) 1221 (thanks ahØartemis*dk for the idea) 1222 » Added support for Speex (the data stored in an Ogg container) 1223 » Comments are now available in the root 2-dimensional array 1224 ['comments'] - each entry in this array will contain one or more 1225 strings. For example, if there are two artists then 1226 ['comments']['artist'][0] will contain the first one and 1227 ['comments']['artist'][1] the other. All keys are forced 1228 lowercase. Comments will be stored in the ['comments'] array in 1229 this order of precedence: 1230 1) Native format tags (ASF, VQF, NSV, RIFF, Quicktime, Vorbis) 1231 2) APE tags 1232 3) ID3v2 1233 4) Lyrics3 1234 5) ID3v1 1235 Lower-priority tags will not overwrite or append existing values 1236 of higher-priority tags (for example, 'artist' in ID3v1 will be 1237 ignored if already specified in APE), but missing values will be 1238 filled in (for example, if 'album' is specified in ID3v2 but not 1239 in APE, it will be included in the ['comments'] array). 1240 Note: Root keys (['title'], ['artist'], etc) are NOT available 1241 in this or future versions of getID3(). 1242 (thanks ahØartemis*dk) 1243 » MD5 hashes are now available for all formats for both the entire 1244 file (['md5_file']) and the portion of the file containing only 1245 the audio/video data, stripped of all prepended/appended tags 1246 like ID3v2, ID3v1, APE, etc - ['md5_data'] 1247 (thanks ahØartemis*dk for alternate md5_file() function that 1248 runs on UNIX system running PHP < 4.2.0) 1249 NOTE: Ogg files require the use of vorbiscomment to obtain the 1250 md5_data value. vorbiscomment must be downloaded from 1251 http://www.vorbis.com/download.psp and placed in the getID3() 1252 directory. All Ogg formats (Vorbis, OggFLAC, Speex) are affected 1253 by this problem, but only OggVorbis files can be processed with 1254 vorbiscomment. OggFLAC and Speex files will be processed by 1255 getID3(), but this may result in an incorrect value for md5_data 1256 in the event that VorbisComments are larger than 1 page (4-8kB). 1257 NOTE: md5_data for Ogg will not work if PHP is running in Safe 1258 Mode 1259 » There is now a wrapper class available, written by Allan Hansen, 1260 which should simplify extracting most common basic information 1261 (such as format, bitrate, comments). 1262 New file: audioinfo.class.php 1263 » OggWrite() in getid3.ogginfo.php has been replaced with a new 1264 version that uses vorbiscomment to write the comments, because 1265 of a reported bug that can corrupt OggVorbis files such they 1266 cannot be played. 1267 NOTE: Ogg comment writing now requires the use of vorbiscomment 1268 which must be downloaded from http://www.vorbis.com/download.psp 1269 and placed in the getID3() directory. 1270 NOTE: Ogg comment writing will not work if PHP is running in 1271 Safe Mode 1272 € New root key ['tags'] is now always returned for all formats. 1273 It is an array that may contain any of: 1274 * Native format tags: 'vqf', 'riff', 'vorbiscomment', 'asf', 1275 'nsv', 'real', 'midi', 'zip', 'quicktime' 1276 * Appended data tags: 'ape', 'lyrics3', 'id3v2', 'id3v1' 1277 € New root key ['audio'] is an array containing any or all of: 1278 codec, channels, channelmode, bitrate, bits_per_sample, 1279 dataformat, bitrate_mode, sample_rate, encoder 1280 Note: This replaces several root keys, including: 1281 bitrate_audio, bits_per_sample, frequency, channels 1282 € New root key ['video'] is an array containing any or all of: 1283 bitrate_mode, bitrate, codec, resolution_x, resolution_y, 1284 resolution_y, frame_rate, encoder 1285 Note: This replaces several root keys, including: 1286 bitrate_video, resolution_x, resolution_y, frame_rate 1287 € ['id3']['id3v1'] has moved to ['id3v1'] 1288 € ['id3']['id3v2'] has moved to ['id3v2'] 1289 € ['audiodataoffset'] and ['audiodataend'] have been renamed to 1290 ['avdataoffset'] and ['avdataend'] respectively 1291 € GetAllMP3info() has been changed to GetAllFileInfo() with a 1292 different parameter list ($allowedFormats is no longer a 1293 parameter). Check your code where you're calling 1294 GetAllMP3Info() - you will need to change both the function 1295 name and the parameter list if you pass more than 2 parameters 1296 € All formats now return ['audio']['dataformat'] and/or 1297 ['video']['dataformat'] where appropriate - this goes along with 1298 ['fileformat'] - ['fileformat'] will return the actual structure 1299 of the file, whereas ['dataformat'] will return the format of 1300 the data inside that structure. For example, an Ogg file can 1301 contain Vobis data (normal), or it can contain FLAC data in the 1302 Ogg container format. In that case, ['fileformat'] would be 1303 'ogg', but ['dataformat'] would be 'flac'. 1304 Note: this means that WAV and AVI files now return a 1305 ['fileformat'] of 'riff' rather than 'wav' or 'avi'. 1306 € ['filesize'] is no longer returned for files larger than 2GB 1307 because PHP does not support large file access. Attempting to 1308 parse a file larger than 2GB will result in a message stored in 1309 ['error'] and ['filesize'] not set. 1310 € APEtag, ID3v1, and ID3v2 are now supported on ALL multimedia 1311 files - even if illegal by format. Ogg will return warning if 1312 ID3/APE tags are present. (thanks ahØartemis*dk) 1313 € All files: non-critical errors are now returned in the root key 1314 ['warning'] rather than ['error'] (only critical errors that 1315 prevent getID3() from correctly parsing the file are returned in 1316 ['error'] (thanks ahØartemis*dk) 1317 € Renamed all references to $MP3fileInfo to $ThisFileInfo 1318 € Joliet now supported for ISO-9660. 1319 ['iso']['supplementary_volume_descriptor'] is now returned, if 1320 available, and ['iso']['files'] will contain ASCII equivalents 1321 of the Unicode directory structure & filenames stored. 1322 € Moved Monkey's Audio code from getid3.ape.php to seperate file. 1323 New file: getid3.monkey.php 1324 € Added new keys for ISO-9660: ['name_ascii'] for directories, 1325 ['file_identifier_ascii'] for files 1326 € Added root key ['track'] for CD-audio files 1327 € Ogg/Vorbis-comment files now have comments returned inside 1328 ['ogg']['comments_common'] as an array of strings, rather than 1329 simple strings in ['ogg'] 1330 € Quicktime files now have comments returned inside 1331 ['quicktime']['comments'] as an array of strings, rather than 1332 simple strings in ['quicktime'] 1333 € ['mime_type'] is a new root key returned for all supported 1334 formats (thanks ahØartemis*dk) 1335 € ['fileformat'] now returns 'mp1' instead of 'mp3' for MPEG-1 1336 layer-I audio files (thanks ahØartemis*dk) 1337 € ['mpeg']['audio']['bitratemode'] now returns lowercase 1338 € MPEG-4 audio files which consist of MP3 data wrapped in a 1339 Quicktime fileformat will now return the usual data in 1340 ['mpeg']['audio'] 1341 € Type-1 DV AVIs are now supported 1342 € DV AVIs will return 1 or 2 in ['RIFF']['video'][x]['dv_type'] 1343 € Changed ['fileformat'] from 'mpg' to 'mpeg' for MPEG video files 1344 € ASF comments are now stored in ['asf']['comments'] instead of 1345 ['asf'] 1346 € RealMedia chunk data is now returned inside ['real']['chunks'] 1347 instead of ['real'] 1348 € ['replay_gain'] now properly populated from APE tags 1349 € Added support for ASF_Old_ASF_Index_Object in ASF files 1350 (thanks ahØartemis*dk) 1351 € AAC-ADTS files now return ['aac']['bitrate_distribution'] 1352 € ParseVorbisComments() has been replaced with 1353 ParseVorbisCommentsFilepointer() (with different parameters) 1354 € All references to any key ['frequency'] are now ['sample_rate'] 1355 € Moved ID3v2 comments from ['id3v2'] into common root 1356 ['comments'] structure, and now returns more values than before 1357 * Bugfix: ['iso']['files'] and ['zip']['files'] could potentially 1358 contain duplicate entries (in a numeric-indexed array) for files 1359 if the directory structure specifies files multiple times. 1360 Entries are now guaranteed unique, with the last entry for the 1361 file overwriting any former ones. 1362 * Bugfix: RIFF parsing had numerous issues, including: 1363 - large AVIs would take a very very long time to parse 1364 - chunks with odd (not even) sizes would cause the parser fail 1365 - video and/or audio codecs not always identified 1366 The ParseRIFF() function has been completely rewritten and fixes 1367 all known issues with RIFF parsing. Users are, however, 1368 encouraged to double-check output of any parsed (AVI/WAV/CDDA) 1369 files. 1370 * Bugfix: Modified getid3.riff.php to return correct total 1371 bitrates for AVIs with multiple audio streams 1372 * Bugfix: GetFileFormat() was not creating array structure 1373 correctly (thanks ahØartemis*dk) 1374 * Bugfix: LAME tag for MP3s can only specify up to 255kbps, so any 1375 files with actual CBR bitrate of >=256 were reported incorrectly 1376 * Bugfix: Lyrics3 synched lyrics were not being correctly returned 1377 * Bugfix: CreateDeepArray() was broken for non-nested cases, which 1378 meant ZIP and ISO ['files'] structures were broken 1379 * Bugfix: Incorrect pattern matching for ZIP files meant no zip 1380 files were being detected as such 1381 * Bugfix: AAC-ADIF was returning an incorrect number of channels 1382 (too few) in some cases (thanks ahØartemis*dk) 1383 * Bugfix: Vorbis comments were returning an incorrect value for 1384 ['dataoffset'] in some cases 1385 * Bugfix: MPEG video ['marker_bit'] and ['vbv_buffer_size'] were 1386 incorrect 1387 * Bugfix: ['playtime_string'] could potentially have a value of 1388 x minutes and 60 seconds (ie 3:60 instead of 4:00) 1389 Added support for FLAC cuesheets (FLAC 1.1.0+) 1390 (thanks ahØartemis*dk) 1391 Improved parsing speed in MP3, MP2 and AAC (thanks ahØartemis*dk) 1392 Extra error-checking added to try and identify corrupt files for 1393 most audio formats (thanks ahØartemis*dk) 1394 More accurate playtime calculation for RealMedia 1395 (thanks ahØartemis*dk) 1396 Changed all relevant files to use ['audiodataoffset'] and 1397 ['audiodataend'] rather than ['filesize'] where appropriate 1398 (thanks ahØartemis*dk) 1399 Added text encoding type 255 as a duplicate of UTF-16BE but with 1400 Big-Endian rather than Little-Endian byte order 1401 Added many RIFF-AVI audio types and fourcc video types to the 1402 lookup functions in getid3.riff.php 1403 Added numerous new known GUIDs to getid3.asf.php 1404 Added PoweredBygetID3() function to easily get a "powered by" 1405 string with the current getID3() version. 1406 Added "Morgan Multimedia Motion JPEG2000" (MJ2C), "DivX v5" (DX50) 1407 and "XviD" (XVID) codecs to list of known codecs in 1408 getid3.riff.php 1409 Changed GETID3_INCLUDEPATH path seperators to forced / 1410 (from \ for Windows) 1411 Modified getid3.check.php to only change \ directory seperators to 1412 / on Windows operating systems 1413 Modified getid3.check.php to handle larger-than-2GB files (which 1414 now do not return a filesize) 1415 Modified getid3.check.php to handle ['dataformat_audio'] and 1416 ['dataformat_video'] 1417 Modified getid3.check.php to show a list of present tags in one 1418 column rather than one column for each of ID3v1, ID3v2, etc 1419 Modified getid3.check.php to show MD5 values. Initially disabled 1420 but can be enabled for a directory with a click. md5_file is 1421 always calculated when displaying detailed info about a single 1422 file; md5_data is calculated if the file is < 50MB 1423 Modified getid3.check.php to show errors and warnings. Details are 1424 visible with a mouseover or a click. 1425 Changed getid3.check.php to use SafeStripSlashes instead of a 1426 manual conditional directory name replacement for special 1427 characters 1428 Added sample recursive scanning sample code to getid3.readme.txt 1429 (thanks lipisinØmail*ru for the idea) 1430 1431 1432 1.5.7: [January-10-2003] James Heinrich 1433 » Added support for ISO 9660 (CD-ROM image) format. Most-useful 1434 data is directory structure returned under ['iso']['files'] 1435 Note: Only ISO-9660 supported, not (yet) Joliet extension 1436 (thanks nebula_djØsofthome*net for the idea) 1437 New file: getid3.iso.php 1438 € ZIP files are now parsed by getID3() itself without relying on 1439 built-in PHP functions and/or ZZipLib support. 1440 (thanks Vince for the idea) 1441 € ZIP files now return a simple directory listing with filename 1442 and filesize info only under ['zip']['files']. 1443 Note: empty subdirectories will note appear in here, only files 1444 and non-empty subdirectories. Information for all entries, 1445 including empty subdirectories, is available under 1446 ['zip']['central_directory'] (or under ['zip']['entries'] if the 1447 Central Directory cannot be located (usually due to a trucated 1448 file). 1449 € RIFF-WAV files with MP3 data (or MP3s with RIFF headers, if you 1450 want to think of it that way) now have the MPEG audio portion 1451 scanned and the usual data returned in ['mpeg']['audio'] if the 1452 RIFF audio codec has wFormatTag of "85" (identified by getID3() 1453 as "MPEG Layer 3") 1454 (thanks ahØartemis*dk for the idea) 1455 € EXIF data (if present) is returned for JPEG files under 1456 ['jpg']['exif'] (thanks nebula_djØsofthome*net) 1457 € ['filepath'] now returned for all files with the directory part 1458 of the full filename. 1459 € ['filenamepath'] is now returned for all files (equivalent to 1460 ['filepath'].'/'.['filename']) 1461 * Bugfix: ['id3']['id3v2'][<framename>]['dataoffset'] was wrong 1462 * Bugfix: MP3s tagged with iTunes have an invalid comment field 1463 frame name ('COM ' - should be 'COMM') but the data is valid 1464 otherwise; the frame is now renamed to 'COMM' and parsed 1465 normally (with the error noted in ['error']) 1466 (thanks kheller2Ømac*com for the sample file) 1467 * Bugfix: Some ASF/WMA audio files were not being identified as 1468 any format (thanks ahØartemis*dk) 1469 * Bugfix: Warning now generated and ASCII format assumed for 1470 invalid text encoding values in ID3v2 1471 * Bugfix: Changed ZIP detection pattern from 'PK' to 'PK\x04\x03' 1472 * Bugfix: Ogg/FLAC files with large Vorbis comments were dying in 1473 an infinite loop with lots of error messages due to missing $fd 1474 parameter on ParseVorbisComments() (thanks ahØartemis*dk) 1475 * Bugfix: ['data'] and ['image_mime'] were being returned for all 1476 Ogg comments even if they were not images for versions of PHP 1477 that have image_type_to_mime_type() built in (ie PHP 4.3.0+) 1478 1479 1480 1.5.6: [December-31-2002] James Heinrich 1481 » Added support for NSV (Nullsoft Streaming Video) 1482 (www.nullsoft.com/nsv/) 1483 (thanks demonØsoundplanet*com for the idea) 1484 New file: getid3.nsv.php 1485 » Added support for CD-audio track files (track01.cda etc) 1486 € Added standard ['frame_rate'] root value when known (AVI, NSV, 1487 MPEG-video) 1488 € ASF files now report ['fileformat'] of: 1489 'wmv' when Windows Media Video codec v7/v8/v9 is used; 1490 'wma' when any 'Windows Media Audio' named audio codec is used 1491 and no video stream is present; 1492 'asf' in all other cases (audio-only, video-only, or both) 1493 € Removed support for ZIP functions (will be rewritten to not 1494 require ZZIPlib support in future versions) 1495 € Added function SafeStripSlashes() as a drop-in replacement for 1496 stripslashes(), but that only strips slashes if magic_quotes_gpc 1497 is set 1498 € Removed support for remote file scanning (HTTP / FTP) 1499 € Added ['aac']['frames'] (number of AAC frames in file) 1500 € Added ['mpeg']['audio']['frame_count'] when a bitrate histogram 1501 is created 1502 € Average bitrate for VBR MP3/MP2 is calculated from actual counts 1503 of frames of various bitrates (rather than relying on the header 1504 values or filesize) when a bitrate histogram is created 1505 € RecursiveFrameScanning() split out into seperate function 1506 (getid3.mp3.php) 1507 € Removed old function getMP3header() from getid3.mp3.php 1508 € Changed default MPEG_VALID_CHECK_FRAMES (number of mp3 frames 1509 scanned to ensure a valid audio sequence has been located) from 1510 10 to 25. This means scanning will be slightly slower, but more 1511 reliable/accurate 1512 * Bugfix: ID3v2.2 - valid frame names not correctly detected 1513 (thanks maeckerØweb*de for the sample file) 1514 * Bugfix: ID3v2.2 - valid padding not correctly detected 1515 (thanks maeckerØweb*de for the sample file) 1516 * Bugfix: MIDI files with flat key signatures were not being 1517 correctly reported (thanks alexleeisØshaw*ca for sample file) 1518 * Bugfix: now returns message in ['error'] if file does not exist 1519 * Bugfix: ['RIFF']['video'][x]['codec'] wasn't always being 1520 correctly populated 1521 * Bugfix: ['bitrate'] was incorrect for multi-stream RealMedia 1522 * Bugfix: ['playtime_seconds'] was sometimes null or incorrect 1523 for multi-stream RealMedia 1524 * Bugfix: ChannelTypeID was incorrect in RVA2 ID3v2.4 frames 1525 * Bugfix: Fixed potential divide-by-zero error for corrupt FLAC 1526 files (thanks ahØartemis*dk) 1527 * Bugfix: AAC-ADTS was not returning ['bitrate_mode'] unless 1528 $ReturnExtendedInfo was TRUE (thanks ahØartemis*dk) 1529 * Bugfix: LAME-encoded CBR MP3s now properly identified as CBR 1530 with correct bitrate (thanks ahØartemis*dk) 1531 * Bugfix: VBR MP2 (or headerless MP3) is now identified as VBR 1532 rather than CBR. Note: to obtain VBR bitrate for headerless 1533 files, the entire file is scanned and a histogram distribution 1534 of bitrates is created, and the average bitrate calculated from 1535 that. (thanks ahØartemis*dk for sample file) 1536 Added support for DSIZ chunks in VQF, and checks to make sure size 1537 of audio data matches DSIZ value, if present 1538 (thanks ahØartemis*dk for sample file) 1539 Rewrote GetAllMP3info() - removed some unneccesary code, changed 1540 format-detection routine from ParseAsThisFormat() to 1541 GetFileFormat() to allow for more flexible format parsing 1542 (needed for ISO CD-ROM images, helpful for Quicktime and others) 1543 Changed references in all files from string-cast indexes: ["$i"] 1544 to non-cast indexes: [$i] where appropriate 1545 Put a sans-serif 9pt style on all text in getid3.check.php 1546 getAACADTSheaderFilepointer() now return TRUE if synch is lost 1547 after the first frame has been successfully parsed (previously 1548 it would return FALSE if synch was lost at any time, meaning the 1549 file is most likely MP3, which was incorrect) 1550 (thanks ahØartemis*dk for sample file) 1551 Speed improvement code changes to getid3.mp3.php (up to 24% faster 1552 in some cases) (thanks ahØartemis*dk for the code) 1553 Changed all include_once() to require_once() 1554 1555 1556 1.5.5: [November-25-2002] James Heinrich 1557 » Added support for La (Lossless Audio - www.lossless-audio.com) 1558 (thanks ahØartemis*dk for the idea) 1559 New file: getid3.la.php 1560 € Moved lookup functions from getid3.lookup.php to the files where 1561 they are used. 1562 New file: getid3.id3.php 1563 New file: getid3.rgad.php 1564 Removed file: getid3.lookup.php 1565 € getID3v1Filepointer() returns FALSE if ID3v1 tag not found 1566 € Added new paramter "ReturnExtendedInfo" to the function 1567 getAACADTSheaderFilepointer() in getid3.aac.php which now 1568 defaults to FALSE - if TRUE then the data for every frame is 1569 returned (containing aac_frame_length, adts_buffer_fullness and 1570 num_raw_data_blocks, which aren't usually very useful). Speed 1571 improvement with FALSE is about 35%. 1572 € Now returns fopen() errors in ['error'], for example if a remote 1573 file is not accessible. 1574 € Changed default number of MP3 audio frames to scan to determine 1575 if a valid stream has been found from 5 to 10, now also defined 1576 as a constant at the top of getid3.mp3.php This will result in 1577 slightly slower MP3 parsing, but greater reliability in 1578 detecting false/invalid/corrupted VBR headers. 1579 € fopen() errors now displayed in getid3.putid3.php 1580 (thanks miguel.dieckmannØhamburg*de) 1581 € Added 4th parameter to decodeMPEGaudioHeader() $ScanAsCBR which 1582 will force an MP3 audio frame sequence to be force-scanned in 1583 CBR mode. You should never need to call this directly, it's only 1584 used internally to scan for MP3 files that have an illegal VBR 1585 header with CBR data. (thanks fletchØpobox*com) 1586 * Bugfix: ASF_Marker_Object in getid3.asf.php was always returning 1587 an error in non-existant "reserved_1" and failing 1588 * Bugfix: VBR bitrate calculations in getid3.mp3.php only occur if 1589 ['mpeg']['audio']['VBR_frames'] is defined. 1590 (thanks fletchØpobox*com) 1591 * Bugfix: getid3.putid3.php no longer deletes original MP3 if 1592 ID3v2 tag writing fails (thanks miguel*dieckmannØhamburg*de) 1593 * Bugfix: incorrect order of if-statement error messages in 1594 getid3.putid3.php (thanks miguel*dieckmannØhamburg*de) 1595 getid3.asf.php now notes the error and continues parsing rather 1596 than failing when it encounters an error parsing a chunk 1597 Now actually scan 1000 frames for AAC ADTS as reported in the 1598 v1.5.4 changelog, rather than 100. (thanks ahØartemis*dk) 1599 Improved scanning speed in getAACADTSheaderFilepointer() by ~30% 1600 (thanks ahØartemis*dk for the fix) 1601 Added FileSizeNiceDisplay() function to getid3.functions.php for 1602 formatting filesize output in kB, MB, GB, etc. 1603 1604 1605 1.5.4: [October-07-2002] James Heinrich 1606 » Added support for Quicktime. 1607 New file: getid3.quicktime.php 1608 » Added support for AAC files, both ADTS and ADIF header formats. 1609 ADIF format is a pain because it's very similar to standard MP3 1610 header format, and it's hard to distinguish between the two. I 1611 have tried to make the detection accurate, but I have a limited 1612 number of AAC test files to play with so if you have an AAC file 1613 that gets detected as MP3/MP2 (or vice-versa), please send me 1614 the details via email at getid3Øsilisoftware*com 1615 ADTS format is very slow to parse because to get the bitrate of 1616 VBR files the whole file has to be stepped through frame by 1617 frame (getID3() scans up to the first 1000 frames and assumes 1618 that to be close enough). 1619 Note: I would suggest commenting out support for AAC (see top of 1620 GetAllMP3info() function in getid3.php) unless you need it. 1621 (thanks jfaulØgmx*de for the idea and sample Delphi source code) 1622 New file: getid3.aac.php 1623 » Added bitrate distribution analysis option for MP3 VBR files. A 1624 new boolean parameter for getOnlyMPEGaudioInfo() enabled this 1625 feature which steps through the MP3 file frame by frame and 1626 counts how many frames of each bitrate exist. This information 1627 is returned in ['mpeg']['audio']['bitrate_distribution'] 1628 Caution: this feature is very inefficient for large files and 1629 takes a very long time and does lots of disk I/O. Use with care. 1630 € Changed layout of allowedFormats in GetAllMP3info() function in 1631 getid3.php to allow easy removal of support for any of the 1632 supported format. As stated above, I recommend commenting out 1633 AAC unless needed. 1634 € Added ['flac']['compressed_audio_bytes'], 1635 ['flac']['uncompressed_audio_bytes'], and 1636 ['flac']['compression_ratio'] 1637 € Replaced FXPT2DOT30toFloat() function with FixedPoint2_30() 1638 * Bugfix: getid3.mpc.php was slightly miscalculating the number of 1639 samples, therefore also bitrate and playtime 1640 (thanks ahØartemis*dk for the fix) 1641 * Bugfix: MonkeyCompressionLevelNameLookup() didn't know about 1642 'insane' compression (thanks ahØartemis*dk for the fix) 1643 * Bugfix: MonkeySamplesPerFrame() was incorrect for MAC v3.95+ 1644 (thanks ahØartemis*dk for the fix) 1645 * Bugfix: getid3.check.php wasn't processing the assumeFormat 1646 directive when (register_globals == off) 1647 * Bugfix: detecting of synch pattern for MP3 files with invalid 1648 data at the beginning wasn't always correct, also meant possible 1649 incorrect bitrate/duration/etc info for such corrupt files. 1650 getid3.functions.php now includes a replacement utf8_decode() 1651 function for those PHP installations that are not configured 1652 with the --with-xml option. (thanks stephaneØtekartists*com) 1653 1654 1655 1.5.3: [September-30-2002] James Heinrich 1656 » Added support for VQF. (thanks mtØmansonthomas*com for the idea) 1657 New file: getid3.vqf.php 1658 » Added support for FLAC. Comments, if present, are returned under 1659 ['ogg'] because they follow the Ogg Vorbis structure standard. 1660 New file: getid3.flac.php 1661 € OS/2-format bitmaps are now correctly interpreted. The format of 1662 the bitmap is now returned in ['bmp']['type_os'] and 1663 ['bmp']['type_version']. OS/2 bitmaps can be v1 or v2, Windows 1664 can be v1, v4 or v5 1665 1666 1667 1.5.2: [September-25-2002] James Heinrich 1668 » Support for RealMedia (audio & video) added 1669 Note: only tested on G2 and v5 audio and video files - if anyone 1670 has older and/or newer sample files, please test it and/or send 1671 me the sample files. 1672 (thanks stephaneØtekartists*com for idea) 1673 New file: getid3.real.php 1674 » Support for BMP added. Palette and pixel data can optionally be 1675 extracted as well - this is slow and generally unneccesary, but 1676 the option is there if you need it. Also includes PlotBMP() 1677 which will take the extracted pixel data and output it as a true 1678 color PNG. This function requires GD v2.0+ 1679 Note: Untested on 16-bit and 32-bit BMPs because I couldn't find 1680 any sample files - if you know of a program that can create such 1681 files, please email getid3Øsilisoftware*com 1682 Note: Support for RGB (uncompressed), RLE8 and RLE4 is included 1683 and tested. BITFIELDS support is also included for 16- & 32-bit 1684 formats, but it's untested, so if anybody has any test files 1685 please send them to getid3Øsilisoftware*com 1686 Note: Support currently only for Windows-format BMPs, and trying 1687 to parse an OS/2-format bitmap leads to unpredictable/invalid 1688 results. 1689 New file: getid3.bmp.php 1690 » PNG now fully parsed, including all information chunks 1691 New file: getid3.png.php 1692 € Support for GIF/JPG/PNG moved to seperate files and expanded, 1693 including standard ['resolution_x'] and ['resolution_y'] as well 1694 as more thorough parsing of header information 1695 New file: getid3.gif.php 1696 New file: getid3.jpg.php 1697 table_var_dump() simplified and now outputs {-style character 1698 entities for characters outside the normal alphanumeric range 1699 CleanOggCommentName() changed to a regular expression 1700 (thanks chris-getid3Øbolt*cx for rewriting the function) 1701 1702 1703 1.5.1: [September-20-2002] James Heinrich 1704 » Added support for MPEGplus/Musepack SV7. ['fileformat'] is 'SV7' 1705 for version 7 files (versions 4, 5 ,6 and 8 are not supported 1706 yet, but will be of ['fileformat'] SV4, SV5, SV6 and SV8) when 1707 they are supported (thanks Christian Fritz for the idea) 1708 New file: getid3.mpc.php 1709 € ['bitrate_audio'], ['bitrate_video'], ['bitrate_mode'], 1710 ['channels'], ['resolution_x'], and ['resolution_y'] keys added 1711 for all appropriate formats 1712 € Ogg files with a COVERART comment now save and display the 1713 attached image the same way as is done with ID3v2 APICs 1714 € ['ogg']['comments'][n]['data'] and 1715 ['ogg']['comments'][n]['dataoffset'] is now returned for all 1716 comments. ['ogg']['comments'][n]['data'] is only useful if 1717 the field is supposed to contain binary data. It is a 1718 base64_decode()'d version of ['value']. 1719 ['ogg']['comments'][n]['dataoffset'] is the byte offset in the 1720 file at which the 'COMMENTNAME=value string' starts, not the 1721 start of just 'value' 1722 € ['ogg']['comments'][n]['image_mime'] is now returned if 1723 ['ogg']['comments'][n]['data'] contains valid image data. 1724 € More than 3 Ogg pages may now be read in, if the comment data 1725 is longer than 1 page (usually about 4kB) 1726 € ['fileformat'] is now 'mp2' rather than 'mp3' if it's MPEG-1, 1727 Layer-II audio 1728 € ASF bitrates now calculated even if stream_bitrate_properties 1729 object not present 1730 € ['asf']['stream_properties_object'] is now a numeric-key array 1731 with one entry for each stream - the key being the stream number 1732 € ['replay_gain'] is returned for all audio formats that support 1733 it (MP3-LAME, ID3v2, Ogg) (thanks Christian Fritz for the idea) 1734 € ['mpeg']['audio']['LAME']['RGAD']['radio_replay_gain'] is now 1735 ['mpeg']['audio']['LAME']['RGAD']['radio'] (same for audiophile) 1736 € ASF/WMA files now use WM/Track to get track number from if 1737 WM/TrackNumber is not available (thanks stephaneØtekartists*com) 1738 € ASF/WMV files now returns ['year'] and ['asf']['year'] 1739 € ASV/WMV files now use ['content_description']['description'] for 1740 the ['comment'] field (thanks stephaneØtekartists*com) 1741 € ['track'] is now always returned as an integer 1742 * Bugfix: Ogg comments that are larger than one data page (usually 1743 about 4kB) are now correctly parsed (thanks Christian Fritz) 1744 * Bugfix: Ogg comment data is now UTF8-decoded 1745 * Bugfix: Ogg comment writing now UTF8-encodes the data 1746 * Bugfix: playtime for ASF files was off by <preroll> (usually 1747 between 3 and 12 seconds) 1748 * Bugfix: ['asf']['stream_properties_objects']['flags'] data was 1749 possibly incorrect 1750 * Bugfix: ASF Padding Object was overwriting 1751 Stream Bitrate Properties Object data (now returned correctly in 1752 ['asf']['padding_object'] 1753 * Bugfix: ASF Marker Object Reserved_2 field was incorrect 1754 * Bugfix: ASF Bitrate Mutual Exclusion Object had incorrect stream 1755 numbers 1756 Warning displayed if incorrectly-formatted Ogg comment is present 1757 (known to be an issue with CDex v1.40, but fixed by v1.50b7) 1758 (thanks Christian Fritz) 1759 Ogg comment writing now checks for valid comment names 1760 Added bitrate column in getid3.check.php, and added some formatting 1761 (font, colour) 1762 Performance tweaks using bitwise math instead of binary string 1763 operations 1764 1765 1766 1.5.0: [September-18-2002] James Heinrich 1767 » Ogg comment writing support added. getid3.write.php has been 1768 updated to allow for writing comment tags to both MP3 and Ogg. 1769 Big thanks to Chris Bolt <chris-getid3Øbolt*cx> for writing the 1770 OggWrite() function and offering it for inclusion in getID3() 1771 New file: getid3.ogginfo.php 1772 » Support for Monkey's Audio and APE tag added. 1773 (thanks Christian Fritz for the idea) 1774 New file: getid3.ape.php 1775 ['fileformat'] now returns 'mac' for Monkey's Audio files, or 1776 'ape' for files with an APE tag (Monkey's Audio or other format) 1777 » getid3.thumbnail.php has been removed from the distribution and 1778 the table_var_dump() function now outputs APICs as seperate 1779 files in the same directory as the analyzed file. This should 1780 make the image-displaying more reliable as well as reduce 1781 complexity. The naming convention for the images is 1782 filename.ext.[byte offset of APIC data].[jpg|gif|png] 1783 If anybody still has any problems with corrupted images please 1784 let me know at getid3Øsilisoftware*com 1785 » Support for extended Xing/LAME tag 1786 (see http://users.belgacom.net/gc247244/extra/tag.html) 1787 Data is returned in ['mpeg']['audio']['LAME'] 1788 € ['ogg']['tracknumber'] has been renamed to ['ogg']['track'] and 1789 ['track'] is now returned in the root of the array 1790 € ['ogg']['pageheader'][n]['flag'] has been renamed to 1791 ['ogg']['pageheader'][n]['flags'] and the unprocessed flag byte 1792 is available in ['ogg']['pageheader'][n]['flags_raw'] 1793 € ['frequency'] is now returned for WAVE files in the root of the 1794 array (thanks danielØelectroteque*org) 1795 € ASF files now return codec, bitrate, resolution, etc information 1796 under ['asf']['video_media'] or ['asf']['audio_media'] 1797 * Bugfix: RVA2 and EQU2 writing in getid3.putid3.php were 1798 incorrectly writing Volume Adjustment field 1799 * Bugfix: EQU2 in getid3.frames.php was reading Volume Adjustment 1800 as unsigned integer instead of signed integer 1801 * Bugfix: handling of remote files over HTTP & FTP was broken 1802 (thanks Vince) 1803 * Bugfix: incorrect handling of some ASF packets 1804 ASF/Windows Media format now more fully parsed, including Index 1805 Objects 1806 Added several new fourCC video codecs 1807 1808 1809 1.4.3: [September-15-2002] James Heinrich 1810 » Now parses ASF / WMV / WMA files 1811 € New file: getid3.asf.php 1812 * Bugfix: RoughTranslateUnicodeToASCII() would return nothing 1813 if didn't find a terminator it was expecting 1814 Added FILETIMEtoUNIXtime() function (for converting 64-bit 1815 Microsoft FILETIME timestamps, used in ASF files and elsewhere, 1816 to UNIX Epoch timestamps) 1817 Added GUIDtoBytestring() and BytestringToGUID() functions 1818 1819 1820 1.4.2: [September-12-2002] James Heinrich 1821 » getID3() now requires PHP v4.1.0 or higher because it now is 1822 designed to work with register_globals = off and the new auto- 1823 globals ($_GET, $_SERVER, etc). 1824 * Bugfix: VBR MP3 files with Fraunhofer-style VBR header were not 1825 being correctly detected in most cases 1826 (thanks dkushnerØoddcast*com and mikeØftl*com for sample files) 1827 * Bugfix: IsValidTextEncoding() was broken 1828 * Bugfix: Add stripslashes($EditorFilename) to getid3.write.php 1829 (writing was broken for files with ' or " in the filename) 1830 (thanks mikeØftl*com and kthejoker) 1831 * Bugfix: If there is garbage data between a valid VBR header 1832 frame and a sequence of valid MPEG-audio frames the VBR data is 1833 no longer discarded. (thanks to mikeØftl*com for sample 1834 Fraunhofer-style VBR file produced with MusicMatch v7.2) 1835 € Changed variable system to work with (register_globals = off) 1836 € Moved relevant code into seperate PlaytimeString() function 1837 € Added nl2br() to table_var_dump() for cleaner output 1838 € Now returns the following keys from Fraunhofer-VBR files: 1839 ['VBR_seek_offsets'], ['VBR_seek_offsets_stride'], 1840 ['VBR_offsets_relative'] and ['VBR_offsets_absolute'] 1841 € Added ID3v1matchesID3v2() function and implemented in 1842 getid3.check.php (thanks to "Guest" in the forums for the idea) 1843 Changed amount of data read in getid3.getimagesize.php from 10kB 1844 to entire file. (thanks mikeØftl*com) 1845 Wrapped function_exists() checks around function definitions in 1846 getid3.functions.php 1847 Fixed a lot of E_WARNING and E_NOTICE situations, especially in 1848 ID3-writing code (getid3.putid3.php, etc) 1849 Added checks to make sure all needed data is available for writing 1850 ID3v2 tags 1851 1852 1853 1.4.1b5: [May-30-2002] James Heinrich 1854 * Bugfix: Unsynchronise() was broken, now fixed 1855 (thanks mikeØftl*com) 1856 * Bugfix: GenerateID3v2Tag() now correctly uses non-synchsafe 1857 integers for frame size descriptors in ID3v2.3 and ID3v2.2 1858 (thanks mikeØftl*com) 1859 € Added ['artist'], ['title'], etc keys to root of returned 1860 array to provide a common place to access any returned info 1861 from any file type. Currently gets info from ID3v1, ID3v2, 1862 Ogg, and RIFF/WAVE. Possible returned keys are: 1863 title, artist, album, year, genre, comment, track 1864 € Modified LookupGenre() function to search for either genre based 1865 on numeric ID, or now reverse lookup as well 1866 € Added ['artist'], ['title'], etc keys to ['RIFF'] information 1867 if info tags are present 1868 Added functionality to attach a picture to the ID3v2 tag in 1869 getid3.write.php 1870 Sorted genres into alphabetical order (special 3 at end of list) 1871 in getid3.write.php 1872 Changed the comment-edit field in getid3.write.php to a multi-line 1873 <textarea> from a single-line <input> 1874 getid3.write.php now only writes ID3v2 frames that have data 1875 Added default TXXX field to getid3.write.php to put a tagger info 1876 field when writing ID3v2 tags. Description is "ID3v2-tagged by" 1877 and data is "getID3() v[version] (www.silisoftware.com)" 1878 Changed getid3.check.php to use the new common info keys 1879 Improved file-format detection in getid3.check.php - if the auto- 1880 detect based on the first few bytes of the file doesn't find a 1881 known format (for example if the header is corrupt), a more 1882 thorough scan is done based on the file extension 1883 Added 'Edit ID3' link from getid3.check.php to getid3.write.php for 1884 MP3 files (thanks maxØgutalin*com for the idea) 1885 Added 'Delete file' link from getid3.check.php to getid3.write.php 1886 allowing you to permanently delete a file (be careful with this!!) 1887 (thanks maxØgutalin*com for the idea) 1888 Added some mouse-over titles for links in getid3.check.php 1889 1890 1891 1.4.1b4: [May-15-2002] James Heinrich 1892 * Bugfix: getid3.check.php wasn't parsing MP3s with invalid headers 1893 or padding at the beginning of the file - added 'assumeFormat' 1894 parameter and 'Parse this file as:' options to force parsing in a 1895 particular format (thanks Alcohol for the sample file) 1896 * Bugfix: unset(['fileformat']) and ['error'] added in cases where 1897 file cannot be parsed in the assumed or forced format 1898 1899 1900 1.4.1b3: [May-01-2002] James Heinrich 1901 € For Ogg files, now calculates the real average bitrate (returned 1902 in ['ogg']['bitrate_average']) and so the playtime of the file is 1903 calculated on actual average bitrate, not nominal bitrate, so it 1904 should be accurate now (thanks to stephaneØtekartists*com for 1905 telling me it was wrong) 1906 * Bugfix: ID3v2FrameIsAllowed() wasn't behaving properly if the 1907 writing functions were called for more than one file, because of 1908 the static array not being cleared between uses. This is an 1909 updated fix because the one in 1.4.1b2 didn't work :o) 1910 (thanks soulcatcherØevilsoft*org and yoyo) 1911 Added rawurlencode() to the filename parameter in table_var_dump() 1912 for images (wouldn't work with path/file names containing special 1913 characters (#, &, ", +) (thanks Christian Fritz) 1914 getid3.check.php no longer attempts to scan all MIDI tracks in 1915 directory-browse mode, since this can take a long time. Detailed 1916 single-file view is still fully scanned (new third parameter for 1917 getMIDIHeaderFilepointer() controls this) 1918 Small improvements to MoreNaturalSort() 1919 1920 1921 1.4.1b2: [April-18-2002] James Heinrich 1922 € GetAllMP3Info()'s 2nd parameter has changed from boolean to string 1923 (now specifying the parse-this-file-as-this format, like 'mp3', 1924 but also can be FALSE to mean don't assume any format, auto-detect 1925 only), and a third parameter (array containing allowed formats) 1926 has been added. The assumedFormat parameter allows a file to be 1927 forced to be parsed as a certain format rather than relying on the 1928 auto-detection of getID3() (ex: an MP3 wrapped in a RIFF/WAV 1929 header will be auto-detected as RIFF/WAV, but if forced to parse 1930 as MP3 will extract the original MP3 information) 1931 (thanks reel_tazØusers*sourceforge*net) 1932 * Bugfix: ID3v2FrameIsAllowed() wasn't behaving properly if the 1933 writing functions were called for more than one file, because of 1934 the static array not being cleared between uses (thanks yoyo) 1935 * Bugfix: Lyrics3 data wasn't being properly copied from the ['raw'] 1936 keys to the easy keys (['title'], etc.) (thanks Christian Fritz) 1937 * Bugfix: some testing code was accidentally left in 1938 getid3.thumbnail.php (thanks Christian Fritz) 1939 * Bugfix: RIFF/WAVE files are now more likely to have all their 1940 chunks parsed. 1941 * Bugfix: RIFF/WAVE bitrate & playtime now better calculated 1942 * Bugfix: MP3 scanning for synch doesn't go beyond 64k now, to stop 1943 intensive scanning through large file that don't have a synch 1944 (thanks soulcatcherØevilsoft*org for a weird sample file) 1945 Improved performance when scanning for MP3 synch (about 600% faster 1946 if the synch is never found) 1947 ZIP files no longer return the contents of each compressed file, as 1948 that would very easily be more data than PHP could handle. 1949 (thanks davidbullockØtech-center*com) 1950 getid3.check.php now displays entries in a more natural sort order: 1951 case insensitive, ignores most punctuation, treats accented chars 1952 the same as their unaccent equivalent (thanks mikeØftl*com) 1953 Added support for SmartSound-format RIFF files (which are regular 1954 RIFF/WAVE files with the first 4 chars changed from RIFF to SDSS) 1955 All instances of while(list() = each()) replaced with foreach() 1956 1957 1958 1.4.1b1: [April-11-2002] James Heinrich 1959 » Parses MIDI files. 1960 NOTE: very slow at parsing, much slower than any other file type 1961 NOTE: playtime is generally mostly accurate, but not always 100% 1962 » Parses ZIP files (if ZZIPlib available, and only in PHP 4.0.7RC1 1963 and later (see http://www.php.net/manual/en/ref.zip.php) 1964 NOTE: currently untested as I'm unable to find php_zip.dll for 1965 PHP/Win32 - if someone has a copy of this file, please email me: 1966 getid3Øsilisoftware*com 1967 » Parses JPEG files (requires GD installed) 1968 » Parses PNG files (requires GD v1.6+ installed) 1969 » Parses GIF files (requires GD < v1.6 installed) 1970 » For MP3s, once a valid synch is detected, the next 5 frames are 1971 also scanned for valid synch signatures, to prevent false 1972 identification of synch. For corrupt MP3 files this will be a bit 1973 slower, but hopefully produce more reliable results. 1974 (Thanks to mpdjØbtinternet*com for bringing this to my attention, 1975 and xbhoffØpacbell*net for explaining what was happening) 1976 (Thanks also to macik for helping me with MP3 frame lengths: 1977 http://66.96.216.160/cgi-bin/YaBB.pl 1978 ?board=c&action=display&num=1018474068) 1979 » The actual image data is now displayed (for JPEG, PNG and GIF 1980 images only) rather than a binary text dump in getid3.check.php 1981 (specifically table_var_dump()) for APIC frames. Made possible 1982 by the inclusion of (a modified version of) GetURLImageSize() by 1983 Filipe Laborde-Basto (www.rezox.com). You can right-click, save-as 1984 to extract the image to a file. 1985 NOTE: The actual image data is still returned in ['data'] 1986 € ['image_mime'], ['image_width'], ['image_height'], ['image_bytes'] 1987 are now returned for APICs 1988 € split parsing functions out into seperate files: lyrics3, id3v1, 1989 id3v2, mp3, ogg, riff, mpeg, midi, zip 1990 € ['ogg']['bitrate_ave'] -> ['ogg']['bitrate_nominal'] (thanks to 1991 stephaneØtekartists*com for pointing out that "nominal" bitrate 1992 may actually differ significantly from the "average" bitrate) 1993 The real average bitrate seems to be only extractable by parsing 1994 the entire file and calculating the average bitrate. This is not 1995 yet an option, but hopefully in a future version of getID3() 1996 € ['filename'] now returned for all files 1997 € ['ogg']['date'] and ['ogg']['description'] now returned when 1998 available (thanks stephaneØtekartists*com) 1999 € ['mpeg']['audio']['crc'] now contains the CRC (if present) 2000 € ['bitrate'] is now returned as a double instead of an int 2001 € ['dataoffset'] is now returned for all ID3v2 frames 2002 * Bugfix: MP3 CRC presence ['mpeg']['audio']['protection'] was being 2003 reported as opposite of what it actually should be 2004 * Bugfix: MPEG videos weren't being detected (they were being 2005 parsed as MP3), and even if they were, there was a typo in 2006 getMPEGHeaderFilepointer() (thanks Christian Fritz) 2007 * Bugfix: getid3.functions.php wasn't being included in 2008 getid3.write.php (thanks mikeØftl*com) 2009 * Bugfix: Browse:___ directory name in getid3.check.php wasn't 2010 correct with directory names with ' and other strange characters 2011 (thanks Christian Fritz) 2012 ID3v2FrameProcessing() now checks to see if the next frame is valid 2013 after it encounters an invalid FrameID, and if the next frameID 2014 appears valid, it will just skip the current (invalid) frame and 2015 continue processing (it would previously abort at the first sign 2016 of incorrect structure) (thanks stephaneØtekartists*com) 2017 getid3.check.php now scans filetypes based on content, not filename 2018 extension, and shows the filetype in the displayed output. Files 2019 are only scanned as MP3 if ID3v2 or MPEG-audio signatures are at 2020 the immediate beginning of the file (MP3 used to be the default 2021 format), so a corrupt file may not show up as MP3 format in the 2022 browse screen, but in detail it will scan in-depth 2023 getid3.check.php now has columns to show the presence of ID3v1, 2024 ID3v2 and Lyrics3 content 2025 Helium2 (www.helium2.com) has been known to write ID3v2.4 tags with 2026 non-synchsafe-integer framesizes, getID3() now checks for this and 2027 will override and parse the tag as ID3v2.3 if the tag would parse 2028 fine as ID3v2.3 when it's really specified as ID3v2.4 (thanks 2029 Christian Fritz for the test files) 2030 2031 2032 1.4.0b9: [April-05-2002] James Heinrich 2033 » Ogg files now return bitrate and playtime (playtime calculated 2034 from nominal bitrate and filesize, so it's only approximately 2035 accurate). (thanks stephaneØtekartists*com for the idea) 2036 * Bugfix: ID3v1 tags were not properly being parsed - track, genre 2037 and comment fields were incorrect. (thanks Christian Fritz) 2038 * Bugfix: getid3.check.php would not browse directories with single 2039 quotes (') or double quotes (") in the directory name. 2040 (thanks Christian Fritz) 2041 * Bugfix: Improved detection of MPEG-video files (a sample MP3 file 2042 had a false MPEG video signature at the beginning), and the MPEG- 2043 video parsing function now only looks for the MPEG-video header 2044 in the first 100k bytes of the file, to prevent needlessly 2045 scanning very large files. Also will not infinitely loop if it 2046 does not find what it's looking for. (thanks Christian Fritz) 2047 ['error'] now returned if MP3 synch doesn't occur at beginning of 2048 file if ID3v2 not used (ie there's some kind of padding there that 2049 should not be) 2050 Reduced use of fread() in getMPEGHeaderFilepointer() (now faster) 2051 Added "file parsed in x.xxx seconds" to getid3.check.php 2052 Added "browse: <directory>" link to getid3.check.php 2053 Changed default ID3v2 majorversion from 2.4 to 2.3 in 2054 getid3.write.php because Winamp (and probably many other 2055 ID3v2-aware tools) can only read up to ID3v2.3 2056 (thanks mikeØftl*com) 2057 2058 2059 1.4.0b8: [April-04-2002] James Heinrich 2060 » Lyrics3 support added (thanks Christian Fritz for the idea) 2061 € check.php renamed to getid3.check.php 2062 € write.php renamed to getid3.write.php 2063 € ['id3']['id3v2']['error'] (if present) now reported in ['error'] 2064 € ['mpeg']['audio']['error'] (if present) now reported in ['error'] 2065 * Bugfix: RoughTranslateUnicodeToASCII() was completely mangling 2066 UTF-16/UTF-16BE encoded text 2067 * Bugfix: The warning about MP3ext wasn't always showing up 2068 (thanks davidbullockØtech-center*com) 2069 getID3v1Filepointer() cleaned up & shortened 2070 Moved the include_once() statements around so that a minimum of code 2071 is included 2072 2073 2074 1.4.0b7: [April-03-2002] James Heinrich 2075 » RIFFs (specifically AVIs) are now more completely parsed, 2076 almost everything in the returned ['RIFF'] array has been moved 2077 around and/or restructured. A lot of new data is in there too - 2078 codecs, frame size, etc. 2079 € Better recursive parsing of RIFFs (sub-arrays are now in the right 2080 place) 2081 * Bugfix: the isset() idea introduced in beta 5 was incorrectly 2082 implemented, such that ['asciidata'] and ['asciidescription'] were 2083 never returned - this had the side effect that ID3v2 comments were 2084 not copied to ['id3']['id3v2']['comment'] (thanks mikeØftl*com) 2085 * Bugfix: MPEG audio synch wasn't being detected, and therefore MPEG 2086 audio data not parsed, if no ID3v2 header present in an MP3 2087 ID3v1 track number only returned if greater than zero 2088 Removed !== FALSE (introduced in 1.4.0b6) from while(fread()) loops, 2089 some users were reporting problems with that syntax. 2090 Changed substr($string, 0, 1) to $string{0} syntax in most files 2091 Reformatted changelog.txt to 72-column width 2092 2093 2094 1.4.0b6: [April-01-2002] James Heinrich 2095 * Bugfix: 1.4.0b5 introduced a bug where any RIFF file other than 2096 PCM WAVE (this includes any compressed WAV, as well as all AVIs) 2097 would crash getID3() 2098 Reduced use of fread() in getOggHeaderFilepointer() for increased 2099 speed 2100 Added constant FREAD_BUFFER_SIZE for many fread() operations 2101 Added !== FALSE check to while(fread()) loops 2102 (thanks davidbullockØtech-center*com) 2103 Added more entries to RIFFwFormatTagLookup() 2104 (still looking for a good complete list) 2105 Converted use of hexdec() in getid3.lookup.php to 0x1234 notation 2106 2107 2108 1.4.0b5: [March-28-2002] James Heinrich 2109 € Renamed decodeheader() to decodeMPEGaudioHeader() 2110 * Bugfix: Fixed infinite loop problem for RIFF/WAV files with 2111 unknown chunks 2112 * Bugfix: WXXX frames were incorrectly writing from ['URL'] instead 2113 of ['url'] 2114 * Bugfix: RoughTranslateUnicodeToASCII() wasn't properly decoding 2115 UTF-16/UTF-16BE 2116 Changed all quoted strings from " to ' to hopefully improve speed 2117 (although benchmarks have not yet shown any significant 2118 improvement in speed) (thanks davidbullockØtech-center*com) 2119 Improved code in check.php for dealing with symbolic links 2120 (thanks davidbullockØtech-center*com) 2121 Changed '<?' tags to '<?php' (thanks davidbullockØtech-center*com) 2122 Added processing time indicator in check.php 2123 (ie 'directory scanned in 2.45 seconds') 2124 Replaced all instances of feof() to prevent infinite loop conditions 2125 Moved lookup portions of decodeMPEGaudioHeader() to 2126 getid3.lookup.php 2127 Replaced $arrayname[$index] with $arrayname["$index"] to avoid PHP 2128 E_NOTICEs (thanks davidbullockØtech-center*com) 2129 Wrapped isset() around many if statements, to avoid PHP E_NOTICEs, 2130 hence improve speed (up to 30x speed improvement reported in some 2131 cases :) 2132 2133 2134 1.4.0b4: [March-26-2002] James Heinrich 2135 € RIFF/WAV file format now parsed, returned under ['riff'] 2136 € Support for Relative Gain Adjustment in RIFF/WAV files 2137 € ['channels'] (1 or 2) now returned for MP3 and WAV files 2138 € ['bitrate'] now returned (in bits-per-second) at root level for 2139 MP3 and WAV files 2140 Added support for RGAD (Relative Gain ADjustment) ID3v2 frames, both 2141 reading & writing 2142 (see http://privatewww.essex.ac.uk/~djmrob/replaygain/ for details 2143 on RGAD) (thanks Christian Fritz for the idea) 2144 Removed some test data-dumping from the ID3v2 writing functions 2145 Language code 'XXX' now returns descriptive string 'unknown' instead 2146 of NULL 2147 Seperated out comments from top of getid3.php into getid3.readme.txt 2148 and changelog.txt 2149 Split out non-lookup functions from getid3.lookup.php to 2150 getid3.functions.php 2151 2152 2153 1.4.0b3: [March-25-2002] James Heinrich 2154 € ['asciidata'] for WXXX frames now returns correct information, but 2155 under ['asciidescription'] (thanks Christian Fritz) 2156 € Added ['framenamelong'] to all returned frame data arrays with 2157 text description of that frame (ie 'RVA2' would return 'Relative 2158 volume adjustment (2)') (thanks Christian Fritz) 2159 € ['datalength'] is now ['indexeddatalength'] in ASPI frames (was 2160 confliciting with the all-frames ['datalength'] as introduced in 2161 v1.4.0b1 2162 € ['datalength'] now returned as integer (rather than double) where 2163 possible 2164 2165 2166 1.4.0b2: [March-21-2002] James Heinrich 2167 € ['mpeg']['audio']['bitrate'] now returned as int rather than 2168 double for VBR files 2169 * Bugfix: MPEG audio information wasn't being parsed on files that 2170 had neither ID3v1 or ID3v2 2171 * Bugfix: COMM/WXXX frames weren't returning 'asciidata' in 2172 ID3v2.2, which also meant the ['id3']['id3v2']['comment'] field 2173 wasn't being returned (thanks stephaneØtekartists*com) 2174 * Bugfix: file might not be found if filename actually contains 2175 escaped chars or %xx-formatted characters 2176 (thanks reel_tazØusers*sourceforge*net) 2177 Added support for running with Register Globals turned off 2178 (thanks reel_tazØusers*sourceforge*net) 2179 Added urlencode() where needed in check.php 2180 (thanks reel_tazØusers*sourceforge*net) 2181 Fixed IE buffering/display problem in progress counter in check.php 2182 2183 2184 1.4.0b1: [March-11-2002] James Heinrich 2185 » ID3v2 writing support via WriteID3v2() in putid3.php 2186 RemoveID3v2() and RemoveID3v1() functions now available in 2187 putid3.php All ID3v1 and ID3v2 writing functions have been moved 2188 to putid3.php and example file write.php has been added to the 2189 distribution 2190 € MPEG audio frame information (bitrate, frequency, etc) now 2191 returned inside ['mpeg']['audio'] instead of just ['mpeg'] 2192 € MPEG video information now parsed, returned in ['mpeg']['video'] 2193 Note: audio portion of video system files is not yet being parsed 2194 € All flag bits are now returned as boolean rather than int or 2195 string 2196 € RVA2 data now returned as an array (multiple RVA2 tags are 2197 allowed) 2198 € RVA2/EQU2 description returned under ['description'] rather than 2199 ['identification'] 2200 € RVAD/EQUA adjustments now returned as signed integers, rather than 2201 absolute values which required you to check flag bytes 2202 € RVRB/REV data no longer returns under ['reverb'] array 2203 € WXXX/W???/LINK frames now return ['url'] instead of ['URL'] 2204 € USER now properly returns both ['language'] and ['languagename'] 2205 € OWNE now returns ['purchasedateunix'] as a UNIX timestamp 2206 (only if ['purchasedate'] is a valid date) 2207 € ['id3']['id3v2']['padding'] now returned with information on padding 2208 € ['headerlength'] now includes the initial 6 or 10 bytes of the 2209 ID3v2 header 2210 € ['artist'], ['title'], ['album'], ['tracknumber'], ['genre'] now 2211 returned for easier access for Ogg files 2212 € added ['datalength'] to all ID3v2 frames: length of frame data, 2213 not including frame header 2214 € ['fileformat'] now returns 'id3' if there are ID3v1 or ID3v2 tags 2215 but no audio data 2216 € ['fileformat'] now returns 'mpg' if it's an MPEG system (video + 2217 audio) file 2218 * Bugfix: RVAD was being parsed incorrectly 2219 * Bugfix: ['currency'] and ['purchasedate'] now correctly returned 2220 in OWNE 2221 * Bugfix: Frequncies in 'EQU2' frames were incorrectly double 2222 * Bugfix: ['bytedeviation'] and ['msdeviation'] now properly 2223 returned as integer rather than binary string for 'MLLT' frames 2224 * Bugfix: ['filename'] now properly returned for 'GEOB' frames 2225 * Bugfix: ['imagetype'] now properly returned for 'PIC' frames in 2226 ID3v2.2 2227 * Bugfix: Genre not being written if not set in WriteID3v1() 2228 (thanks reel_tazØusers*sourceforge*net) 2229 * Bugfix: Changed write mode to 'r+b' from 'a+' because ID3v1 tags 2230 were being appended instead of overwritten if they already existed 2231 (thanks reel_tazØusers*sourceforge*net) 2232 * Bugfix: open would fail on filenames containing quotes 2233 (thanks javierØcrackdealer*com) 2234 * Bugfix: various values were incorrectly returned (unneeded ord()) 2235 in these frames: COMR, USER, ENCR, GRID, PRIV, SIGN 2236 * Bugfix: ASPI ['bitsperpoint'] was not correctly returned 2237 * Bugfix: RoughTranslateUnicodeToASCII() was not returning the last 2238 char for UTF-16 2239 * Bugfix: ['audiobytes'] now correctly 0 if no synch found 2240 * Bugfix: GenreLookup was incorrectly returning 'Remix' instead of 2241 'Blues' for GenreID 0 2242 Added sample directory browser to check.php 2243 Seperated out MPEGaudio-parsing functionality into 2244 getOnlyMPEGaudioInfo() which may be called directly if you don't 2245 need any ID3 parsing (thanks djpretzelØcox*rr*com for idea) 2246 Reduced use of fread() for increased performance in 2247 getID3v1Filepointer() 2248 Added clearstatcache() before checking filesize - size after writing 2249 tag now correct 2250 Added hack for mp3Rage (www.chaoticsoftware.com) that puts 2251 ID3v2.3-formatted MIME type instead of 3-char ID3v2.2-format image 2252 type (thanks xbhoffØpacbell*net for test file) 2253 2254 2255 1.3.2: [February-15-2002] James Heinrich 2256 € UFID/UFI, USLT/ULT, COMM/COM, APIC/PIC, GEOB/GEO, CRM, RVA2, EQU2, 2257 POPM/POP, AENC/CRA, ENCR and GRID frame data now returned under 2258 numeric array index rather than by ownerID 2259 € RVA2 frame data is now returned keyed by $channeltypeid instead of 2260 $frame_idstring 2261 € WXXX/WXX frame description now returned under ['description'] 2262 instead of ['data'] 2263 Trailing null bytes now trimmed from frame (W??? & T???) text data 2264 (it shouldn't be there to begin with, but a sample file encoded by 2265 [unknown program] had data padded to 50 chars with null bytes, 2266 which caused ParseID3v2GenreString() to freeze). 2267 2268 2269 1.3.1: [February-13-2002] James Heinrich 2270 * Bugfix: ['playtime_seconds'] and ['playtime_string'] were not 2271 being returned 2272 * Bugfix: ['fileformat'] was incorrectly being returned as a 2273 2-element array 2274 * Bugfix: USLT wasn't being correctly parsed 2275 Improved RoughTranslateUnicodeToASCII() 2276 (thanks reel_tazØusers*sourceforge*net for Unicode test file) 2277 2278 2279 1.3.0: [February-13-2002] James Heinrich 2280 » ID3v1 writing support via WriteID3v1() 2281 € MPEG audio frame information (bitrate, frequency, etc) now 2282 returned inside ['mpeg'] 2283 € ['mpeg']['raw'] returns the integer values of the bits for MPEG 2284 audio information as returned in ['mpeg'] by decodeheader() 2285 (thanks reel_tazØusers*sourceforge*net) 2286 € 'protection', 'padding', 'private', 'copyright' and 'original' now 2287 return as boolean 2288 € 'bitrate' and 'frequency' now return as int (except in special 2289 case of 'free') 2290 Language name as well as code retured where appropriate 2291 (ie 'English' and 'eng') 2292 Text frames with invalid TextEncoding value are now passed through 2293 anyway 2294 ID3v1 data (title, artist, album, year, comment) is now trimmed 2295 (no more nulls) 2296 RoughTranslateUnicodeToASCII() now uses utf8_decode() for UTF-8 2297 2298 2299 1.2.5: [January-30-2002] James Heinrich 2300 * Bugfix: Playtime calculations for VBR files were off slightly 2301 (rounding error) 2302 * Bugfix: Extended header length was incorrectly calculated 2303 * Bugfix: Genre strings such as '03' weren't being handled correctly 2304 More complete support for ID3v2.3 FrameIDs 2305 Split out getid3.frames.php (FrameID-specific parsing function) 2306 Split out getid3.lookup.php (assorted lookup-table functions) 2307 Searches for what directory getid3.*.php support files are in (must 2308 be same as getid3.php, but doesn't have to be same as main file - 2309 for example your main file could be /index.php, but including 2310 /lib/getid3/getid3.php) 2311 Simplified, tweaked, changed and/or eliminated several functions. 2312 2313 2314 1.2.4: [January-26-2002] James Heinrich 2315 » Basic support for reading Ogg-Vorbis comment tags 2316 2317 2318 1.2.3: [January-24-2002] James Heinrich 2319 » ID3v2.2.x 3-char FrameIDs are now fully parsed 2320 Note: While I've included support for 22 FrameIDs as defined in 2321 the specs, I don't have test files for all of them. If anyone 2322 knows of programs that generate any of the untested tags, please 2323 email getid3Øsilisoftware*com ! Here's what's tested and not: 2324 Tested: T??, COM 2325 Untested: UFI, TXX, W??, WXX, IPL, MCI, ETC, MLL, STC, ULT, SLT, 2326 RVA, EQU, REV, PIC, GEO, CNT, POP, BUF, CRM, CRA, LNK 2327 table_var_dump() now displays boolean variables as TRUE or FALSE 2328 table_var_dump() now uses htmlspecialchars() to avoid broken-table 2329 problems 2330 2331 2332 1.2.2: [January-18-2002] James Heinrich 2333 € Parses ID3v2 genres into ['id3']['id3v2']['genreid'] and 2334 ['id3']['id3v2']['genrelist'] where appropriate 2335 (thanks stephaneØtekartists*com for the idea) 2336 Added ID3v2 genre abbreviations 'RX' (remix) and 'CR' (cover) 2337 2338 2339 1.2.1: [January-17-2002] James Heinrich 2340 * Bugfix: 'mp3' was being returned in ['format'], but 'zip' was 2341 being returned in ['fileformat'], both are now returned in 2342 ['fileformat'] 2343 € Splits ['id3']['id3v2']['track'] in the format '5/12' into 2344 ['track'] = '5' and ['totaltracks'] = '12' 2345 € Enabled ['id3']['id3v2']['title'] etc for ID3v2.2.x 2346 (3-char frame names) (thanks stephaneØtekartists*com) 2347 € Changed v1.?? version number format to v1.?.? 2348 Scans through the file until it finds the MPEG synch (start of audio 2349 frame) - some files encoded by LAME 3.91 had undocumented padding 2350 after the ID3v2 header; getMP3headerFilepointer() now scans until 2351 it finds synch (or EOF) (thanks adamØtrekjapan*com) 2352 Improved Unicode conversion in RoughTranslateUnicodeToASCII() 2353 2354 2355 1.20: [January-15-2002] James Heinrich 2356 » Support for variable-bitrate (VBR) files, both Xing and Fraunhofer 2357 headers 2358 » All 4-character FrameIDs are now fully parsed according to the 2359 specs at http://www.id3.org/id3v2.4.0-frames.txt 2360 € This means that most no longer return ['flags'] and ['data'] 2361 Note: While I've included support for 30 FrameIDs as defined in 2362 the specs, I don't have test files for all of them. If anyone 2363 knows of programs that generate any of the untested tags, please 2364 email getid3Øsilisoftware*com ! Here's what's tested and not: 2365 Tested: UFID, T???, WXXX, USLT, SYLT, COMM, APIC, GEOB 2366 Untested: TXXX, W???, MCDI, ETCO, MLLT, SYTC, RVA2, EQU2, RVRB, 2367 PCNT, POPM, RBUF, AENC, USER, OWNE, COMR, ENCR, GRID, 2368 PRIV, SIGN, SEEK, ASPI 2369 € Added 'title', 'artist', etc names to ID3v2 data (easier to access 2370 than the 4-character FrameIDs of the ID3v2 standard) 2371 (thanks jaksonØgmx.net) 2372 * Bugfix: added fclose() at end of GetAllMP3Info() 2373 (thanks stephaneØtekartists*com) 2374 * Bugfix: ID3v1 wasn't being parsed if ID3v2 wasn't present 2375 (thanks jaksonØgmx.net) 2376 * Bugfix: several flags were being parsed incorrectly (the structure 2377 had changed from ID3v2.3 to ID3v2.4) - v2.3 flags were being 2378 incorrectly parsed 2379 Much more compact implementation of decodeheader() 2380 (thanks jaksonØgmx.net for the idea) 2381 ID3v1 genres 126 through 147 (thanks jaksonØgmx.net) 2382 New table_var_dump() function in check.php 2383 (based partially on idea by jaksonØgmx.net) 2384 Seperated ID3v1 retrieval into seperate function 2385 2386 2387 1.11: [December-23-2001] James Heinrich 2388 All functions merged into file getid3.php 2389 Updated documentation to reflect new returned information 2390 2391 2392 1.10: [December-20-2001] James Heinrich 2393 * Bugfix: ID3v1 Track# was incorrectly being parsed whether it 2394 existed or not 2395 Changed calling procedure to recommend using 2396 GetAllMP3info($filename) from getmp3header.php 2397 Now includes check.php - example file 2398 € Checks to see if file is in ZIP or MP3 format 2399 (returned in ['format']) 2400 [Ed. Note: ['fileformat'] as of v1.2.1] 2401 2402 2403 1.06: [November-05-2001] James Heinrich 2404 * Bugfix: ID3v2.2.x frames weren't being parsed since they use 2405 6-byte rather than 10-byte headers as v2.3+ does 2406 (thanks spunkØmac*com for pointing that out) 2407 2408 2409 1.05: [September-06-2001] James Heinrich 2410 * Bugfix: ID3v2 was being parsed even if it didn't exist 2411 2412 2413 1.04: [July-16-2001] James Heinrich 2414 * Bugfix: typo in Extended Header section (strpad() should be 2415 str_pad()) (thanks jurroonØyahoo*com) 2416 2417 2418 1.03: [May-07-2001] James Heinrich 2419 * Bugfix: Added missing ['id3']['id3v1']['genreid'] and 2420 ['id3']['id3v1']['genre'] 2421 2422 2423 1.02: [May-05-2001] James Heinrich 2424 € Added ['getID3version'] 2425 2426 2427 1.01: [May-04-2001] James Heinrich 2428 » Added support for frame-level de-unsynchronisation (as per 2429 ID3v2.4.0 specs) in addition to ID3v2.3.x tag-level 2430 de-unsynchronisation 2431 2432 2433 1.00: [May-04-2001] James Heinrich 2434 » Initial public release 2435
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Jul 9 18:01:44 2012 | Cross-referenced by PHPXref 0.7 |