changelog.txt 153 KB

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