diff --git a/modules/getid3/docs/changelog.txt b/modules/getid3/docs/changelog.txt index 766fd343..797b032e 100644 --- a/modules/getid3/docs/changelog.txt +++ b/modules/getid3/docs/changelog.txt @@ -1,554 +1,2589 @@ -// +----------------------------------------------------------------------+ -// | PHP version 5 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 2002-2009 James Heinrich, Allan Hansen | -// +----------------------------------------------------------------------+ -// | This source file is subject to version 2 of the GPL license, | -// | that is bundled with this package in the file license.txt and is | -// | available through the world-wide-web at the following url: | -// | http://www.gnu.org/copyleft/gpl.html | -// +----------------------------------------------------------------------+ -// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org | -// +----------------------------------------------------------------------+ -// | Authors: James Heinrich | -// | Allan Hansen | -// +----------------------------------------------------------------------+ -// | Changelog | -// +----------------------------------------------------------------------+ +///////////////////////////////////////////////////////////////// +/// getID3() by James Heinrich // +// available at http://getid3.sourceforge.net // +// or http://www.getid3.org // +///////////////////////////////////////////////////////////////// +// // +// changelog.txt - part of getID3() // +// See readme.txt for more details // +// /// +///////////////////////////////////////////////////////////////// - - - » denotes a major feature addition/change + » denotes a major feature addition/change € denotes a change in the returned structure ! denotes a cry for help from developers * Bugfix: denotes a fixed bug +Version History +=============== -getID3() 2.x Version History -============================ +1.8.5: [2011-02-18] James Heinrich + » support >2GB files on 64-bit PHP + - note current unofficial 64-bit PHP builds for Windows + do not actually support 64-bit integers so are still + subject to normal 32-bit limits (2GB) for file functions + » PHP v5.0.5 now minimum required version. + Removed obsolte functions from getid3.lib.php: + md5_file, sha1_file, image_type_to_mime_type + » IDivX tags now parsed on AVI files + € embedded image data is returned inside [comments][picture] + in a 2-element array (data, image_mime) for all formats + * $this->overwrite_tags=false is now known to be buggy and + has been disabled for this version until a full review + of tag writing can be completed. Certainly affects ID3v2, + the other writable tag formats may or may not be broken + * getID3 constructor no longer checks for (or sets) timezone + * demo.browse.php now shows cover art as inline images + rather than dumped to separate files + * [audio][streams][x][language] now set when known + * Bugfix: RIFF-AVI "JUNK" chunks are now parsed properly, + including zero-sized ones (no more false errors) + * Bugfix: msoffice documents now return correct error message + * Bugfix: demo.browse.php now encodes data according to + current page encoding (default=UTF-8) + * Bugfix: (#1120) sometimes incorrect ID3v2 genre parsing + * Bugfix: (#1116) possibly incorrect warnings (or lack of) + for RIFFs > 2GB. + * Bugfix: (#1115) wrong RIFFtype in RIFF files + * Bugfix: (#1114) wrong MIME type may be set for Matroska + * Bugfix: (#1113) support DSS v3 files + * Bugfix: (#1111) cover art in APE tags now supported + * Bugfix: (#1091) RemoveID3v1() unitialized variables + * Bugfix: (# 504) do not set Quicktime resolution if + 'tkhd' atom is disabled + * Bugfix: (# 95) return [quicktime][controller] if known -2.0.0b6: [2010-11-25] James Heinrich - » Added CUE (cuesheet) support - new file: module.misc.cue.php - (thanks Nigel Barnes ngbarnesØhotmail*com) - » Added AA (Audible Audiobook) support - new file: module.audio.aa.php - (thanks Tobias Weber towbØgmx*net) - » Added DSS (Digital Speech Standard) support - new file: module.audio.dss.php - (thanks luke*wilkinsØdtsam*com) - € Prevent clobbering WMA artist with albumartist value; added WMA - partofset tag; added WMA tag picture data to WMA comments - (thanks ngbarnesØhotmail*com) - € RIFF.WAVE.SNDM (SoundMiner) metadata now parsed - (thanks emerrittØwbgu*bgsu*edu) - * added support for a number of new comment atom types added in - iTunes v4.0-v7.0 (thanks ngbarnesØhotmail*com) - * additional FLV details parsed, may be faster as well - (thanks ngbarnesØhotmail*com) + +1.8.4: [2011-02-03] James Heinrich + * change default encoding in ID3v2 writing to UTF16-LE+BOM + (or ISO-8859-1 where possible) for better compatability + with broken versions of Windows Media Player and iTunes + * Bugfix: [FLV] incorrect overall bitrate in some files + * Bugfix: (#1102) missing parentheses in write[.id3v2].php + * Bugfix: (#510) undefined IsValidDottedIP() in write.id3v2.php + + +1.8.3: [2011-01-18] James Heinrich + » magic_quotes_gpc must now be disabled to use getID3 + » replace all error-suppressing @$variable calls with + isset() or empty() as appropriate for some configurations + where @ does not act to suppress warnings of undefined + variables (e.g. support forum thread #798) + * remove SafeStripSlashes() and FixTextFields functions + * [quicktime] use fourcc if codec name zero-length + * [quicktime] support "iods" atom + * Bugfix: (#1099) sometimes incorrect detection of safe_mode + * Bugfix: (#1095) more robust setting of temp dir + * Bugfix: (#1093) add support for ClusterSimpleBlock to + prevent "Undefined index: track_data_offsets" errors + in Matroska files + * Bugfix: [riff] prevent errors when RIFF.WAVE.BEXT chunk + contains null date/time (thanks moysevichØgmail*com) + * Bugfix: [quicktime] prevent divide-by-zero errors if + time_to_sample_table has zero-sample entry + (thanks moysevichØgmail*com) + + +1.8.2: [2010-12-06] James Heinrich + * include startup warning for PHP < v5 + * magic_quotes_runtime must now be disabled to use getID3 + € MusicBrainz / AmpliFIND data more accessible in returned data + from Quicktime-style files (e.g. MP4/AAC) + * Bugfix: (#1079) wrong encoding might be used for ID3v2 + text data, and/or garbage data prepended before text + data; DataLengthIndicator value was being ignored + * Bugfix: (#1055) clearer warnings on non-EXIF contents in + JPEG [APP1] + * Bugfix: (#999) ID3v2 UFID data was missing + + +1.8.1: [2010-11-25] James Heinrich * replaced calls to deprecated mysql_escape_string() with mysql_real_escape_string() - * Bugfix: DSS files longer than 60 seconds had wrong playtime - * Bugfix: possible empty array encountered in APE tags - (thanks csnaitsirchØweb*de) - * Bugfix: prevent errors when parsing invalid Vorbis comments - (thanks dr*dieselØgmail*com) - * Bugfix: [asf][codec_list_object][codec_entries][x][description] - not containing expected comma-seperated values no longer aborts - (thanks larry_globusØyahoo*com) - * Bugfix: getOnlyMPEGaudioInfo() would fail if info[avdataend] - was not populated (e.g. reading over network) - (thanks vollmerØampache*org) * Bugfix: (#1072) memory limit not handled correctly if in gigabytes in php.ini (e.g. "2G") * Bugfix: (#1068) wrong encoding for Quicktime tags * Bugfix: (#1040) possible infinite loop in genre parsing + * Bugfix: (#1036) helperapps directory not resolving 8.3 + path names correctly + * Bugfix: (#1023) dbm cache extension not correctly handling + types other than "db3" * Bugfix: (#1023) mysql cache extension now base64_encodes data to make binary-safe. Existing cached data must be purged from your database cache * Bugfix: (#1007) ClosestStandardMP3Bitrate() not selecting most appropriate value + * Bugfix: (#996) inefficient and buggy ID3v1 and ID3v2 + genre parsing + * Bugfix: (#974) track number handled incorrectly in + demo.write.php + * Bugfix: (#969) tempnam() calls failing with open_basedir * Bugfix: (#955) UTF-16LE text files could be falsely identified as corrupt mp3 files * Bugfix: (#877) detect if mbstring.func_overload is set in php.ini - * Bugfix: (#871) missing { in write.id3v2.php * Bugfix: (#858) PHP safe_mode setting in php.ini incorrectly handled if set to "Off" * Bugfix: (#838) prevent warnings with assorted unhandled Quicktime atoms -2.0.0b5: [2009-03-08] James Heinrich +1.8.0: [2010-11-23] James Heinrich + » Changes required for PHP v5.3+ compatability, including: + - change ereg* functions to preg_* equivalents + - declare functions static as needed + note: users of PHP v4.x may need to stay with getID3 v1.7.x + » Added CUE (cuesheet) support + new file: module.misc.cue.php + (thanks Nigel Barnes ngbarnesØhotmail*com) + » Added XMP (Adobe Extensible Metadata Platform) support + currently used with module.graphic.jpg.php + new file: module.tag.xmp.php + (thanks Nigel Barnes ngbarnesØhotmail*com) + € [jpg][exif][GPS][computed] now exists when possible with + calculated values (decimal latitude, longitude, altitude, time) + € Prevent clobbering WMA artist with albumartist value; added WMA + partofset tag; added WMA tag picture data to WMA comments + (thanks ngbarnesØhotmail*com) + € RIFF.WAVE.SNDM (SoundMiner) metadata now parsed + (thanks emerrittØwbgu*bgsu*edu) + € FLAC embedded pictures now return [data_length] key + (thanks darrenburnhillØhotmail*com) + * added support for a number of new comment atom types added in + iTunes v4.0-v7.0 (thanks ngbarnesØhotmail*com) + * demo.browse.php now shows video resolution and framerate (if no + artist or title info present) + * additional FLV details parsed, may be faster as well + (thanks ngbarnesØhotmail*com) + * Bugfix: DSS files longer than 60 seconds had wrong playtime + * Bugfix: possible empty array encountered in APE tags + (thanks csnaitsirchØweb*de) + * Bugfix: prevent fatal error when calling BigEndian2Int() on + zero-length string (thanks taylor*fausakØgmail*com) + * Bugfix: prevent errors when parsing invalid Vorbis comments + (thanks dr*dieselØgmail*com) + * Bugfix: files could not be analyzed from Windows shares + (e.g. \\SERVER\Directory\Filename.mp3) + * Bugfix: RAR file opening should use 'filenamepath' + (thanks adrien*gibratØgmail*com) + * Bugfix: [asf][codec_list_object][codec_entries][x][description] + not containing expected comma-seperated values no longer aborts + (thanks larry_globusØyahoo*com) + * Bugfix: [id3v2] UFID was not returning data + (thanks joostØdecock*org) + +1.7.9: [2009-03-08] James Heinrich + » Added DSS (Digital Speech Standard) support + new file: module.audio.dss.php + (thanks luke*wilkinsØdtsam*com) » Added MPC (Musepack) SV8 support - new file: module.audio.mpc8.php - new file: module.audio.mpc7.php (formerly module.audio.mpc.php) + (thanks WaldoMonster) + € some MPC [header] keys renamed to be the same between SV7/SV8 + € start aligning demos CSS styling with v2.x styles + new file: demos/getid3.css + € JPEG now returns parsed IPTC tags in [iptc] + € getid3_lib::GetDataImageSize now requires $imageinfo parameter + € better support for Matroska files with AC3/DTS/MP3/OGG audio + (support still lacking for AAC) + € standardize ID3v2 TCMP key to 'part_of_a_set' between reading + and writing (thanks aaron_stormØyahoo*com) + € added ID3v2 keys 'TCMP','TCP' to for writing iTunes-style tags + (thanks aaron_stormØyahoo*com) + € back-ported PICTURE tag handling in FLAC tags (thanks WaldoMonster) € added alternate method to get [video][frame_rate] from QuickTime + * added partial support for "TCMP"/"TCP" ID3v2 frames (iTunes + non-standard part-of-a-compilation tag) + (thanks aaron_stormØyahoo*com) + * slightly improved scanning through FLV files speed + (thanks franki) + * faster Matroska scanning by stopping at cluster chunks once + needed header chunks are found (much faster for large files) * added workaround for broken tagging programs that miss terminating null byte for numeric ID3v2.4 genres (thanks yam655Øgmail*com) - * ported additional calculations code from v1.7.8 (calculating bitrate - from playtime if not already explicitly set, etc) - * Bugfix: ID3v2 Txxx frames being returned with last character missing - (thanks igorØwebta*net) + * Bugfix: MultiByteCharString2HTML() did not escape common HTML + special characters like & and ? + * Bugfix: cleaned up some malformed HTML errors in demo.browse.php + * Bugfix: under Windows files >2GB might not be processed due to + "dir" command not finding file with double directory slashes + * Bugfix: "MODule (assorted sub-formats)" was falsely matching + some random files (e.g. JPEGs) (thanks qwertywin) + * Bugfix: suppress PHP_notice on failed SWF-compressed + decompression failure (thanks mkron) -2.0.0b4: [2007-01-12] Allan Hansen +1.7.8b3: [2008-07-13] James Heinrich + » Experimental partial support for files > 2GB (gets filesize + from shell call to "dir" or "ls", parse files with PHP only + up to 2GB limit). See readme.txt for details on what formats + work properly and other limitations + » Initial support for Matroska. Has only been tested with a + limited number of sample files, please report any bugs + » Experimental support for PHP-RAR reading. Known buggy, disabled + by default, enable with care + € getid3_lib::CastAsInt() now returns ints up to 2^31 (not 2^30) + € Quicktime: [video] now returns [frame_rate] and [fourcc] for MP4 + video files + * MP3: headerless VBR files now only have up to 10 blocks of 5000 + frames each scanned by default and bitrate extrapolated from that + distribution for speed (thanks glau*stuffØridiculousprods*com) + * Quicktime: support "co64" atom + * SWF: lower memory use when compressed SWF files processed + (thanks doughammondØblueyonder*co*uk) + * Bugfix: FLV height and width was calculated incorrectly + (thanks moysevichØgmail*com) + * Bugfix: FLV GETID3_FLV_TAG_META parsed incorrectly + (thanks moysevichØgmail*com) + * Bugfix: Quicktime: 'tkhd' matrix_v and matrix_d were switched + (thanks rjjmoroØhotmail*com) + * Bugfix: Quicktime: frame_rate was often incorrect for MP4 video + * Bugfix: getid3_lib::CastAsInt returned -2147483648 when passed + 2147483648 (0x80000000) - GENERAL + +1.7.8b2: [2007-10-15] James Heinrich, Allan Hansen + * Video bitrate now calculated even if not explicitly stated in + file metadata, but if overall and audio bitrates are known + * Bugfix: 'comments_html' missing last letter in id3v2 tags. + * Bugfix: module objects (e.g. getid3_riff) that are instantiated + in other modules are explicitly disposed once no longer needed. + * Bugfix: some AVI files were not returning audio information + because "strh" chunk was not being read in + * Bugfix: asf [audio][][dataformat] should be set + to "wma" but wasn't + * Bugfix: [mpeg][audio][bitrate_mode] should always be one of + ("cbr", "vbr", "abr") but wasn't for some values in + LAMEvbrMethodLookup() + * Bugfix: MP3 audio in AVI files could show "cbr" instead of + correct audio bitrate_mode, and audio bitrate could be slightly + incorrect if multiple files were scanned in a loop (scanning + single files produced correct values). + * Bugfix: remove [audio/video][bitrate] key if falsely set to zero + * Bugfix: PlaytimeString returned non-matching value for negative + playtimes (which shouldn't happen either, but now they're at + least shown correctly, if they happen due to other bugs) + * Bugfix: Several ASF header values are invalid if the broadcast + flag is set, getID3() now calculates these values in other + ways if the broadcast flag is set (thanks fletchØpobox*com) + * Bugfix: lyrics3-flags-lyrics field was always false, and there + never was a lyrics3-flags-timestamp field present even though + the lyrics3-raw-IND field consisted of "10" (lyrics present, + timestamp not present). (thanks i*f*schulzØweb*de) + * Bugfix: TAR.GZ files produce PHP errors when + option_gzip_parse_contents == true in module.archive.gzip.php + (thanks alan*harderØsun*com) + + +1.7.8b1: [2007-01-08] Allan Hansen » Major update to readme.txt - » Added new section sample apps - » Added well-written sample application "morg". - See sample_apps/morg/screen_shots for more - € option_tags_process now generates root key 'comments' with merged - values from 'tags'. - € Removed option_tags_html. HTML entities is a thing of the past. - Use UTF-8 encoded pages instead. Saves bandwidth and is much easier. - * Bugfix: PHP_NOTICE issue in BigEndian2Float(). - » Tag writing support: ID3v1 - » Tag writing support: APEtag - » Tag writing support: FLAC - » Tag writing support: Ogg Vorbis - » Tag writing support: Lyrics3 - » SVG file detection (no parsing) - » PAR2 file detection (no parsing) - » Got rid of windowed and option_helperapps_dir. Helper apps must be - somewhere in the path, e.g. c:\windows\system32 or /usr/bin - - ASF MODULE: - * Bugfix: Wrong mime type (video/x-ms-wma instead of video/x-ms-wmv) - for certain FourCCs. - * Bugfix: Padding offset bug. - - DATA_HASH MODULE: - € copy md5_data_source to md5_data if option set to true - - DTS MODULE: - » New module (module.audio.dts.php) - - FLV MODULE: - * Bugfix: DivByZero on zero length FLV files. - * Bugfix: PHP_NOTICE one some files. - - ID3v1 MODULE: - € Removed: Padding check. - - ID3v2 MODULE: - * Bugfix: PHP_NOTICE issues with broken ID3v2 tag/garbage. - * Bugfix: UTF-8/16 encoded frames terminated by \x00. - * Bugfix: ID3v2 LINK frames iconv error. - * Bugfix: Padding length calculated incorrectly. - * Bugfix: ID3v2.3 extended headers non-conformance. - - LYRICS3 MODULE - * Bugfix: Minor issues with lyrics3 (avoid PHP_NOTICE). - - PNG MODULE: - * Bugfix: Module broken in regards to gIFg and gIFx chunks. - - MIDI MODULE + » PHP 4.2.0 required + » Tagwriter requires metaflac 1.1.1+ in order to write FLAC tags. + » Removed broken and non-fixable tagwriting module for real format. + ! Developers please help fix the above module: + http://www.getid3.org/phpBB3/viewtopic.php?t=677 + » Avoided security issues with demo.browse.php, demo.write.php and + demo.mysql.php. These demos are now disabled by default and has + to be enabled in the source. + * Bugfix: id3v2 genre broken since 1.7.7. + » Added DTS module (module.audio.dts.php) + € ASF/WMV files now return largest video stream dimensions in + [video][resolution_x] and [video][resolution_y] * Bugfix: Minor issues with midi module (avoid PHP_NOTICE). - - MP3 MODULE: - * Bugfix: Removed whitespace after ?> + * Bugfix: Minor issues with lyrics3 (avoid PHP_NOTICE). + * Bugfix: PHP_NOTICE issues in MultiByteCharString2HTML() + * Bugfix: PHP_NOTICE issue in BigEndian2Float() + * Bugfix: fread() zero bytes issue in real module. + * Bugfix: ASF module returned mime type video/x-ms-wma instead of + video/x-ms-wmv for certain FourCCs. + * Bugfix: PHP_NOTICE issues with broken ID3v2 tag/garbage. + * Bugfix: PNG module broken in regards to gIFg and gIFx chunks. + » Removed detection of short filenames 8dot3 under windows, as + it only worked for English versions of windows and has other + problems. * Bugfix: Some CBR MP3 files detected as VBR with plenty of warnings. - * Bugfix: PHP_NOTICE issues. - - MPC MODULE: - € Mime type returned: audio/x-musepack - - QUICKTIME MODULE: - * Bugfix: TYPO in variable, resulting in unknown errors. - * Bugfix: Incorrect frame rate returned. - - REAL MODULE: - * Bugfix: fread() zero bytes issue. - - RIFF MODULE: + * Bugfix: PHP_NOTICE issues in MP3 module. + * Bugfix: Quicktime returned incorrect frame rate. + * Bugfix: DivByZero on zero length FLV files. + * Bugfix: PHP_NOTICE one some FLV files. + * Bugfix: ID3v2 UTF-8/16 encoded frames terminated by \x00 + * Bugfix: ID3v2 LINK frames iconv error. + * Bugfix: ID3v2 padding length calculated incorrectly. + * Bugfix: ID3v2.3 extended headers non-conformance + » SVG file detection. + » Added SVG user module (user_modules/module.graphic.svg.php). + Thanks to Roan Horning. + » PAR2 file detection (no parsing) * Bugfix: Wave files being detected as MP3. - € Zero sized chunk invokes warning instead of error. - - SHORTEN MODULE: - * Bugfix: Not working for wav files with fmt chunks <> 16 bytes. - - XIPH MODULE: - » replaygain_reference_loudness from FLAC 1.1.3 moved from comments - to ['replay_gain']['reference_volume']. - » Supporting FLAC 1.1.3 PICTURE block. + * Bugfix: ASF padding offset bug. + * Bugfix: Shorten module not working for wav files with fmt + chunks <> 16 bytes. + € RIFF: Zero sized chunk invokes warning instead of error. € FLAC: Removed some ['raw'] keys. + € MPC: Mime type returned: audio/x-musepack - -2.0.0b3: [2006-06-25] Allan Hansen - - AAC_ADTS MODULE - * Bugfix: Static bitrate cache wrong result when parsing several files - - ASF MODULE +1.7.7: [2006-06-25] Allan Hansen + * Bugfix: AAC static bitrate cache wrong result when parsing + several files. * Bugfix: Do not return NULL video bitrate for ASF v3. - * Bugfix: ['codec'] key warning in module.audio-video.asf.php from 1.7.6, - * Bugfix: audio & video bitrates sometimes wrong in ASF files from 1.7.6, - € ASF lyrics now returned under [comments][lyrics] from 1.7.5, - - BMP MODULE - * Bugfix: Undocumented bugfix between 1.7.3 and 1.7.6, - - DATA_HASH MODULE - * Bugfix: Filenames not escaped with escapeshellarg() under UNIX. + * Bugfix: getid3_lib::GetImageSize() broken => JPG module broken. + * Bugfix: Encoder options should now be returned with correct + "--alt-preset n" / "--alt-preset cbr n" when scanning more files. + * Bugfix: Shorten module not escapeshellarg() filenames (UNIX only). + * Bugfix: Filenames not escapeshellarg() for md5_data and + sha1_data (UNIX only). * Bugfix: UNIX: head and tail called with -cNNN instead of "-c NNN". - - FLV MODULE - » No longer reads entire file into memory. - - ID3v1 MODULE - € Put back id3v1 padding check, since it exists in 1.7.6. - - ID3v2 MODULE - * Bugfix: PHP notices on bad ID3v2 frames from 1.7.6. - * Bugfix: 'url_source' typo in module.tag.id3v2.php from 1.7.3. - € ID3v2 "TDRC" frame now used as "year" in comments if TYER + » Added detection support for PDF and MS Office documents + (*.doc, *.xls, *.pps, etc) (thanks zeromassmediaØgmail*com) + € Bugfix: ID3v2 "TDRC" frame now used as "year" in comments if TYER unavailable (TYER is deprecated in ID3v2.4) - € Bugfix: gmmktime() instead of mktime(). - - ISO MODULE - € Using gmmktime() instead of mktime(). - - GZIP MODULE - ! Module is a memory hog. Reads entire file into memory. It also - gzdeflates() it to memory. Will use lots of memory on huge files. - Please someone rewrite it to work with filepointers and seeking. - » info['gzip']['files'] removed. Contains redundant information only. - » Replaced ['tar'] key with ['parsed_content']. Module can now parse - anything that getID3() can parse - not just tar files. - - JPEG MODULE - * Bugfix: Error when php exif support enabled. - - LYRICS MODULE - € Comments are no longer trimmed. - - QUICKTIME MODULE - * Bugfix: incorrect dimensions from disabled Quicktime tracks from 1.7.6, - € Added ['quicktime']['hinting'] key (boolean) from 1.7.4, - * Bugfix: Quicktime 'mvhd' matrix values were wrong from 1.7.3, - - MIDI MODULE - * Bugfix: Fixed bug that reported wrong playing time on some files. - - MP3 MODULE - » Module fully working. - » Memory caches are reset when scanning new file. Might make analyse - slightly slower, but will save lots of memory. - » Removed unrecommended bruteforce code. - * Bugfix: Encoder options should now return proper "--alt-preset n" / - "--alt-preset cbr n" when scanning more files. + (thanks matthiasØpanczyk*org) + € Removed GETID3_OS_DIRSLASH, replaced with DIRECTORY_SEPARATOR * Bugfix: added LAME preset guessing for presets 410,420,440,490 (thanks adminØlogbud*com) - - RIFF MODULE - € No longer returns zero bits_per_sample for multiple formats. - * Bugfix: Missing 'lossless' key in RIFF-WAV from 1.7.4. - € Using gmmktime() instead of mktime(). - - SHORTEN MODULE - * Bugfix: Filenames not escaped with escapeshellarg() under UNIX. - - TAR MODULE - » Module rewritten to work with filepointer only. Makes parsing a lot - faster (will fseek() past data). Also saves a lot of memory, expecially - with large files. - » Added warning for non ASCII filenames, which breaks specification. - » info['tar']['files'] removed. Contains redundant information only. Also - causes problems for non ASCII tar files, as filenames are used as keys - in PHP arrays. - - XIPH MODULE + * Bugfix: Added escapeshellarg() call in getid3_lib::hash_data + (thanks towbØgmx*net) + » TAR module no longer reads entire file into memory + » FLV module no longer reads entire file into memory + * Bugfix: added LAME preset guessing for presets 410,420,440,490 + (thanks adminØlogbud*com) + * Bugfix: Added escapeshellarg() call in getid3_lib::hash_data + (thanks towbØgmx*net) * Bugfix: Error message when padding in FLAC files were used up. - - ZIP MODULE - € Using gmmktime() instead of mktime(). - - ICONV_REPLACEMENT MODULE - * Bugfix: Major UTF-8 to UTF-16/ISO-8859-1 conversion bug (empty string - returned) when iconv() not available - from 1.7.4. - * Bugfix: Other major bugfixes that broke the module. - - demo.joinmp3.php - Demo removed - out of getID3()'s scope. - - PDF files can now be detected, but not parsed/analyzed. - MSOffice files can now be detected, but not parsed/analyzed. - - -2.0.0b2: [2004-11-01] Allan Hansen - - GENERAL - * Bugfixes: Analyzed 3,000 files and compared result with 1.7.2 - several - minor bugs were fixed. Output of 2.0.0 should match 1.7.2 reasonable well. - * Bugfix: fail_id3 and fail_ape code never executed. - Wavpack4 support - Quicktime/MP3-in-MP4, Apple Lossless support - » New encoding_id3v2 option/hack for broken ID3v2 tags - € Tags are no longer trim()ed. - € Some ['bits_per_sample'] == 0 removed - » New option_analyze - disable to detect format only. - » New option_accurate_results - disable to greatly speed up parsing of - AAC/ADTS, headerless MP3/MP2 VBR, midi (later), possible more in future. - Warnings issued when disabled and accuracy affected! - - AAC/ADTS - » Memory caches destroyed after analyze() to free up memory. - - LA MODULE - * Bugfix: RIFF tags now parsed properly - - OPTIMFROG MODULE - * Bugfix: RIFF tags now parsed properly - - WAVPACK MODULE - * Bugfix: RIFF trailer now parsed properly - - QUICKTIME MODULE - € option_extra_info determines whether atom_data is returned - € Removed $ParseAllPossibleAtoms option. We should only return useful data. - zlib support in PHP optional reqirement - * Bugfix: New iTunes crashes PHP - temp fix - no tags on those files. - - RIFF MODULE - * Bugfix: Wavpack3 extra fields now parsed properly. - € RIFF tags in Litewave files now parsed properly - - BONK MODULE - * Bugfix: ['bonk']['ID3']['valid'] now returns bool instead of object - - NSV MODULE - * Bugfix: PCM part ignored - - APETAG MODULE - * Bugfix: APEtag 1.0 broken - - ASF MODULE - € Embedded ID3v2 tags processes again - supported by Windows Media Player. - - DEMOS - » demo.browse.php scans directories faster with inaccurate results. - » demo.browse.php now uses javascript alert to show longer warnings etc - instead of tool tips. - » demo.browse.php now shows embedded covers just like the 1.7.x demo. - » demo.browse.dhtml.php - DHTML version of the browser. Has progressive - display in MSIE - but quite slow when scanning LOTS of files. - » New demo.mime_only.php for returning mime type only. - » Search example in demo.mysql.php - - -2.0.0b1: [2004-08-23] Allan Hansen - - » Major memory savings. 1.7.1 use 25% more memory under PHP 5.0.0 than - PHP 4.3.7. 2.0.0b1 memory usage is comparable to 1.7.1 under PHP 4.3.7. - See Memory.xls for details (will not be included in 2.0.0 final). - Loading all modules requires 4,277 kb of memory (4,171 with iconv() - support in PHP. Some of the modules require more memory while scanning, - as they cache the results - MP3 and AAC/ADTS in particular. - - » New internal testing method. Output of 2.0.0 matches that of 1.7.1 - exactly - except those places where we deliberately changed something. - If something is changed it is because we did not have a test file - to show it. - - » New extras directory. - This contains multiple usefull code snips that really does not - belong to the main getID3() codebase - i.e. stuff that the user most - likely can/will do differently. - - » Deleted getid3_lib.php - - Some common functions moved to getid3.php - getid3_lib declared - there. - - Replaygain function moved to getid3.php - new class - geti3_replaygain. - - iconv() replacement function moved to new lib module. - - md5/sha1 data hash function moved to new lib module. - - Some function moved to the files that use them. - - CopyTagsToComments() moved to extras dir. - - EmbeddedLookup() gone - PHP5 use way more memory that way. - - » magic_quotes_runtime must be disabled before running getID3(). - If you use them, use set_magic_quotes_runtime(0) and - set_magic_quotes_runtime(1) around your getID3() block. - Older versions turned them on and off automatically. This would - require a lot extra code, since they needed being restored before - every first level throw. - - * Bugfix: Fixed multiple bugs in the caching extentions . - - Optimized most modules using new getid3_ReadSequence() - - Checked all(most) code using error_reporting (E_STRICT | E_ALL) - - € Removed all dead modules: EXE, RAR, Bink, Matroska, MOD*. - € Kept magic bytes - getid3 will detect them and do nothing and return - warning instead of error. - - € Disabled quicktime and mpeg modules as they depend on mp3- - - Reformatted and updated dependencies.txt - - - GETID3 MAIN - € getid3 option_tags_html now defaults to false. - € getid3 option_max_2gb_check now defaults to false. - € New getid3 option_tags_images defaults to false. Scan tags for binary - image data - ID3v2 and vorbiscomments only. Possible apetag later. - - - JPEG MODULE - € Renamed module from jpg to jpeg. - € Changed mime type to correct image/jpeg. - € Added optional exif depency to depencies.txt for jpeg files. - - - PNG MODULE - € Made png zlib dependecy optional. - - - BMP MODULE - » Removed unused and unneeded PlotBMP() in bmp module. - Removed extract_palette and extract_data code - - This does not belong in getid3. We should analyze files, not process - them. If the user wants to display bmp files to the browser she can - convert them with ImageMagick or something similar. She will - probably have it installed already to resize user uploaded images. - - - PCD MODULE - » Removed $ExtractData from pcd module - same reason as BMP. - - - SWF MODULE - € Added zlib dependecy REQUIRED for swf. - - - ID3v1 MODULE - € Removed id3v1 padding check - who cares? - - also removed in lyrics3 - if needed - it needs to be done differently - - no access to warnings and no sorting! - - - ID3v2 MODULE - € Made id3v2 zlib dependecy optional. - € id3v2 - images - changed 'image_mime' to actual mime type. - - - AAC MODULE(s) - » Split aac module in two - aac_adif and aac_adts. - This saves memory if user only have files of one type (very likely). - Replaced getid3_lib::Bin2Dec() with bindec() in aac modules - speed. - - - AC3 MODULE - Added ac3 optional dependency to dependencies.txt. - € Changed riff module dependency on mp3 to optional. - Changed wawpack references in riff module to wavpack3. - * Bugfix: RIFFparseWavPackHeader() needs 28 bytes, not 22. - - - ASF MODULE - » Removed id3v1 dependency - » Removed id3v2 dependency - € ASF genres are no longer case adjustet to match standard ID3v1 ones. - € Embedded ID3v2 tags no longer processes. Not part of the ASF spec. - € Changed warning at line 71 to error. - » Removed a lot of unneeded conversions between Bytestring and GUID - » Changed the constants from bytestring to GUID - * Bugfix: Fixed incorrect warning messages on - {4B1ACBE3-100B-11D0-A39B-00A0C90348F6} - {4CFEDB20-75F6-11CF-9C0F-00A0C90349CB} - € Removed objectid, fileid, reserved_1_id and reserved where 'same'_guid - exists. - - - MP3 MODULE - € MARKED MP3 MODULE BROKEN - Removed echoerrors debugcode in mp3 module. - Removed bruteforce code in mp3 module - never executed in 1.7. - Removed $scan_as_cbr - not used. - - - MPC MODULE(s) - » Split mpc module in two - SV7 in "mpc" and SV4-6 in mpc_old. - This saves memory if user only have files of one type (very likely). - - - OGG, FLAC MODULES - » Merged interdependant modules ogg and flac into new module xiph. - € Updated FLACapplicationIDLookup() with 2 new entries. - - - REAL MODULE - € Removed 'unknown' keys. - - - SHORTEN MODULE - » Improved UNIX shorten binary detection. Scanning `which shorten`, - /usr/bin, /usr/local/bin and checking is_executable() - - - ISO MODULE - € Removed unused_ indexes in iso modules - they are afterall not used. - - - DEMOS - » Created new index.php in demos/ explaining what the different demos - does. - - » Rewrote demo.browse.php completely. - - Using public domain HTML abstraction library by Allan Hansen. - - Removed security breach - able to browse any parent directory . - - A $root_path must be set before browsing. - - Screen width option. - - Compressed filename column using title=. - - Removed filesize column - not really that interesting. - - Removed md5data column. - - Removed total at the bottom - the user can probably figure out - how to implement this himself. - - Added Audio column: sample_rate/bits_per_sample/channels columns. - - Added scan_time columns - how long it took getid3 to process the - file. - - Compressed artist, title and warning column using tool_tips. - - Removed delete feature - possible security risk. - - Repeating file header every 20 rows. - - Added audio format/video format to format column. - - Listing supported php modules in footer. - - New colour scheme. - - » Rewrote demo.mysql.php completely. - - Using multiple tables instead of just one. No string is stored - twice. Searching tags should be a lot faster for large databases. - - Multiple artists, titles, genres, etc per file supported. - - Using public domain HTML abstraction library by Allan Hansen. - - Using public domain MySQL abstraction library by Allan Hansen. - - Scanning limited to $audio_path - security. - - Included sample data that can be imported and browsed. - - » Rewrote demo.basic.php - » Removed demo.simple.php - basic should be enough - - » Removed demo.joinmp3.php - this advanced demo should go in the extras - module IF/WHEN the mp3 module is running again. - - € Updated demo.audioinfo.class - minor changes. - - - MISC CODING SPECIFIC - Partial new coding style - some is easily changed with Replace In Files - - New file header - PEAR compatible - - Indentation with four spaces instead of tab - PEAR compatible - - array() changed to as array () - as suggested by PEAR standard - - All(most) function names in MixedCase - - Variables in $my_variable lowercase/underscores - - (bool) $var changed to (bool)$var - - A few "} else {" changed to "else {" to make room for easier - readable comments - - Removed all DivByZero checks. The plan was to catch them, but php - errors and warnings are not exceptions... Something needs to be - done here. + * Bugfix: Shorten module not working under windows. + € Bugfix: gmmktime() instead of mktime(). + € Using gmmktime() instead of mktime() in ISO, ZIP, PNG and RIFF + modules to avoid E_STRICT notices with PHP5.1+. + * Bugfix: ['comments_html'] and ['comments'] contains different + value when having multiple tags (one of them ID3v1) and the + long field names. + +1.7.6: [2006-03-12] James Heinrich + * Rewrote getid3_lib::GetDataImageSize() to use GetImageSize() + instead of using code by filØrezox*com + * Bugfix: incorrect dimensions from disabled Quicktime tracks + (thanks m-1Øgmx*net) + * Bugfix: ['codec'] key warning in module.audio-video.asf.php + (thanks niel*archerØblueyonder*co*uk) + * Bugfix: undefined array in write.php + (thanks drewishØkatherinehouse*com) + * Bugfix: DeleteAPEtag() incorrectly failing when no tag present + (thanks drewishØkatherinehouse*com) + * Bugfix: ID3v2 writing frames with URL fields failing when URL + is not in ISO-8859-1 (thanks drewishØkatherinehouse*com) + * Bugfix: PHP notices on bad ID3v2 frames + (thanks cw264701Øohiou*edu) + * Bugfix: audio & video bitrates sometimes wrong in ASF files + (thanks kris_kauperØexcite*com) + +1.7.5: [2005-12-29] James Heinrich + » Added FLV (FLash Video) support -- new file: + module.audio-video.flv.php + (thanks Seth Kaufman for code) + » Real tags can now be written (previous Real tag writing + code was not supposed to be in public releases, as it + was not complete) + » GETID3_HELPERAPPSDIR now autodetected under Windows + € ASF lyrics now returned under [comments][lyrics] + * Bugfix: removed "--lowpass xxxxx" info from guessed + LAME presets when source frequency <= 32kHz + * Bugfix: ID3v2 extended header errors + * Bugfix: missing ob_end_clean() in write.id3v2.php + (thanks rasherØgmail*com) + +1.7.4: [2005-05-04] James Heinrich + € Added ['quicktime']['hinting'] key (boolean) + (thanks jonØwebignition*net) + * Bugfix: major UTF-8 to UTF-16/ISO-8859-1 conversion + bug (empty string returned) when using iconv_fallback + (thanks chrisØfmgp*com) + * Bugfix: Missing 'lossless' key in RIFF-WAV + (thanks bobbfwedØcomcast*net) + +1.7.3: [2005-04-22] James Heinrich + » Added TAR support -- new file: module.archive.tar.php + (thanks Mike Mozolin for code!) + » Added GZIP support -- new file: module.archive.gzip.php + (thanks Mike Mozolin for code!) + * Bugfix: demo.browse.php now displays embedded images + internally instead of passing local filename as IMG + SRC (should allow demo.browse.php to correctly show + embedded images over a network) + (thanks patpowermanØhotmail*com) + * Bugfix: minor UTF-8 display issues in demo.browse.php + * Bugfix: demo.browse.php now works even if the evil + setting magic_quotes_gpc is turned on + (thanks patpowermanØhotmail*com) + * Bugfix: incorrect MIDI playtime for some files + (thanks joelØoneporpoise*com) + * Bugfix: 'url_source' typo in module.tag.id3v2.php + (thanks richardlynchØusers*sourceforge*net) + * Bugfix: Quicktime 'mvhd' matrix values were wrong + (thanks webØbobbymac*net) + € ID3v2 now returns xx/yy for ['track'] (if + available), with xx in ['tracknum'] and yy in + ['totaltracks']. Previously ['tracknum'] was not + available and ['track'] had only xx. + Bugfixes and improvements to /demo/demo.mysql.php: + - remix/version parsed from tags and stored in + database, can be used when renaming files + - track number can be used for renaming files + + +1.7.2: [2004-10-18] Allan Hansen + » Added support for WavPack v4.0+ + (thanks ahØartemis*dk) + » Removed code for parsing EXE files + (thanks ahØartemis*dk) + Removed file: module.misc.exe.php + * Bugfix: Large ID3v2 tags inside ASF not parsed + properly under PHP5. + * Bugfix: Certain Wavpack3 files failed under PHP5 due + to new undocumented tmpfile() limit (same problem as + above). + * Bugfix: New iTunes crashes PHP - temp fix - no tags + on those files. + * Bugfix: ['nsv']['NSVs']['framerate_index'] might be + wrong (thanks ahØartemis*dk) + * Bugfix: transparent color was wrong from truecolor + PNG (thanks ahØartemis*dk) + * Bugfix: Changed MPC SV7 header size from 30 to 28, + this will change hash values for MPC files + (thanks ahØartemis*dk) + * Bugfix: Changed MPC SV4-6 header size from 28 to 8, + this will change hash values for MPC files + (thanks ahØartemis*dk) + € Trim/unset wavpack encoder_options to match 2.0.0b2 + output. + € Commented-out unknown/unused values in NSV and ISO + modules (thanks ahØartemis*dk) + + +1.7.1b1: [July-26-2004] James Heinrich + » Added support for Apple Lossless Audio Codec + » Added support for RealAudio Lossless + » Added support for TTA v3 + » Added support for TIFF + New file: /getid3/module.graphic.tiff.php + » Modified iconv_fallback to work with UTF-8, UTF-16, UTF-16LE, + UTF-16BE and ISO-8859-1 even if iconv() and/or XML support is + not available. This means that iconv() is no longer required + for most users of getID3() + (thanks Jeremia, khleeØbitpass*com) + » Added support for Monkey's Audio v3.98+ (thanks ahØartemis*dk) + » Included new demo showing most-basic getID3() usage + New file: /demos/demo.basic.php + * Bugfix: LAME3.94+ presets cached incorrectly if multiple files + are scanned in one batch and first file is LAME3.93 or earlier + (thanks enoyandØyahoo*com) + * Bugfix: Added warning if compressed ID3v2 frame decompression + fails. (thanks Mike Billings) + * Bugfix: Assorted small fixes to ensure compatability with PHP5 + * Bugfix: ID3v1 genre "Blues" could not be written + (thanks Jeremia) + * Bugfix: ['bitrate_mode'] typo in module.audio-video.real.php + (thanks asukakenjiØusers*sourceforge*net) + * Bugfix: ['zip']['files'] is now populated with filenames even + if End Of Central Directory couldn't be parsed + * Bugfix: ['audio']['lossless'] was incorrect for FLAC + (thanks WaldoMonster) + * Bugfix: MD5 File was incorrect in directory browse mode for + /demo/getid3.browse.php + * Bugfix: PHP v5 compatability changes (float array keys, fread() + calls with zero data length) + (thanks getid3Øjsc*pp*ru) + * Bugfix: was dying if on compressed ID3v2 frames if + gzuncompress() function was unavailable + * Bugfix: ['vqf']['COMM'] was always empty + * Bugfix: MIDI playtime was missing for single-track MIDI files + * Bugfix: removed � characters from ['comments_html'] + (thanks p*quaedackersØplanet*nl) + * Bugfix: improved MIDI playtime accuracy + (thanks joelØoneporpoise*com) + * Bugfix: BMP subtypes 4 and 5 were not being identified + * Bugfix: frame_rate in AVI was incorrectly truncated to integer + * Bugfix: FLAC cuesheet track index was incorrect + (thanks tetsuo*yokozukaØoperamail*com) + € ['quicktime']['display_scale'] now contains the playback scale + multiplier for QuickTime movies - a movie set to playback at + double-size will have "2" here. Other values are "1" and "0.5" + € Added LAME preset guessing for --preset medium with v3.90.3 + (thanks phwipØfish*co*uk) + € Added $encoding_id3v1 to allow for ID3v1 encodings other than + the standard ISO-8859-1 + € Default AVI video bitrate_mode is now 'vbr' + (thanks eltoderØpisem*net) + Force getID3() to abort if Shorten files have ID3 or APE tags + (thanks ahØartemis*dk) + Editable textbox for parent directory in demo.browse.php + (thanks eltoderØpisem*net) + + +1.7.0-hotfix [2004-03-17] Allan Hansen + (hotfix version released by Allan Hansen) + * Bugfix: PHP 4.1.x compatiblity - fgets($fp) => fgets($fp, 1024) + * Bugfix: Added default charset to TextEncodingNameLookup() in + module.tag.id3v2.php + Ø Removed option_no_iconv + iconv() support is only a requirement for WMA/WMW/ASF, and for + destination encodings other than ISO-8859-1 and UTF-8, iconv is + not needed otherwise. New 'iconv_req' in GetFileFormatArray() + only set for WMA/WMV/ASF. analyze() now refuses to analyse + WMA/ASF file if iconv is not present. + iconv_fallback() only dies on internal errors not missing iconv() + + +1.7.0: [January-19-2004] James Heinrich + » Added support for RIFF/CDXA files (MPEG video in RIFF container + format (thanks chrisØdigitekdesign*com) + » Added support for TTA v2 (thanks ahØartemis*dk) + € ID3v2 unsynchronisation scheme disabled by default because most + tag-reading programs cannot read unsynchronised tags. Can be + overridden by setting id3v2_use_unsynchronisation to true. + (thanks mikeØdelusion*org) + € extention.*.php renamed to extension.*.php + (thanks tp62Øcornell*edu) + € /demo/demo.check.php renamed to /demo/demo.browse.php + € Added id3v2_paddedlength configuration parameter to WriteTags() + and renamed tag_language to id3v2_tag_language + € MPEG audio layers are now represented as 1, 2 or 3 instead of + 'I', 'II', or 'III' + € Added [audio][wformattag] and [video][fourcc] for WAV and AVI + € Added [audio][streams] which contains one entry for each audio + stream present in the file (usually only one). The data is a + copy of what is usually found in [audio]. If there are multiple + audio streams then [audio] will contain a sum of the bitrates + of all audio streams, and the data format of the first stream + (if streams are of different data types) + € Added BruteForce mode to mp3 scanning. Disabled by default as + it is extremely slow and only files that are broken enough to + not really play will gain any benefit from this. + € Suppress '--resample xxxxx' appended to encoder options for mp3 + with low-quality presets for default sampling frequencies + € Enhanced LAME preset guessing for pre-3.93 with a better lookup + table, --resample/--lowpass guessing (thanks phwipØfish*co*uk) + € RIFF files with non-MP3 contents no longer have + [audio][encoder_options] set + € Added [audio][encoder_options] to audio formats where possible + (including LiteWave, LPAC, OptimFROG, TTA) + € Moved [quantization] and [max_prediction_order] from + [lpac][flags] to just [lpac] + € WavPack flags are now parsed into [wavpack][flags] + * Bugfix: APEtags with ReplayGain information stored with comma- + seperated decimal values (ie "0,95" instead of "0.95") were + giving wrong peak and gain values + * Bugfix: Filesize > 2GB not always detected correctly + * Bugfix: Some ID3v2 frames had data key unset incorrectly + (thanks chrisØdigitekdesign*com) + * Bugfix: Warnings on empty-strings-only comments + * Bugfix: ID3v2 tag writing may have had incorrect padding length + if padded length less than current ID3v2 tag length and + merge_existing_data is false (thanks mikeØdelusion*org) + * Bugfix: hash_data() for SHA1 was broken under Windows + * Bugfix: BigEndian2Float()/LittleEndian2Float() were broken + * Bugfix: LAME header calculated track peaks were incorrect for + LAME3.94a15 and earlier + * Bugfix: AVIs with VBR MP3 audio data reported incorrect bitrate + and bitrate_mode + * Bugfix: AVIs sometimes had incorrect or missing video and total + bitrates + * Bugifx: AVIs sometimes had incorrect ['avdataend'] and + therefore also incorrect data hashes (md5_data, sha1_data) + * Bugfix: ID3v1 genreid no longer returned for Unknown genre + * Bugfix: ID3v1 SCMPX genres were broken + Modified LAME header parsing to correctly process peak track + value for LAME3.94a16+ (thanks Gabriel) + md5_file() and sha1_file() now work under Windows in PHP < 4.2.0 + and 4.3.0 respectively with helper apps + Default md5_data() tempfile location is now system temp directory + instead of same directory as file (thanks towbØtiscali*de) + Improved list of RIFF ['INFO'] comment key translations + More helpful error message when GETID3_HELPERAPPSDIR has spaces + /demo/demo.browse.php now autogets both MD5 and SHA1 hashes for + files < 50MB + Replaced PHP_OS comparisons with GETID3_OS_ISWINDOWS define + (thanks necroticØusers*sourceforge*net) + + +1.7.0b5: [December-29-2003] James Heinrich + » Windows only: Various binary files are now required for some + file formats, especially for tag writing, as well as md5sum + (and other) calculations. These binaries are now stored in the + directory defined as GETID3_HELPERAPPSDIR in getid3.php + (default is /helperapps/ parallel to /getid3/). + Note: This directory must not have any spaces in the pathname. + All neccesary files are available as a seperate download. + See /helperapps/readme.txt for more information + New file: /helperapps/readme.txt + » Unified tag-writing interface for all tag formats + New file: /getid3/write.php + /getid3/write.apetag.php + /getid3/write.id3v1.php + /getid3/write.id3v2.php + /getid3/write.lyrics3.php + /getid3/write.metaflac.php + /getid3/write.vorbiscomment.php + » Added support for Shorten - requires shorten binary (head.exe + is also required under Windows). + New file: /getid3/module.audio.shorten.php + » Added support for RKAU + New file: /getid3/module.audio.rkau.php + » Added (minimal) support for SZIP + New file: /getid3/module.archive.szip.php + » Added MySQL caching extention (thanks ahØartemis*dk) + New file: /getid3/extention.cache.mysql.php + » Added DBM caching extention (thanks ahØartemis*dk) + New file: /getid3/extention.cache.dbm.php + » Added sha1_data hash option (thanks ahØartemis*dk) + » Added option to allow getID3() to skip ID3v2 without parsing it + for faster scanning when ID3v2 data is not required. If you + want to enable this feature delete /getid3/module.tag.id3v2.php + (thanks ahØartemis*dk) + € 8-bit WAV data now calculates MD5 checksums as normal, not + converting to signed data as before, so stored md5_data_source + in FLAC files will no longer match md5_data for the equivalent + decoded 8-bit WAV. A warning will be generated for 8-bit FLAC + files + € Added option_no_iconv option to allow getID3() to work + partially without iconv() support enabled in PHP + (thanks ahØartemis*dk) + € All '*_ascii' keys removed for ASF/WMA/WMV files + € All 'ascii*' keys removed for ID3v2 tags + € Ogg filetypes now return MIME of "application/ogg" instead of + the previous "application/x-ogg" + (thanks blakewattersØusers*sourceforge*net) + € Force contents of ['id3v2']['comments'] to UTF-8 format from + whatever encoding each frame may have (text encoding can vary + from frame to frame in ID3v2) + € MP3Gain information from APE tags suppressed from ['tags'] and + parsed into ['replay_gain'] + € ReplayGain information (all formats) changed from "Radio" and + "Audiophile" to "Track" and "Album" respectively + € ['volume'] and ['max_noclip_gain'] are now available in both + ['replay_gain']['track'] and ['replay_gain']['album'] for all + formats that calculate ReplayGain. + € ['video']['total_frames'] is available for AVIs + € All parsed ID3v2 frame data is now in ['id3v2'][XXXX][#] + (previously some frame types would have numeric array keys if + multiple instances of that frame type were allowed and other + frame types would not) + € ASF/WMA "WM/Picture" images are now parsed in the same manner + as ID3v2 with the image (ex JPEG) data returned in [data] + rather than [value] + * Bugfix: Optional tag processing options were being ignored (ie + ID3v1 still processed even if option_tag_id3v1 == false) + (thanks ahØartemis*dk) + * Bugfix: fixed MultiByteCharString2HTML() for UTF-8 + * Bugfix: Quicktime files not always reporting video frame_rate + * Bugfix: False ID3v1 synch patterns in APE or Lyrics3 tags are + now detected and incorrect ID3v1 data not returned + (thanks sebastian_maresØusers*sourceforge*net for the idea) + * Bugfix: WMA9 Lossless now reported as lossless + * Bugfix: two typos in ID3v1 genre list + * Bugfix: MPEG-2/2.5 ABR/VBR MP3 files had doubled playtime + * Bugfix: MPEG-2/2.5 LayerII (ie MP2: 24/22.05/16kHz) files were + not detected due to incorrect frame length calculation + * Bugfix: MPEG LayerI files were not detected due to incorrect + frame length calculation (must be multiple of slot length) + Added alternative md5_data via system call - twice as fast. Needs + "getID3()-WindowsSupport" to work under Windows. + (thanks ahØartemis*dk) + ID3v2.4 compressed frames are now supported + php_uname() calls changed to use PHP_OS constant + Added SCMPX extensions to ID3v1 genres (0xF0-0xFE) + Obfuscated contributor email address in changelog and sourcecode + Added memory-saving EmbeddedLookup() function for lookup tables + in RIFF and ID3v2 modules (thanks ahØartemis*dk) + Major memory patches to many modules by using + $var = &$INFO_ARRAY_AT_SOME_INDEX + in place of large multi-dimensional array declarations. + Memory saved: RIFF: ~200kB; ID3v2: ~475kB; ASF: ~50kB etc. + (thanks ahØartemis*dk) + + +1.7.0b4: [November-19-2003] James Heinrich + » Support added for MPC files with old SV4-SV6 structure + » RealVideo now properly supported with resolution, framerate, etc + (thanks jcsston) + » RealAudio files with old-style file format (v2-v4) are now + fully supported + » Support added for DolbyDigital WAV files (thanks ahØartemis*dk) + € ['RIFF'] is now ['riff'] to conform to make all root key names + lowercase + € ['OFR'] is now ['ofr'] to conform to make all root key names + lowercase + € ['tags_html'] is now available as a copy of ['tags'] but + with all text replaced with an HTML version of all characters + above chr(127), translated according to whatever the encoding + of the source tag is, in the HTML form Ӓ + € CopyTagsToComments() is now available in getid3_lib + € QuicktimeVR files now return a ['video']['dataformat'] of + 'quicktimevr' instead of 'quicktime' (thanks gtsØtsu*biz) + € Quicktime video files with DivX, Xvid, 3ivx or MPEG4 video + streams now return those names as ['video']['dataformat'] + € MPEG video files are now identified with ['video']['codec'] set + to either 'MPEG-1' or 'MPEG-2' (rather than just 'MPEG'). If you + see a file wrongly identified, please report it! + (thanks fccHandler) + € All bitrate values in ['mpeg']['audio'] is now reported in bps + rather than kbps (ie 128000 instead of 128) for consistancy + € AVIs with MP2 audio now report ['audio']['dataformat'] as 'mp2' + rather than 'wav' (thanks metalbrainØnetian*com) + € Added ['md5_data_source'] for OptimFROG + € AC3 in RIFF-WAV now identified with ['audio']['dataformat'] + returning 'ac3' + € WavPack ['extra_bc'] now returned as integer + € WavPack ['extras'] now returned as 3-element array of integers + € MP3 ['audio']['encoder options'] now returns 'VBR' or 'CBR' only + (no bitrate) if no LAME preset is used, or 'VBR q??' where ?? is + a number 0-100 for Fraunhofer-encoded VBR MP3s + * Bugfix: VBR MP3s could have incorrect bitrate reported + * Bugfix: Quicktime files with MP4 audio were not returning + ['video']['dataformat'] (thanks robØmassive-interactive*nl) + * Bugfix: strpad vs str_pad typo in module.riff.php + (thanks nicojunØusers*sourceforge*net) + * Bugfix: ReplayGain information was often wrong for MPC files + * Bugfix: MD5 and other post-TAIL chunks were not being processed + in module.audio.optimfrog.php + * Bugfix: Undefined variable in table_var_dump() in demo/check.php + * Bugfix: QuickTime files now only return information in [audio] + or [video] if those exist in the file + * Bugfix: WavPack no longer tries to read entire compressed data + chunk + * Bugfix: Properly handle VBR MP3s with "Info" (rather than + "Xing") header frame. foobar2000 adds this to MP3 files when + "Fix MP3 Header" function is used (thanks ahØartemis*dk) + * Bugfix: Fraunhofer VBRI headers for MP3s were assuming 2-byte + entries for TOC rather than using stride, and were ignoring the + scaling value. (thanks sebastianØmaresweb*net) + Several QuickTime atoms have been added to an exclusion list + because they have been observed, but I have no idea what they + are supposed to do so I can't add real support for them, but + they should not generate warnings (robØmassive-interactive*nl) + Old MPC encoder (before v1.06) was return as v0.00, now returned + as 'Buschmann v1.7.0-v1.7.9 or Klemm v0.90-v1.05' + (thanks ahØartemis*dk) + Added check for magic_quotes_runtime and code to disable it if + neccesary (thanks stefan*kischkelØt-online*de) + Added 3ivx fourCCs to module.audio-video.quicktime.php + MP3 and AC3 streams are now parsed when contained inside RIFF-WAV + or RIFF-AVI container formats + Better detection of named presets in LAME 3.93/3.94 + + +1.7.0b3: [October-17-2003] James Heinrich + » AC-3 (aka Dolby Digital) is now supported. + New file: /getid3/module.audio.ac3.php + * Bugfix: ID3v2-writing function Unsynchronise() was broken, which + made ID3v2 tag containing binary data (typically pictures) get + corrupted. (thanks t*coombesØbendigo*vic*gov*au, + i*kuehlbornØndh*net, mikeØdelusion*org, mikeØftl*com) + * Bugfix: Zip comments now returned as array instead of string, + as they're supposed to be. + * Bugfix: Quicktime/MP4 files may have reported extremely low + bitrates (thanks spunkØdasspunk*com) + Improved double-ID3v1 check to prevent false detection when string + "TAG" is present in APE or Lyrics3 + Fixed /demo/simple.php + Fixed /demo/joinmp3.php + Fixed /demo/mimeonly.php + Fixed /demo/write.php + + +1.7.0b2: [October-15-2003] James Heinrich + » TTA Lossless Audio Compressor format now supported. + (http://tta.iszf.irk.ru) + New file: /getid3/module.graphic.tta.php + » PhotoCD (PCD) format now supported. Image data for the three + lowest resolutions (192x128, 384x256, 768x512) can be optionally + extracted. + New file: /getid3/module.graphic.pcd.php + € RIFF-MP3 files now should return the same ['md5_data'] as the + identical MP3 file outside the RIFF container + € Name of LAME preset used (if available, needs LAME v3.90+) + returned in ['mpeg']['audio']['LAME']['preset_used'] and also as + part of ['audio']['encoder_options'] + € VQF module now sets ['audio']['encoder_options'] to i.e. CBR96 + € MP3 module now sets ['audio']['encoder_options'] on CBR files + and all LAME-encoded files + € MPC module now sets ['audio']['encoder_options'] + € Monkey module now sets ['audio']['encoder_options'] + € AAC module now sets ['audio']['encoder_options'] to profile name + € ASF module now sets ['audio']['encoder_options'] + € Ogg module adds ['audio']['encoder_options'] -b 128 on + Ogg Vorbis 1.0+ ABR files + € Ogg module adds ['audio']['encoder_options'] -q N on + Ogg Vorbis 1.0+ VBR files 44k/48k sample rate/stereo files only. + € Ogg module ['audio']['encoder_options'] "Nominal birate: 80k" to + other Ogg Vorbis files. + € ID3v2 track number now returned as string (with leading zeros, + if present in data) rather than integer (thanks Plamen) + € ASF module returns ['asf']['comments']['encoding_time_unix'] if + available (from WM/EncodingTime) + € Fixed /demo/mysql.php and added some new features: + - encoder options + - ID3v2 "Encoded By" + - non-empty comments + - total entries in database summary (totals & averages) + - database version update + * Bugfix: 'UNICODE' iconv() charset changed to 'UTF-16LE' or + 'UTF-16BE' as appropriate + * Bugfix: iconv_fallback() function created in case iconv() fails + * Bugfix: fixed MD5 calls in demo/check.php + * Bugfix: reenabled detection of APE + Lyrics3 tags in same file + * Bugfix: ASF module now returns ID3v1 genre as string instead of + number - patch from Eugene Toder. + * Bugfix: ASF module now reads non-standard field names, + i.e. "date" as well as WM/Year - patch from Eugene Toder. + * Bugfix: ASF module now returns genre as-is if it is not a + standard ID3v1 genre (thanks wonderboy) + * Bugfix: Eliminated false-synch problem in MP3 module + * Bugfix: Fixed missing root ['bitrate'] for most formats + * Bugfix: ['audio']['compression_ration'] missing for MPC + (thanks WaldoMonster) + * Bugfix: NSV module died in 1.7.0b1 + * Bugfix: ASF module died in 1.7.0b1 when WM/Picture preset + * Bugfix: ASF tracknumber incorrect when specified by WM/Track + rather than WM/TrackNumber (thanks jgriffiniiiØhotmail*com) + * Bugfix: MPEG audio+video playtime should now be pretty accurate + (ie within 0.1% variation at most) + (thanks mgrimmØhealthtvchannel*org) + * Bugfix: ID3v2 not being copied to ['tags'] in some cases + * Bugfix: LAME CBR files with Info tag were being incorrectly + flagged as VBR (thanks Jojo) + * Bugfix: LAME tag not being detected for LAME 3.90 (original) + Changed regex pattern match for MP3 to include 3rd byte for more + reliable/accurate pattern matching + Added duplicate-ID3v1 tag checking (two ID3v1 tags, one after the + other) that has been known to occur with iTunes + (thanks towbØtiscali*de) + Added instructions for enabling iconv() support under Windows + Removed some unneccesary debugging code + Suppressed duplicate PHP warnings for missing include files + Included some missing dependencies in various files + /demo/audioinfo.class.php now copies ['audio']['encoder_options'] + + +1.7.0b1: [2003-09-28] Allan Hansen + This beta version was not made by James Heinrich. It was made by + Allan Hansen - please send bug reports on this + beta directly to me. + + James Heinrich will release 1.7.0 final, but it may take some time + to work out the bugs from the major rewrite. + + This version could be called getID3lite. It makes a lot of checks + optional and makes it easy to remove support for undesired formats + + It also is more library-like. Older versions of getID3() declared + an incredible amount of global scope functions and defined several + constants. 1.7.0beta1 still declares constants, but they are all + prepended by GETID3_. It declares no global scope functions - they + are all wrapped into classes. + + » Made getID3() depend on iconv library: compile PHP --with-iconv + » Created new directory structure + Moved all demos to demos/ + Moved all getID3() files to getid3/ + Renamed most files to module.something + Changed header in all module.something to explain what they do + Simply remove all modules you don't need + Wrapped all modules into classes + * Bugfix: Implemented misc patches from Eugene Toder + * Bugfix: Implemented misc patches from "six" + € Added root key 'encoding' + € Added prefix GETID3_ to all defined constants. + € Wrapped getid3.php into getid3 class + € Wrapped getid3.functions.php into getid3_lib class + Removed unused functions + Moved several functions away from getid3.functions.php and + into the files where they are actually used. + Renamed getid3.functions.php to getid3.lib.php + Moved getid3.rgad.php functions into getid3_lib + Moved getid3.getimagesize.php funcitons ingo getid3_lib + € Moved getid3.ogginfo.php into ogg module + € Combined GetTagOnly() and GetAllFileInfo() in method analyze + € Removed redundant and unuseful root keys + 'file_modified_time' == filemtime($filename) + 'md5_file' == md5_file($filename) + 'exist' == file_exists($filename) + € Changed root key ['tags'] from array of string to array of array + of comments. + Simplified code for detecting base path. + Removed ob_ from InitializeFilepointerArray(). That was really a + ugly HACK to get output from fopen. If user want the reason, + he should open the file himself! + Checking for APE tags before lyrics3 - makes Lyrics3 not depend + on APE tag. It seems to work on my test file. + Changed ['error'] and ['warning'] in multiple files to append to + array instead of appending to string. That simplified code in + getid3.php too. + Simplified clean-up procedure: simply remove all empty root keys + Setting tags in individual modules instead of main getid3.php + Made Bonk and ASF modules non-dependent on id3 modules - id3 + optional. + Rewrote HandleAllTags() - simplified and convert comments to + desired encoding. + Replaced all calls to RoughTranslateUnicodeToASCII() in ASF module + with a TrimConvert() method. This uses iconv() for conversion. + It also converts from UNICODE instead of UTF-16BE, as the spec + says it should. + Replaced all calls to RoughTranslateUnicodeToASCII() in id3v2 + module with iconv(). id3v2 module also reads + $ThisFileInfo['encoding'] and converts all comments to this + format. All other formats just add their comments in their + native charset, but every comment field in id3v2 can have a + different encoding, so this is needed. + Did same thing as above with ISO module. However - it does not + work. I need to find out how to specify big-endian unicode != + UNICODING encoding name given to iconv(). + Built-in assume mp3 format in getid3.php + Temporarily nuked root key ['comments'] and CopyCommentsToRoot() + Updated demo/audioinfo.class.php + Updated demo/check.php - some thing don't work! + Other demos are out of order! + + +1.6.5: [October-06-2003] James Heinrich + » Added support for LiteWave (thanks supportØclearjump*com) + Ø Split out speedup info from ['OFR']['OFR']['compression'] into + ['OFR']['OFR']['speedup'] + Ø If EXIF functions for JPEG not available, now warning not error + Ø ID3v2 track number now returned as string (with leading zeros, + if present in data) rather than integer (thanks Plamen) + * Bugfix: now correctly parses cbSize element of WAVEFORMATEX + structure (thanks supportØclearjump*com) + * Bugfix: ASF module now reads non-standard field names, + i.e. "date" as well as WM/Year - patch from Eugene Toder. + * Bugfix: ASF module now returns genre as-is if it is not a + standard ID3v1 genre (thanks wonderboy) + * Bugfix: ['audio']['compression_ration'] missing for MPC + (thanks WaldoMonster) + Prevent infinite loop in MP3 histogram if framelength == 0 + Added wFormatTag values 0x00FF and 0x2001 - 0x2005 + (thanks steveØheadbands*com) + Added "twos" and "sowt" FourCCs for Mac AIFC + + +1.6.4: [June-30-2003] James Heinrich + » Added support for free-format MP3s + (thanks Sebastian Mares for the idea) + » Compressed (Flash 6+) SWF files are now handled properly + (thanks alan*cheungØalumni*ust*hk) + » Added DeleteLyrics3() to getid3.lyrics3.php + » Added FixID3v1Padding() to getid3.putid3.php + » Added new simple MP3-splicing sample file + (thanks tommybobØmailandnews*com for the idea) + New file: getid3.demo.joinmp3.php + » Moved all contents of getid3.putid3.php into either + getid3.id3v1.php or getid3.id3v2.php or getid3.functions.php as + appropriate + Removed file: getid3.putid3.php + € ['error'] and ['warning'] keys now return as arrays, not strings + € New root key for all files: ['file_modified_time'] (UNIX time) + € getid3.demo.scandir.php renamed to getid3.demo.mysql.php + € New demo file returns the MIME type only for a single file + (thanks adminØe-tones*co*uk for the idea) + New file: getid3.demo.mimeonly.php + € Added check for valid ID3v1 padding (strings should be padded + with null characters but some taggers incorrectly use spaces). + A warning will be generated if padding is invalid. New boolean + key ['id3v1']['padding_valid'] indicates padding validity. + € CleanUpGetAllMP3info() removes more useless root keys for + unknown-format files + € Extended LAME information in ['mpeg']['audio']['LAME'] is now + only returned for LAME v3.90+ + € LAME-encoded MP3s now return + ['mpeg']['audio']['LAME']['long_version'] as well as + ['mpeg']['audio']['LAME']['short_version'] - these are identical + in LAME v3.90+ but older versions will report longer more + detailed version information if available + € New Lyrics3 values: ['lyrics3']['raw']['offset_start'] and + ['lyrics3']['raw']['offset_end'] + € New optional parameter on getAPEtagFilepointer() to scan from a + defined offset rather than end-of-file to allow scanning of APE + tags before Lyrics3 tags + € ['tag_offset_start'] and ['tag_offset_end'] are now present in + ['ape'], ['lyrics3'], ['id3v1'] and ['id3v2'] + € Numerous changes to the returned structure and content for La + files, including parsing the seektable (if applicable) and + parsing RIFF data occuring after the end of the compressed audio + data (notably RIFF comments) + (thanks mikeØbevin*de) + € getSWFHeaderFilepointer() now has optional 3rd parameter + $ReturnAllTagData (default == false) which if set to true will + return data on all tags in ['swf']['tags'] + € ['swf']['bgcolor'] now returns the 6-character string + representing the background color in HTML hex color format + (thanks ubergeekØubergeek*tv) + € ['swf']['header']['frame_delay'] is no longer returned + € getQuicktimeHeaderFilepointer() now has two additional optional + parameters: $ReturnAtomData (default == true) and + $ParseAllPossibleAtoms (default == false). Setting + $ReturnAtomData to false will reduce the size of the returned + data array by unsetting ['quicktime']['moov'] before returning. + Leaving $ParseAllPossibleAtoms as false now suppresses parsing + of several atom types that contain very large tables of data + that are not typically useful. Atom type suppressed are: + stts, stss, stsc, stsz, and stco + (thanks ubergeekØubergeek*tv) + € ['fileformat'] no longer set to 'id3' if ID3v1 or ID3v2 tag + detected but no other data format recognized + * Bugfix: La files now return the correct values for + ['avdataoffset'] and ['avdataend'] and therefore the correct + values for ['md5_data'] - note that ['md5_data'] values will not + match values from previous versions of getID3() - the previous + versions were incorrect + (thanks mikeØbevin*de) + * Bugfix: A temporary file was being created in the web server's + root directory (not DocumentRoot) each time ['md5_data'] was + calculated, and not removed due to lack of permissions. Temp + file is now created (as it was supposed to be) in the directory + of the file being examined, or the system temp directory, and + properly removed when done. + * Bugfix: Several incorrect values were being returned inside + ['mpeg']['audio']['LAME'] (thanks bouvigneØmp3-tech*org) + * Bugfix: SWF frame rates values were usually incorrect. + (thanks alan.cheungØalumni*ust*hk and ubergeekØubergeek*tv) + * Bugfix: ID3v2.2 files always flagged 4 bytes of invalid padding + (thanks marcaØmac*com) + * Bugfix: Lyrics3 without ID3v1 was not working properly + * Bugfix: Lyrics3, APE & ID3v1 can all now exist in the same file. + A warning is issued if APE comes after Lyrics3 (because Lyrics3- + aware taggers probably are not APE-aware and therefore won't be + able to find the Lyrics3 tag) (thanks mp3gainØhotmail*com) + * Bugfix: WriteAPEtag() now writes the APE tag before any Lyrics3 + tags (if present) and removes any incorrect ones that are after + existing Lyrics3 tags (thanks mp3gainØhotmail*com) + * Bugfix: RIFF-WAVE file with incorrect NumberOfSamples values in + the 'fact' chunk no longer cause incorrect playtime calculation + (thanks stprasadØindusnetworks*com) + * Bugfix: getid3.demo.simple.php had undefined variables if the + file needed to be deep-scanned with assumeFormat + * Bugfix: fixed previously-incorrect ['avdataend'] values for APE + and Lyrics3 tags in some cases, which in some cases means that + ['md5_data'] is different than previously (now correct) + Much-improved detection of AAC-ADTS, which also means MP3 + format detection should now be nearly twice as fast + Truncated AVIs and WAVs are now reported + Number of new features and bugfixes in getid3.demo.mysql.php + Quicktime 'meta' atoms now parsed, so Quicktime MP4 files can now + return artist, title, album, etc (thanks spunkØdasspunk*com) + Consolidated all comments processing functions (processing the + ['comments'] and ['tags'] keys) into HandleAllTags() which now + also checks to ensure that APE tags are really better than ID3v2 + before using them in ['comments'] + Known issue with Meracl ID3 Tag Writer v1.3.4 truncating last byte + of MP3 file when appending new ID3v1 tag now specifically noted + (rather than generic Probably Truncated File message) + getid3.demo.mysql.php now stores last-modified time for each file + getid3.demo.mysql.php is now case-sensitive for filenames + getid3.demo.mysql.php can generate M3U playlists of any of the + groups of files it can select (duplicate filenames, tag types, + etc.) + getid3.demo.mysql.php can now find mismatched tag contents and + filenames + getid3.demo.check.php now shows total number of errors & warnings + GetFileFormatArray() now matches actual patterns for MP3 files + based on the first two bytes of the file, rather than just the + first one + Simplified DeleteAPEtag() and made it work properly with Lyrics3 + + +1.6.3: [May-17-2003] James Heinrich + » Added support for Bonk (thanks ahØartemis*dk) + New file: getid3.bonk.php + » Added support for AVR (thanks ahØartemis*dk) + New file: getid3.avr.php + € Contents of getid3.id3.php moved to getid3.id3v1.php + Removed file: getid3.id3.php + € Contents of getid3.frames.php moved to getid3.id3v2.php + Removed file: getid3.frames.php + € Returned data structure documentation improved and updated and + now stored in getid3.structure.txt rather than getid3.readme.txt + New file: getid3.structure.txt + € Now including the GNU General Public License in the distribution + as getid3.license.txt + New file: getid3.license.txt + € Added new, optional, parameter to WriteAPEtag() (and also + GenerateAPEtag()) which must be set to TRUE if the values you + are passing are already UTF8-encoded, otherwise all data is + encoded to UTF8 by default. For all ASCII/ANSI data this value + should be left at the defaul value of FALSE. + € Added third, optional, parameter to getID3v2Filepointer() - + $StartingOffset (default == 0) which can parse an ID3v2 tag + in a file at a position other than the start-of-file. + € ['video']['pixel_aspect_ratio'] now returned when known + € AVI files with WMA audio now return ['audio']['dataformat'] + of 'wma' rather than 'wav' + € ASF-WMA files now return the artist value from WM/AlbumArtist + in ['comments']['artist'] (thanks msibbaldØsaebauld*com) + € ASF-WMA files now return the 'author' value from + ['asf']['content_description'] in ['comments']['artist'] + instead of ['comments']['author'] + € ASF-WMA files now return the 'description' value from + ['asf']['content_description'] in ['comments']['comment'] + instead of ['comments']['description'] + * Bugfix: APE tag writing with multiple values for a tag (more + than one ARTIST for example) was not being correctly written + (thanks ahØartemis*dk) + * Bugfix: CreateDeepArray() was returning an empty-string key as + the top-level returned value - ['iso']['files'] now directly + contains the file listing without an empty array in between. + * Bugfix: ID3v2 genreid was not being returned in some cases. + * Bugfix: APEv1 tags would generate error messages + * Bugfix: APE tags would sometimes show phantom second entry for + each item (title, artist, etc) with no data + * Bugfix: APE tag writing was not UTF8-encoding the data - + non-ASCII characters (above chr(127)) were being incorrectly + stored (thanks ahØartemis*dk) + * Bugfix: getid3.demo.scandir.php had undefined function error + * Bugfix: getid3.demo.scandir.php would not display list of files + with no tags + Added link to getid3.demo.check.php from list of specific-tags + files in getid3.demo.scandir.php + + +1.6.2: [May-04-2003] James Heinrich + » New official mirror site for getID3() - http://www.getid3.org + » Added basic support for SWF (Flash) (thanks n8n8Øyahoo*com) + New file: getid3.swf.php + » Added experimental support for parsing the audio portion of + MPEG-video files. I don't have any actual documentation for + this, so this part is experimental and not guaranteed accurate, + but it seems to be working OK as far as I have been able to test + it. Bug reports (or even better - documentation!) are welcome at + info@getid3.org + » Added new simple directory-scanning sample file + New file: getid3.demo.simple.php + » getid3.demo.write.php now writes APE tags as well. + € Renamed getid3.write.php to getid3.demo.write.php + € Renamed audioinfo.class.php to getid3.demo.audioinfo.class.php + € getid3.php now automatically includes the getid3.functions.php + function library file, no need to include it seperately. + € getLyrics3Filepointer() has been changed to be consistant with + all the other similar function structures - the parameters have + changed. The old function has been renamed to getLyrics3Data() + € Added DeleteAPEtag() function to getid3.ape.php + € HandleID3v1Tag() now only handles ID3v1. Lyrics3 processing is + now done by HandleLyrics3Tag() + € If BitrateHistogram is enabled in getOnlyMPEGaudioInfo() it now + also returns ['mpeg']['audio']['version_distribution'] showing + the number of frames of each MPEG version (1, 2 or 2.5) - all + frames *should* be of the same MPEG version + € getID3v1Filepointer() always returns TRUE now, even if it didn't + find a valid ID3v1 tag + € getOnlyMPEGaudioInfo() now looks for MPEG sync in the first 128k + bytes rather than the first 64k bytes + € Added dummy function GetAllMP3info() to generate warning not to + use that deprecated function. + € ['video']['codec'] is now 'MPEG' for all MPEG video files (this + will change to 'MPEG-1' or 'MPEG-2' as soon as I figure out how + to determine that) (thanks jigalØspill*nl) + € ['mpeg']['audio']['LAME']['mp3_gain'] renamed to + ['mpeg']['audio']['LAME']['mp3_gain_db'] (gain in dB) + € Added ['mpeg']['audio']['LAME']['mp3_gain_factor'] (gain as a + multiplication factor) + € Added support for Preset and Surround Info bytes from LAME VBR + tag (http://gabriel.mp3-tech.org/mp3infotag.html) + * Bugfix: APE tag writing would put the string 'Array' for all + values rather than the actual data (thanks ahØartemis*dk) + * Bugfix: Warning now generated for VBR MPEG-video files because + getID3() cannot determine average bitrate. If you know of + documentation that would tell me how to do this, please email + info@getid3.org + * Bugfix: Replay Gain values from Vorbis comments are now + returned in ['replay_gain'] (and not in ['comments']) + (thanks ahØartemis*dk) + * Bugfix: Replay Gain values from APE comments are now correctly + returned in ['replay_gain'] (thanks ahØartemis*dk) + * Bugfix: getid3.demo.check.php is now case-insensitive when + assuming a format for a corrupted file if standard detection + does not identify the file type. + * Bugfix: RIFF comments were overwriting/suppressing ID3 comments + for RIFF-MP3 files (thanks wmØwofuer*com) + * Bugfix: RIFF-MP3 files with 'RMP3' chunks instead of 'WAVE' were + not being correctly identified. + * Bugfix: ID3v2 padding shorter than the length of an ID3v2 frame + header was not correctly detected + * Bugfix: getid3.demo.check.php now does in-depth scanning for MP2 + and MP1 files the same as for MP3 files based on file extension + if a MPEG-audio structure isn't found immediately at the start + of the file + * Bugfix: removed condition where RIFF-WAV was being scanned for + MPEG-audio signature when it shouldn't be present (non-MP3 WAV) + * Bugfix: ASF files were not always showing correct audio datatype + * Bugfix: array_merge_clobber() and array_merge_noclobber() were + not being conditionally defined in getid3.functions.php + (thanks rich.martinØreden-anders*com) + * Bugfix: stream_numbers was not being correctly returned in + bitrate_mutual_exclusion_object chunks of ASF files + * Bugfix: Added support for 24kHz and 12kHz audio in ASF files + * Bugfix: Removed possible undefined offset error in MP3s where + cannot find synch before end of file + * Bugfix: Removed potential out-of-memory crash situation when + parsing Real files with chunks larger than the available memory + (thanks jigalØspill*nl) + * Bugfix: ID3v1 was incorrectly taking precedence over ID3v2 in + the ['comments'] array (thanks lionelflØwanadoo*fr) + * Bugfix: No longer calculates overall bitrate and playtime for + VBR MPEG video files based on the audio bitrate. + * Bugfix: AssumeFormat was not working properly + Added summary footer line to getid3.demo.check.php + Added '.mpeg' to the list of assume-format-from-filenames list in + getid3.demo.check.php + MPEG-video files now more reliably detected + A number of additional features have been added to + getid3.demo.scandir.php + Added many RIFF-AVI audio types and fourcc video types to the + lookup functions in getid3.riff.php + Now identifes files with Lyrics3 v1 tags that are of incorrect + length (v1 Lyrics3 is supposed to be 5100 bytes long, but + [unknown program] writes variable-length tags (which is illegal + for Lyrics3 v1)). getID3() now correctly parses these tags and + issues a warning. + Split GetFileFormat() to GetFileFormat() and GetFileFormatArray() + HTML colors in getid3.demo.check.php are now defined as constant + variables at the top of the file (if you want to change them) + Added support for OptimFROG v4.50x (non-alpha) (new header fields) + (thanks floringhidoØyahoo*com) + Added support for Lossless Audio v0.4 (thanks mikeØbevin*de) + + +1.6.1: [March-03-2003] James Heinrich + » Added support for writing APE v2. + WriteAPEtag() in getid3.ape.php + NOTE: APE v1 writing support will *not* be added to future + versions of getID3() + (thanks ahØartemis*dk and adamØphysco*com for the idea) + » Added support for AIFF (Audio Interchange File Format) including + AIFF, AIFC and 8SVX (thanks ahØartemis*dk for the idea) + Removed file: getid3.aiff.php + » Added support for OptimFROG (v4.50a and v4.2x) + (thanks ahØartemis*dk for the idea) + New file: getid3.optimfrog.php + » Added support for WavPack (thanks ahØartemis*dk for the idea) + » Added support for LPAC (thanks ahØartemis*dk for the idea) + » Added support for NeXT/Sun .au format + New file: getid3.au.php + » Added support for Creative SoundBlaster VOC format + New file: getid3.voc.php + » Added support for the BWF (Broadcast Wave File) RIFF chunks + "bext" and "MEXT" (thanks Ryan and njhØsurgeradio*co*uk) + » Added support for the CART (Broadcast Wave File) RIFF chunks + (thanks Ryan) + » Added getid3.demo.scandir.php - a sample recursive scanning demo + that scans every file in a given directory, and all sub- + directories, and stores the resulting data in MySQL database, + and then displays a list of duplicate files based on md5_data + € ['md5_data_source'] now contains the MD5 value for the original + uncompressed data for formats that store that information + (currently only FLAC v0.5+). ['md5_data'] (if chosen to be + calculated) will contain the calculated MD5 value for the + compressed file. To check if 2 files are identical in every way, + including all comments: compare ['md5_file']. To check if two + files were compressed from the same source file: compare + ['md5_data_source']. To check if the compressed audio/video data + of two files is identical, even if comments or even the + container file format is different (MP3 in RIFF container, + FLAC in Ogg container, etc): compare ['md5_data']. + € ['md5_data'] for 8-bit WAV files is now calculated based on a + converted version of the data from unsigned to signed (MSB + inverted) to match the MD5 value calculated by FLAC + € New optional parameter added to GetAllFileInfo() - + $MD5dataIfMD5SourceKnown (default: false). If false the md5_data + value will NOT be calculated for files (such as FLAC) that have + ['md5_data_source'] set, even if $MD5data == true. + (thanks ahØartemis*dk) + € getid3.check.php renamed to getid3.demo.check.php + € Added GetTagOnly() function to getid3.php - similar to + GetAllFileInfo() except only takes a filename as a parameter and + only returns ID3v2, APE, Lyrics3 and ID3v1 tag information - no + attempt is made to parse the data contents of the file at all. + (thanks Phil for the idea) + € Added ['audio']['lossless'] and ['video']['lossless'] for all + formats (when known). Both are boolean values - true means the + data is lossless-compressed, false means the data is lossy- + compressed. + € Added ['audio']['compression_ratio'] and/or + ['video']['compression_ratio'] for all formats. Returns a number + (usually) less than 1, where 1 represents no compression and 0.5 + represents a compressed file half the size of the original file + € Added ['video']['bits_per_sample'] to all video formats (when + known) + € Added ['video']['frame_rate'] to all video formats (when known) + € ['fileformat'] set to 'mp1' or 'mp2' instead of 'mp3' when + ['audio']['dataformat'] is one of those (thanks ahØartemis*dk) + € Added 4th parameter to md5_data(), $invertsign, which will invert + the MSB of each byte before MD5'ing. This is needed for 8-bit + WAV files because FLAC calculates the stored MD5 value on + signed data rather than the original byte values. ['md5_data'] + of an 8-bit WAV will now match the ['md5_data_source'] value + (thanks lichvarmØphoenix*inf*upol*cz) + € ['ape']['items']['data'] and ['ape']['items']['data_ascii'] now + contains an array of values, if the tag contains UTF-8 text (as + opposed to binary data) + € ['mpeg']['audio']['bitratemode'] renamed to + ['mpeg']['audio']['bitrate_mode'] + * Bugfix: Removed potential bug that could replace all MP3 file + contents with only the new ID3v2 tag in getid3.putid3.php + * Bugfix: md5_data values calculated for RIFF (WAV, AVI) files + were incorrect (thanks ahØartemis*dk) + * Bugfix: MP3 data in an MP4 wrapper fileformat could not identify + bitrate (thanks ahØartemis*dk) + * Bugfix: ['audio'] and/or ['video'] keys would sometimes get + removed even if not empty + * Bugfix: Prevented creation of null entries in + ['RIFF']['WAVE']['INFO'] if a comment entry was not present + * Bugfix: Potential infinite-loop condition in getid3.ogg.php + (thanks afshin.behniaØsbcglobal*net) + * Bugfix: Ogg files with illegal ID3v1 (and/or APE or Lyrics3) + tags were not finding the last Ogg page + (thanks afshin.behniaØsbcglobal*net) + * Bugfix: replay-gain values not properly set from LAME tag + * Bugfix: RIFF-MP3 had incorrect md5_data + * Bugfix: the LAME DLL CBR problem of not re-writing the LAME + frame at the beginning of the data is now detected for MP3s + with ID3v2 tags as well + * Bugfix: APE tags with multiple values (ie multiple entries in + the "artist" tag) are now shown properly in ['ape']['items'] + * Bugfix: fixed condition where APE tag with no ID3v1 tag could be + mistaken for APE tag with ID3v1 (and incorrectly parsed) + * Bugfix: added warning if ID3v2 frame has zero-length data + (thanks cmassetØclubinternet*fr) + * Bugfix: getid3.frames.php looking for non-existant key in USER + frames + Improved detection of RIFF-MP3 data. [unknown program] encodes + RIFF-WAV data with a chunk name of 'RMP3' instead of the + standard 'RIFF' + Encoder now returned in both ['comments'] and ['audio']['encoder'] + for RIFF-WAV files with an INFO.ISFT chunk + Generate a warning for FLAC files encoded with v0.3 or v0.4 + because audio_signature is not calculated during encoding + (thanks ahØartemis*dk) + Modified getid3.check.php to display md5_data_source as well as + md5_file and md5_data if display-MD5 mode is selected + Modified getid3.check.php to assume-format based on file extension + in browse mode if fileformat is found to be 'id3' (formerly only + if the fileformat was null) + Changed scaling of BitrateColor() from representing 1-256kbps to + representing 1-768kbps for better display of high-bitrate files, + specifically lossless-compressed CD-audio (FLAC, LA, etc) + + +1.6.0: [January-30-2003] James Heinrich + » Added support for OggFLAC (FLAC data stored in an Ogg container) + (thanks ahØartemis*dk for the idea) + » Added support for Speex (the data stored in an Ogg container) + » Comments are now available in the root 2-dimensional array + ['comments'] - each entry in this array will contain one or more + strings. For example, if there are two artists then + ['comments']['artist'][0] will contain the first one and + ['comments']['artist'][1] the other. All keys are forced + lowercase. Comments will be stored in the ['comments'] array in + this order of precedence: + 1) Native format tags (ASF, VQF, NSV, RIFF, Quicktime, Vorbis) + 2) APE tags + 3) ID3v2 + 4) Lyrics3 + 5) ID3v1 + Lower-priority tags will not overwrite or append existing values + of higher-priority tags (for example, 'artist' in ID3v1 will be + ignored if already specified in APE), but missing values will be + filled in (for example, if 'album' is specified in ID3v2 but not + in APE, it will be included in the ['comments'] array). + Note: Root keys (['title'], ['artist'], etc) are NOT available + in this or future versions of getID3(). + (thanks ahØartemis*dk) + » MD5 hashes are now available for all formats for both the entire + file (['md5_file']) and the portion of the file containing only + the audio/video data, stripped of all prepended/appended tags + like ID3v2, ID3v1, APE, etc - ['md5_data'] + (thanks ahØartemis*dk for alternate md5_file() function that + runs on UNIX system running PHP < 4.2.0) + NOTE: Ogg files require the use of vorbiscomment to obtain the + md5_data value. vorbiscomment must be downloaded from + http://www.vorbis.com/download.psp and placed in the getID3() + directory. All Ogg formats (Vorbis, OggFLAC, Speex) are affected + by this problem, but only OggVorbis files can be processed with + vorbiscomment. OggFLAC and Speex files will be processed by + getID3(), but this may result in an incorrect value for md5_data + in the event that VorbisComments are larger than 1 page (4-8kB). + NOTE: md5_data for Ogg will not work if PHP is running in Safe + Mode + » There is now a wrapper class available, written by Allan Hansen, + which should simplify extracting most common basic information + (such as format, bitrate, comments). + New file: audioinfo.class.php + » OggWrite() in getid3.ogginfo.php has been replaced with a new + version that uses vorbiscomment to write the comments, because + of a reported bug that can corrupt OggVorbis files such they + cannot be played. + NOTE: Ogg comment writing now requires the use of vorbiscomment + which must be downloaded from http://www.vorbis.com/download.psp + and placed in the getID3() directory. + NOTE: Ogg comment writing will not work if PHP is running in + Safe Mode + € New root key ['tags'] is now always returned for all formats. + It is an array that may contain any of: + * Native format tags: 'vqf', 'riff', 'vorbiscomment', 'asf', + 'nsv', 'real', 'midi', 'zip', 'quicktime' + * Appended data tags: 'ape', 'lyrics3', 'id3v2', 'id3v1' + € New root key ['audio'] is an array containing any or all of: + codec, channels, channelmode, bitrate, bits_per_sample, + dataformat, bitrate_mode, sample_rate, encoder + Note: This replaces several root keys, including: + bitrate_audio, bits_per_sample, frequency, channels + € New root key ['video'] is an array containing any or all of: + bitrate_mode, bitrate, codec, resolution_x, resolution_y, + resolution_y, frame_rate, encoder + Note: This replaces several root keys, including: + bitrate_video, resolution_x, resolution_y, frame_rate + € ['id3']['id3v1'] has moved to ['id3v1'] + € ['id3']['id3v2'] has moved to ['id3v2'] + € ['audiodataoffset'] and ['audiodataend'] have been renamed to + ['avdataoffset'] and ['avdataend'] respectively + € GetAllMP3info() has been changed to GetAllFileInfo() with a + different parameter list ($allowedFormats is no longer a + parameter). Check your code where you're calling + GetAllMP3Info() - you will need to change both the function + name and the parameter list if you pass more than 2 parameters + € All formats now return ['audio']['dataformat'] and/or + ['video']['dataformat'] where appropriate - this goes along with + ['fileformat'] - ['fileformat'] will return the actual structure + of the file, whereas ['dataformat'] will return the format of + the data inside that structure. For example, an Ogg file can + contain Vobis data (normal), or it can contain FLAC data in the + Ogg container format. In that case, ['fileformat'] would be + 'ogg', but ['dataformat'] would be 'flac'. + Note: this means that WAV and AVI files now return a + ['fileformat'] of 'riff' rather than 'wav' or 'avi'. + € ['filesize'] is no longer returned for files larger than 2GB + because PHP does not support large file access. Attempting to + parse a file larger than 2GB will result in a message stored in + ['error'] and ['filesize'] not set. + € APEtag, ID3v1, and ID3v2 are now supported on ALL multimedia + files - even if illegal by format. Ogg will return warning if + ID3/APE tags are present. (thanks ahØartemis*dk) + € All files: non-critical errors are now returned in the root key + ['warning'] rather than ['error'] (only critical errors that + prevent getID3() from correctly parsing the file are returned in + ['error'] (thanks ahØartemis*dk) + € Renamed all references to $MP3fileInfo to $ThisFileInfo + € Joliet now supported for ISO-9660. + ['iso']['supplementary_volume_descriptor'] is now returned, if + available, and ['iso']['files'] will contain ASCII equivalents + of the Unicode directory structure & filenames stored. + € Moved Monkey's Audio code from getid3.ape.php to seperate file. + New file: getid3.monkey.php + € Added new keys for ISO-9660: ['name_ascii'] for directories, + ['file_identifier_ascii'] for files + € Added root key ['track'] for CD-audio files + € Ogg/Vorbis-comment files now have comments returned inside + ['ogg']['comments_common'] as an array of strings, rather than + simple strings in ['ogg'] + € Quicktime files now have comments returned inside + ['quicktime']['comments'] as an array of strings, rather than + simple strings in ['quicktime'] + € ['mime_type'] is a new root key returned for all supported + formats (thanks ahØartemis*dk) + € ['fileformat'] now returns 'mp1' instead of 'mp3' for MPEG-1 + layer-I audio files (thanks ahØartemis*dk) + € ['mpeg']['audio']['bitratemode'] now returns lowercase + € MPEG-4 audio files which consist of MP3 data wrapped in a + Quicktime fileformat will now return the usual data in + ['mpeg']['audio'] + € Type-1 DV AVIs are now supported + € DV AVIs will return 1 or 2 in ['RIFF']['video'][x]['dv_type'] + € Changed ['fileformat'] from 'mpg' to 'mpeg' for MPEG video files + € ASF comments are now stored in ['asf']['comments'] instead of + ['asf'] + € RealMedia chunk data is now returned inside ['real']['chunks'] + instead of ['real'] + € ['replay_gain'] now properly populated from APE tags + € Added support for ASF_Old_ASF_Index_Object in ASF files + (thanks ahØartemis*dk) + € AAC-ADTS files now return ['aac']['bitrate_distribution'] + € ParseVorbisComments() has been replaced with + ParseVorbisCommentsFilepointer() (with different parameters) + € All references to any key ['frequency'] are now ['sample_rate'] + € Moved ID3v2 comments from ['id3v2'] into common root + ['comments'] structure, and now returns more values than before + * Bugfix: ['iso']['files'] and ['zip']['files'] could potentially + contain duplicate entries (in a numeric-indexed array) for files + if the directory structure specifies files multiple times. + Entries are now guaranteed unique, with the last entry for the + file overwriting any former ones. + * Bugfix: RIFF parsing had numerous issues, including: + - large AVIs would take a very very long time to parse + - chunks with odd (not even) sizes would cause the parser fail + - video and/or audio codecs not always identified + The ParseRIFF() function has been completely rewritten and fixes + all known issues with RIFF parsing. Users are, however, + encouraged to double-check output of any parsed (AVI/WAV/CDDA) + files. + * Bugfix: Modified getid3.riff.php to return correct total + bitrates for AVIs with multiple audio streams + * Bugfix: GetFileFormat() was not creating array structure + correctly (thanks ahØartemis*dk) + * Bugfix: LAME tag for MP3s can only specify up to 255kbps, so any + files with actual CBR bitrate of >=256 were reported incorrectly + * Bugfix: Lyrics3 synched lyrics were not being correctly returned + * Bugfix: CreateDeepArray() was broken for non-nested cases, which + meant ZIP and ISO ['files'] structures were broken + * Bugfix: Incorrect pattern matching for ZIP files meant no zip + files were being detected as such + * Bugfix: AAC-ADIF was returning an incorrect number of channels + (too few) in some cases (thanks ahØartemis*dk) + * Bugfix: Vorbis comments were returning an incorrect value for + ['dataoffset'] in some cases + * Bugfix: MPEG video ['marker_bit'] and ['vbv_buffer_size'] were + incorrect + * Bugfix: ['playtime_string'] could potentially have a value of + x minutes and 60 seconds (ie 3:60 instead of 4:00) + Added support for FLAC cuesheets (FLAC 1.1.0+) + (thanks ahØartemis*dk) + Improved parsing speed in MP3, MP2 and AAC (thanks ahØartemis*dk) + Extra error-checking added to try and identify corrupt files for + most audio formats (thanks ahØartemis*dk) + More accurate playtime calculation for RealMedia + (thanks ahØartemis*dk) + Changed all relevant files to use ['audiodataoffset'] and + ['audiodataend'] rather than ['filesize'] where appropriate + (thanks ahØartemis*dk) + Added text encoding type 255 as a duplicate of UTF-16BE but with + Big-Endian rather than Little-Endian byte order + Added many RIFF-AVI audio types and fourcc video types to the + lookup functions in getid3.riff.php + Added numerous new known GUIDs to getid3.asf.php + Added PoweredBygetID3() function to easily get a "powered by" + string with the current getID3() version. + Added "Morgan Multimedia Motion JPEG2000" (MJ2C), "DivX v5" (DX50) + and "XviD" (XVID) codecs to list of known codecs in + getid3.riff.php + Changed GETID3_INCLUDEPATH path seperators to forced / + (from \ for Windows) + Modified getid3.check.php to only change \ directory seperators to + / on Windows operating systems + Modified getid3.check.php to handle larger-than-2GB files (which + now do not return a filesize) + Modified getid3.check.php to handle ['dataformat_audio'] and + ['dataformat_video'] + Modified getid3.check.php to show a list of present tags in one + column rather than one column for each of ID3v1, ID3v2, etc + Modified getid3.check.php to show MD5 values. Initially disabled + but can be enabled for a directory with a click. md5_file is + always calculated when displaying detailed info about a single + file; md5_data is calculated if the file is < 50MB + Modified getid3.check.php to show errors and warnings. Details are + visible with a mouseover or a click. + Changed getid3.check.php to use SafeStripSlashes instead of a + manual conditional directory name replacement for special + characters + Added sample recursive scanning sample code to getid3.readme.txt + (thanks lipisinØmail*ru for the idea) + + +1.5.7: [January-10-2003] James Heinrich + » Added support for ISO 9660 (CD-ROM image) format. Most-useful + data is directory structure returned under ['iso']['files'] + Note: Only ISO-9660 supported, not (yet) Joliet extension + (thanks nebula_djØsofthome*net for the idea) + New file: getid3.iso.php + € ZIP files are now parsed by getID3() itself without relying on + built-in PHP functions and/or ZZipLib support. + (thanks Vince for the idea) + € ZIP files now return a simple directory listing with filename + and filesize info only under ['zip']['files']. + Note: empty subdirectories will note appear in here, only files + and non-empty subdirectories. Information for all entries, + including empty subdirectories, is available under + ['zip']['central_directory'] (or under ['zip']['entries'] if the + Central Directory cannot be located (usually due to a trucated + file). + € RIFF-WAV files with MP3 data (or MP3s with RIFF headers, if you + want to think of it that way) now have the MPEG audio portion + scanned and the usual data returned in ['mpeg']['audio'] if the + RIFF audio codec has wFormatTag of "85" (identified by getID3() + as "MPEG Layer 3") + (thanks ahØartemis*dk for the idea) + € EXIF data (if present) is returned for JPEG files under + ['jpg']['exif'] (thanks nebula_djØsofthome*net) + € ['filepath'] now returned for all files with the directory part + of the full filename. + € ['filenamepath'] is now returned for all files (equivalent to + ['filepath'].'/'.['filename']) + * Bugfix: ['id3']['id3v2'][]['dataoffset'] was wrong + * Bugfix: MP3s tagged with iTunes have an invalid comment field + frame name ('COM ' - should be 'COMM') but the data is valid + otherwise; the frame is now renamed to 'COMM' and parsed + normally (with the error noted in ['error']) + (thanks kheller2Ømac*com for the sample file) + * Bugfix: Some ASF/WMA audio files were not being identified as + any format (thanks ahØartemis*dk) + * Bugfix: Warning now generated and ASCII format assumed for + invalid text encoding values in ID3v2 + * Bugfix: Changed ZIP detection pattern from 'PK' to 'PK\x04\x03' + * Bugfix: Ogg/FLAC files with large Vorbis comments were dying in + an infinite loop with lots of error messages due to missing $fd + parameter on ParseVorbisComments() (thanks ahØartemis*dk) + * Bugfix: ['data'] and ['image_mime'] were being returned for all + Ogg comments even if they were not images for versions of PHP + that have image_type_to_mime_type() built in (ie PHP 4.3.0+) + + +1.5.6: [December-31-2002] James Heinrich + » Added support for NSV (Nullsoft Streaming Video) + (www.nullsoft.com/nsv/) + (thanks demonØsoundplanet*com for the idea) + New file: getid3.nsv.php + » Added support for CD-audio track files (track01.cda etc) + € Added standard ['frame_rate'] root value when known (AVI, NSV, + MPEG-video) + € ASF files now report ['fileformat'] of: + 'wmv' when Windows Media Video codec v7/v8/v9 is used; + 'wma' when any 'Windows Media Audio' named audio codec is used + and no video stream is present; + 'asf' in all other cases (audio-only, video-only, or both) + € Removed support for ZIP functions (will be rewritten to not + require ZZIPlib support in future versions) + € Added function SafeStripSlashes() as a drop-in replacement for + stripslashes(), but that only strips slashes if magic_quotes_gpc + is set + € Removed support for remote file scanning (HTTP / FTP) + € Added ['aac']['frames'] (number of AAC frames in file) + € Added ['mpeg']['audio']['frame_count'] when a bitrate histogram + is created + € Average bitrate for VBR MP3/MP2 is calculated from actual counts + of frames of various bitrates (rather than relying on the header + values or filesize) when a bitrate histogram is created + € RecursiveFrameScanning() split out into seperate function + (getid3.mp3.php) + € Removed old function getMP3header() from getid3.mp3.php + € Changed default MPEG_VALID_CHECK_FRAMES (number of mp3 frames + scanned to ensure a valid audio sequence has been located) from + 10 to 25. This means scanning will be slightly slower, but more + reliable/accurate + * Bugfix: ID3v2.2 - valid frame names not correctly detected + (thanks maeckerØweb*de for the sample file) + * Bugfix: ID3v2.2 - valid padding not correctly detected + (thanks maeckerØweb*de for the sample file) + * Bugfix: MIDI files with flat key signatures were not being + correctly reported (thanks alexleeisØshaw*ca for sample file) + * Bugfix: now returns message in ['error'] if file does not exist + * Bugfix: ['RIFF']['video'][x]['codec'] wasn't always being + correctly populated + * Bugfix: ['bitrate'] was incorrect for multi-stream RealMedia + * Bugfix: ['playtime_seconds'] was sometimes null or incorrect + for multi-stream RealMedia + * Bugfix: ChannelTypeID was incorrect in RVA2 ID3v2.4 frames + * Bugfix: Fixed potential divide-by-zero error for corrupt FLAC + files (thanks ahØartemis*dk) + * Bugfix: AAC-ADTS was not returning ['bitrate_mode'] unless + $ReturnExtendedInfo was TRUE (thanks ahØartemis*dk) + * Bugfix: LAME-encoded CBR MP3s now properly identified as CBR + with correct bitrate (thanks ahØartemis*dk) + * Bugfix: VBR MP2 (or headerless MP3) is now identified as VBR + rather than CBR. Note: to obtain VBR bitrate for headerless + files, the entire file is scanned and a histogram distribution + of bitrates is created, and the average bitrate calculated from + that. (thanks ahØartemis*dk for sample file) + Added support for DSIZ chunks in VQF, and checks to make sure size + of audio data matches DSIZ value, if present + (thanks ahØartemis*dk for sample file) + Rewrote GetAllMP3info() - removed some unneccesary code, changed + format-detection routine from ParseAsThisFormat() to + GetFileFormat() to allow for more flexible format parsing + (needed for ISO CD-ROM images, helpful for Quicktime and others) + Changed references in all files from string-cast indexes: ["$i"] + to non-cast indexes: [$i] where appropriate + Put a sans-serif 9pt style on all text in getid3.check.php + getAACADTSheaderFilepointer() now return TRUE if synch is lost + after the first frame has been successfully parsed (previously + it would return FALSE if synch was lost at any time, meaning the + file is most likely MP3, which was incorrect) + (thanks ahØartemis*dk for sample file) + Speed improvement code changes to getid3.mp3.php (up to 24% faster + in some cases) (thanks ahØartemis*dk for the code) + Changed all include_once() to require_once() + + +1.5.5: [November-25-2002] James Heinrich + » Added support for La (Lossless Audio - www.lossless-audio.com) + (thanks ahØartemis*dk for the idea) + New file: getid3.la.php + € Moved lookup functions from getid3.lookup.php to the files where + they are used. + New file: getid3.id3.php + New file: getid3.rgad.php + Removed file: getid3.lookup.php + € getID3v1Filepointer() returns FALSE if ID3v1 tag not found + € Added new paramter "ReturnExtendedInfo" to the function + getAACADTSheaderFilepointer() in getid3.aac.php which now + defaults to FALSE - if TRUE then the data for every frame is + returned (containing aac_frame_length, adts_buffer_fullness and + num_raw_data_blocks, which aren't usually very useful). Speed + improvement with FALSE is about 35%. + € Now returns fopen() errors in ['error'], for example if a remote + file is not accessible. + € Changed default number of MP3 audio frames to scan to determine + if a valid stream has been found from 5 to 10, now also defined + as a constant at the top of getid3.mp3.php This will result in + slightly slower MP3 parsing, but greater reliability in + detecting false/invalid/corrupted VBR headers. + € fopen() errors now displayed in getid3.putid3.php + (thanks miguel.dieckmannØhamburg*de) + € Added 4th parameter to decodeMPEGaudioHeader() $ScanAsCBR which + will force an MP3 audio frame sequence to be force-scanned in + CBR mode. You should never need to call this directly, it's only + used internally to scan for MP3 files that have an illegal VBR + header with CBR data. (thanks fletchØpobox*com) + * Bugfix: ASF_Marker_Object in getid3.asf.php was always returning + an error in non-existant "reserved_1" and failing + * Bugfix: VBR bitrate calculations in getid3.mp3.php only occur if + ['mpeg']['audio']['VBR_frames'] is defined. + (thanks fletchØpobox*com) + * Bugfix: getid3.putid3.php no longer deletes original MP3 if + ID3v2 tag writing fails (thanks miguel*dieckmannØhamburg*de) + * Bugfix: incorrect order of if-statement error messages in + getid3.putid3.php (thanks miguel*dieckmannØhamburg*de) + getid3.asf.php now notes the error and continues parsing rather + than failing when it encounters an error parsing a chunk + Now actually scan 1000 frames for AAC ADTS as reported in the + v1.5.4 changelog, rather than 100. (thanks ahØartemis*dk) + Improved scanning speed in getAACADTSheaderFilepointer() by ~30% + (thanks ahØartemis*dk for the fix) + Added FileSizeNiceDisplay() function to getid3.functions.php for + formatting filesize output in kB, MB, GB, etc. + + +1.5.4: [October-07-2002] James Heinrich + » Added support for Quicktime. + New file: getid3.quicktime.php + » Added support for AAC files, both ADTS and ADIF header formats. + ADIF format is a pain because it's very similar to standard MP3 + header format, and it's hard to distinguish between the two. I + have tried to make the detection accurate, but I have a limited + number of AAC test files to play with so if you have an AAC file + that gets detected as MP3/MP2 (or vice-versa), please send me + the details via email at infoØgetid3Øorg + ADTS format is very slow to parse because to get the bitrate of + VBR files the whole file has to be stepped through frame by + frame (getID3() scans up to the first 1000 frames and assumes + that to be close enough). + Note: I would suggest commenting out support for AAC (see top of + GetAllMP3info() function in getid3.php) unless you need it. + (thanks jfaulØgmx*de for the idea and sample Delphi source code) + New file: getid3.aac.php + » Added bitrate distribution analysis option for MP3 VBR files. A + new boolean parameter for getOnlyMPEGaudioInfo() enabled this + feature which steps through the MP3 file frame by frame and + counts how many frames of each bitrate exist. This information + is returned in ['mpeg']['audio']['bitrate_distribution'] + Caution: this feature is very inefficient for large files and + takes a very long time and does lots of disk I/O. Use with care. + € Changed layout of allowedFormats in GetAllMP3info() function in + getid3.php to allow easy removal of support for any of the + supported format. As stated above, I recommend commenting out + AAC unless needed. + € Added ['flac']['compressed_audio_bytes'], + ['flac']['uncompressed_audio_bytes'], and + ['flac']['compression_ratio'] + € Replaced FXPT2DOT30toFloat() function with FixedPoint2_30() + * Bugfix: getid3.mpc.php was slightly miscalculating the number of + samples, therefore also bitrate and playtime + (thanks ahØartemis*dk for the fix) + * Bugfix: MonkeyCompressionLevelNameLookup() didn't know about + 'insane' compression (thanks ahØartemis*dk for the fix) + * Bugfix: MonkeySamplesPerFrame() was incorrect for MAC v3.95+ + (thanks ahØartemis*dk for the fix) + * Bugfix: getid3.check.php wasn't processing the assumeFormat + directive when (register_globals == off) + * Bugfix: detecting of synch pattern for MP3 files with invalid + data at the beginning wasn't always correct, also meant possible + incorrect bitrate/duration/etc info for such corrupt files. + getid3.functions.php now includes a replacement utf8_decode() + function for those PHP installations that are not configured + with the --with-xml option. (thanks stephaneØtekartists*com) + + +1.5.3: [September-30-2002] James Heinrich + » Added support for VQF. (thanks mtØmansonthomas*com for the idea) + New file: getid3.vqf.php + » Added support for FLAC. Comments, if present, are returned under + ['ogg'] because they follow the Ogg Vorbis structure standard. + New file: getid3.flac.php + € OS/2-format bitmaps are now correctly interpreted. The format of + the bitmap is now returned in ['bmp']['type_os'] and + ['bmp']['type_version']. OS/2 bitmaps can be v1 or v2, Windows + can be v1, v4 or v5 + + +1.5.2: [September-25-2002] James Heinrich + » Support for RealMedia (audio & video) added + Note: only tested on G2 and v5 audio and video files - if anyone + has older and/or newer sample files, please test it and/or send + me the sample files. + (thanks stephaneØtekartists*com for idea) + New file: getid3.real.php + » Support for BMP added. Palette and pixel data can optionally be + extracted as well - this is slow and generally unneccesary, but + the option is there if you need it. Also includes PlotBMP() + which will take the extracted pixel data and output it as a true + color PNG. This function requires GD v2.0+ + Note: Untested on 16-bit and 32-bit BMPs because I couldn't find + any sample files - if you know of a program that can create such + files, please email infoØgetid3Øorg + Note: Support for RGB (uncompressed), RLE8 and RLE4 is included + and tested. BITFIELDS support is also included for 16- & 32-bit + formats, but it's untested, so if anybody has any test files + please send them to infoØgetid3Øorg + Note: Support currently only for Windows-format BMPs, and trying + to parse an OS/2-format bitmap leads to unpredictable/invalid + results. + New file: getid3.bmp.php + » PNG now fully parsed, including all information chunks + New file: getid3.png.php + € Support for GIF/JPG/PNG moved to seperate files and expanded, + including standard ['resolution_x'] and ['resolution_y'] as well + as more thorough parsing of header information + New file: getid3.gif.php + New file: getid3.jpg.php + table_var_dump() simplified and now outputs {-style character + entities for characters outside the normal alphanumeric range + CleanOggCommentName() changed to a regular expression + (thanks chris-getid3Øbolt*cx for rewriting the function) + + +1.5.1: [September-20-2002] James Heinrich + » Added support for MPEGplus/Musepack SV7. ['fileformat'] is 'SV7' + for version 7 files (versions 4, 5 ,6 and 8 are not supported + yet, but will be of ['fileformat'] SV4, SV5, SV6 and SV8) when + they are supported (thanks Christian Fritz for the idea) + New file: getid3.mpc.php + € ['bitrate_audio'], ['bitrate_video'], ['bitrate_mode'], + ['channels'], ['resolution_x'], and ['resolution_y'] keys added + for all appropriate formats + € Ogg files with a COVERART comment now save and display the + attached image the same way as is done with ID3v2 APICs + € ['ogg']['comments'][n]['data'] and + ['ogg']['comments'][n]['dataoffset'] is now returned for all + comments. ['ogg']['comments'][n]['data'] is only useful if + the field is supposed to contain binary data. It is a + base64_decode()'d version of ['value']. + ['ogg']['comments'][n]['dataoffset'] is the byte offset in the + file at which the 'COMMENTNAME=value string' starts, not the + start of just 'value' + € ['ogg']['comments'][n]['image_mime'] is now returned if + ['ogg']['comments'][n]['data'] contains valid image data. + € More than 3 Ogg pages may now be read in, if the comment data + is longer than 1 page (usually about 4kB) + € ['fileformat'] is now 'mp2' rather than 'mp3' if it's MPEG-1, + Layer-II audio + € ASF bitrates now calculated even if stream_bitrate_properties + object not present + € ['asf']['stream_properties_object'] is now a numeric-key array + with one entry for each stream - the key being the stream number + € ['replay_gain'] is returned for all audio formats that support + it (MP3-LAME, ID3v2, Ogg) (thanks Christian Fritz for the idea) + € ['mpeg']['audio']['LAME']['RGAD']['radio_replay_gain'] is now + ['mpeg']['audio']['LAME']['RGAD']['radio'] (same for audiophile) + € ASF/WMA files now use WM/Track to get track number from if + WM/TrackNumber is not available (thanks stephaneØtekartists*com) + € ASF/WMV files now returns ['year'] and ['asf']['year'] + € ASV/WMV files now use ['content_description']['description'] for + the ['comment'] field (thanks stephaneØtekartists*com) + € ['track'] is now always returned as an integer + * Bugfix: Ogg comments that are larger than one data page (usually + about 4kB) are now correctly parsed (thanks Christian Fritz) + * Bugfix: Ogg comment data is now UTF8-decoded + * Bugfix: Ogg comment writing now UTF8-encodes the data + * Bugfix: playtime for ASF files was off by (usually + between 3 and 12 seconds) + * Bugfix: ['asf']['stream_properties_objects']['flags'] data was + possibly incorrect + * Bugfix: ASF Padding Object was overwriting + Stream Bitrate Properties Object data (now returned correctly in + ['asf']['padding_object'] + * Bugfix: ASF Marker Object Reserved_2 field was incorrect + * Bugfix: ASF Bitrate Mutual Exclusion Object had incorrect stream + numbers + Warning displayed if incorrectly-formatted Ogg comment is present + (known to be an issue with CDex v1.40, but fixed by v1.50b7) + (thanks Christian Fritz) + Ogg comment writing now checks for valid comment names + Added bitrate column in getid3.check.php, and added some formatting + (font, colour) + Performance tweaks using bitwise math instead of binary string + operations + + +1.5.0: [September-18-2002] James Heinrich + » Ogg comment writing support added. getid3.write.php has been + updated to allow for writing comment tags to both MP3 and Ogg. + Big thanks to Chris Bolt for writing the + OggWrite() function and offering it for inclusion in getID3() + New file: getid3.ogginfo.php + » Support for Monkey's Audio and APE tag added. + (thanks Christian Fritz for the idea) + New file: getid3.ape.php + ['fileformat'] now returns 'mac' for Monkey's Audio files, or + 'ape' for files with an APE tag (Monkey's Audio or other format) + » getid3.thumbnail.php has been removed from the distribution and + the table_var_dump() function now outputs APICs as seperate + files in the same directory as the analyzed file. This should + make the image-displaying more reliable as well as reduce + complexity. The naming convention for the images is + filename.ext.[byte offset of APIC data].[jpg|gif|png] + If anybody still has any problems with corrupted images please + let me know at infoØgetid3Øorg + » Support for extended Xing/LAME tag + (see http://users.belgacom.net/gc247244/extra/tag.html) + Data is returned in ['mpeg']['audio']['LAME'] + € ['ogg']['tracknumber'] has been renamed to ['ogg']['track'] and + ['track'] is now returned in the root of the array + € ['ogg']['pageheader'][n]['flag'] has been renamed to + ['ogg']['pageheader'][n]['flags'] and the unprocessed flag byte + is available in ['ogg']['pageheader'][n]['flags_raw'] + € ['frequency'] is now returned for WAVE files in the root of the + array (thanks danielØelectroteque*org) + € ASF files now return codec, bitrate, resolution, etc information + under ['asf']['video_media'] or ['asf']['audio_media'] + * Bugfix: RVA2 and EQU2 writing in getid3.putid3.php were + incorrectly writing Volume Adjustment field + * Bugfix: EQU2 in getid3.frames.php was reading Volume Adjustment + as unsigned integer instead of signed integer + * Bugfix: handling of remote files over HTTP & FTP was broken + (thanks Vince) + * Bugfix: incorrect handling of some ASF packets + ASF/Windows Media format now more fully parsed, including Index + Objects + Added several new fourCC video codecs + + +1.4.3: [September-15-2002] James Heinrich + » Now parses ASF / WMV / WMA files + € New file: getid3.asf.php + * Bugfix: RoughTranslateUnicodeToASCII() would return nothing + if didn't find a terminator it was expecting + Added FILETIMEtoUNIXtime() function (for converting 64-bit + Microsoft FILETIME timestamps, used in ASF files and elsewhere, + to UNIX Epoch timestamps) + Added GUIDtoBytestring() and BytestringToGUID() functions + + +1.4.2: [September-12-2002] James Heinrich + » getID3() now requires PHP v4.1.0 or higher because it now is + designed to work with register_globals = off and the new auto- + globals ($_GET, $_SERVER, etc). + * Bugfix: VBR MP3 files with Fraunhofer-style VBR header were not + being correctly detected in most cases + (thanks dkushnerØoddcast*com and mikeØftl*com for sample files) + * Bugfix: IsValidTextEncoding() was broken + * Bugfix: Add stripslashes($EditorFilename) to getid3.write.php + (writing was broken for files with ' or " in the filename) + (thanks mikeØftl*com and kthejoker) + * Bugfix: If there is garbage data between a valid VBR header + frame and a sequence of valid MPEG-audio frames the VBR data is + no longer discarded. (thanks to mikeØftl*com for sample + Fraunhofer-style VBR file produced with MusicMatch v7.2) + € Changed variable system to work with (register_globals = off) + € Moved relevant code into seperate PlaytimeString() function + € Added nl2br() to table_var_dump() for cleaner output + € Now returns the following keys from Fraunhofer-VBR files: + ['VBR_seek_offsets'], ['VBR_seek_offsets_stride'], + ['VBR_offsets_relative'] and ['VBR_offsets_absolute'] + € Added ID3v1matchesID3v2() function and implemented in + getid3.check.php (thanks to "Guest" in the forums for the idea) + Changed amount of data read in getid3.getimagesize.php from 10kB + to entire file. (thanks mikeØftl*com) + Wrapped function_exists() checks around function definitions in + getid3.functions.php + Fixed a lot of E_WARNING and E_NOTICE situations, especially in + ID3-writing code (getid3.putid3.php, etc) + Added checks to make sure all needed data is available for writing + ID3v2 tags + + +1.4.1b5: [May-30-2002] James Heinrich + * Bugfix: Unsynchronise() was broken, now fixed + (thanks mikeØftl*com) + * Bugfix: GenerateID3v2Tag() now correctly uses non-synchsafe + integers for frame size descriptors in ID3v2.3 and ID3v2.2 + (thanks mikeØftl*com) + € Added ['artist'], ['title'], etc keys to root of returned + array to provide a common place to access any returned info + from any file type. Currently gets info from ID3v1, ID3v2, + Ogg, and RIFF/WAVE. Possible returned keys are: + title, artist, album, year, genre, comment, track + € Modified LookupGenre() function to search for either genre based + on numeric ID, or now reverse lookup as well + € Added ['artist'], ['title'], etc keys to ['RIFF'] information + if info tags are present + Added functionality to attach a picture to the ID3v2 tag in + getid3.write.php + Sorted genres into alphabetical order (special 3 at end of list) + in getid3.write.php + Changed the comment-edit field in getid3.write.php to a multi-line +