~ubuntu-branches/debian/sid/ampache/sid

« back to all changes in this revision

Viewing changes to modules/getid3/docs/changelog.txt

  • Committer: Package Import Robot
  • Author(s): Charlie Smotherman
  • Date: 2013-08-27 13:19:48 UTC
  • mfrom: (1.2.9)
  • Revision ID: package-import@ubuntu.com-20130827131948-1czew0zxn6u70dtv
Tags: 3.6-rzb2752+dfsg-1
* New upsteam snapshot.  Contains important bug fixes to the installer.
* Correct typo in ampache-common.postrm.
* Remove courtousy copy of php-getid3, during repack.  Closes: #701526
* Update package to use dh_linktree to make the needed sym links to the
  needed system libs that were removed during repack.
* Update debian/rules to reflect upstreams removing/moving of modules.
* Update debian/ampache-common.install to reflect upstreams removal of files.
* Updated to use new apache2.4 API. Closes: #669756
* Updated /debian/po/de.po thx David Prévot for the patch.  Closes:  #691963
* M3U import is now ordered, fixed upstream.  Closes: #684984
* Text input area has been resized so IPv6 addresses will now fit, fixed
  upstream.  Closes:  #716230
* Added ampache-common.preinst to make sure that the courtousy copies of code
  dirs are empty so dh_linktree can do it's magic on upgrades.

Show diffs side-by-side

added added

removed removed

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