blob: 0173693a384f78fb0b36a15e9126aa8b9a10fb6a [file] [log] [blame]
$Id: NEWS,v 1.27 2002/07/23 13:57:45 t1mpy Exp $
this file will not be updated anymore. Please go to for the latest news
Old News:
2001-09-08 Version 3.8.0pre2
* ID3Lib maintainer has disappeared. Project maintenance taken over by existing
* Many bug fixes -- mostly compilation problems -- more detailed info will be
provided in a later release.
2000-11-20 Version 3.8.0pre1
* First prerelease of 3.8.0 stable.
* Clean separation of interface and implementation to help ensure interface and
binary compatibility of future releases
* Completely revamped implementation of tag reading and writing
* Better debugging output in debug mode
* New documentation (much more still needed)
* Command-line options processing now more cross-platform
* Removed all exception handling
* Minor changes to public interface
* Use of std::string and other STL classes in implementation
* id3com source code removed from source distribution. It has moved to its own
project at
* Many more changes than can be mentioned here: see ChangeLog file
2000-09-07 Version 3.7.13
* id3com is broken; maintainer has disappeared; anyone care to fix it?
* Complete reimplementation of ID3_Field: cleaner, safer, faster, clearer, more
* Much more robust MusicMatch parsing
* Improved conversion from ID3v2 to ID3v1
* Cleaner implementation of file processing
* Examples now use popt for command-line processing
* Improved portability for Macintosh
* Improved build process for platforms without popt or zlib
* New documentation about the MusicMatch tagging format
* Minor updates to ID3_Field interface
* New interface behavior:
// copies entire string (same for unicode_t*)
size_t ID3_Field::Get(const uchar*, size_t)
// for lists, copies a specific item in string (0-based)
size_t ID3_Field::Get(const uchar*, size_t, index_t);
// returns the size in characters for strings, in bytes for all else
size_t ID3_Field::Size() cosnt;
// returns the rendered size of the field
size_t ID3_Field::BinSize() cosnt;
2000-07-07 Version 3.7.12
* Removed debugging output left over from 3.7.11
* Update() now updates all tag types by default, not just ID3v2
* Added a second, optional parameter to ID3_GetComment to find a comment with
a specific description
* Converting an ID3v1 comment to an ID3v2 COMM frame now has the description
"ID3v1 Comment"
* An ID3v2 COMM frame will only be converted to an ID3v1 comment if it has a
description of "ID3v1 Comment"
2000-07-05 Version 3.7.11
* Now parses and converts files with MusicMatch tags (beta - needs testing!)
* Improved file processing routines; cleaned up interface w.r.t. files
* Stripping one type of appended tag strips them all
* New C function: ID3Tag_HasTagType
* New methods for ID3_Tag: GetPrependedBytes(), GetAppendedBytes(),
GetFileSize(), and GetFileName()
* New function for calculating size of non-tag data in file: ID3_GetDataSize()
* Render now parameterized on ID3_TagType
* Bug fixes
2000-06-23 Version 3.7.10
* New and updated example tags
* Corrected unicode parsing and rendering
* Improved parsing/conversion of Lyrics3 v2.00 tags
* Fixed errors with exception handling (thanks to Luca Leonardo Scorcia for the
bug reports)
* Fixed bugs/memory leaks with removing frames and updating tag (thanks to Luca
Leonardo Scorcia for the bug reports)
* Fixed finding of frames with empty text fields (thanks to Luca Leonardo
Scorcia for the bug reports)
* Improved documentation/implementation for uint28
* Added GetTextID() method for ID3_Frame objects
* Tag doesn't render if there aren't any frames; frame doesn't render if there
aren't any fields
* Reordered ID3_AddSyncLyrics() parameters for better consistency with other
helper functions
* ID3_GetSyncLyricsInfo() parameters updated to be more specific
* Several other minor bug fixes
2000-05-28 Version 3.7.9
* Added new test programs in examples/ for creating example tag files
* Further improvements to compile on (Unix) systems that don't have zlib
* Fixed a bug when parsing compressed frames (thanks to Christian Becker for
the bug report and example file)
* Fixed several bugs when writing to files (thanks to Lothar Egger and Peter
Thorstenson for the bug reports)
* New delphi example code for use with id3com (thanks Michael Little)
* Bugfixes for id3com (thanks John Adcock)
* Changed behavior of Link() and Clear() in ID3_Tag: Clear() doesn't remove
file reference, and Link'ing to an already-linked tag just changes the file
* Cleaned up the class interfaces to use size_t, flags_t, and index_t rather
than luint, so as to be more descriptive
* ID3_Tag::RemoveFrame() now returns the pointer to the frame removed (NULL if
not present), thus releasing the tag from its repsonsibility of managing that
frame's memory
* Cleaned up C interface so that appropriate function parameters are const
* Cleaned up implementation of ID3_Tag::Clear() to fix inconsistencies
* Deprecated ID3_Tag's HasV2Tag(), HasV1Tag(), and HasLyrics() methods in
favor of ID3_Tag::HasTagType() method
* All Render() methods now const
* Added GetUnsync() method to ID3_Tag
* Cleaned up internal class definitions (thereby destroying binary
* ID3v2 tag now won't render (and its reported size is 0) if there aren't any
frames (per the spec)
* Fixed a bug when copying frames that prevented rendering compressed frames in
certain situations
* Fixed a bug with resyncing that caused it to improperly handle the last byte
* Fixed a bug with recognizing certain sync signals
* Lots of other minor changes
2000-05-11 Version 3.7.8
* Major bug fix that caused all string frames to be written out as unicode, yet
with the wrong encoding information given
* Bug fix for stripping id3v2 tags that wouldn't remove enough data
* Bug fix for writing id3v1 tags that might add extraneous data to the tag
2000-05-10 Version 3.7.7
* As part of the major rewrite of underlying codebase started with previous
release, this release features near-complete reimplementation of most of the
ID3v2 parsing code - smaller, faster, and better organized
* Much imporved Lyrics3 v2 tag support, along with much improved synchronized
lyrics (SYLT) support (thanks Severino Delaurenti)
* Updated id3com to reflect changes to compression strategy introduced in last
release (thanks John Adcock)
* Cleaned up the parameters to several functions/methods with regards to
* Several new methods to several classes
* A variety of bugfixes
2000-05-03 Version 3.7.6
* Beginning of major rewrite of underlying codebase to improve efficiency,
expandability; the interface will need minor updates through this endeavor
* Major bugfix in ID3_Tag::Strip which was deleting too much info from a file
in certain circumstances
* Add descriptions to frames; can access either through a ID3_Frame method for
a frame object, or via the static method on the class (w/ ID3_FrameID param)
(thanks John Adcock for descriptions, Daryl Pawluk for spotting misorder)
* Frame compression is determined frame by frame, so deprecated
ID3_Tag::SetCompression() for ID3_Frame::SetCompression().
ID3_Tag::SetCompression() is now a no-op (updated C interface accordingly)
* New method ID3_Frame::Contains(ID3_FieldID) for determining if a frame
contains a particular field
* New static method ID3_Tag::IsV2Tag() deprecates ID3_IsTagHeader()
* Other minor bugfixes
2000-04-28 Version 3.7.5
* Fixed nasty bug with rewriting tags to windows files (thanks John Adcock)
* More fixes, improvements to id3com files (thanks John Adcock)
* Added parsing of Lyrics3 v1.00 tags (thanks Severino Delaurenti)
* Updated documentation, but still in flux
* Other minor bugfixes
2000-04-26 Version 3.7.4
* Fixed windows project files so that they all work correctly with new release
(thanks John Adcock, Robert Moon, and Lothar Egger)
* Added a simple VB app to test id3lib using id3com.dll (thanks John Adcock)
* Added better implementation of PRIV (Private) frame (thanks John Adcock)
* Fixed padding logic (thanks John Adcock)
* New "Spec Versioning" system under the hood produces minor interface change
- Defined new enum: ID3_V2Spec (ID3V2_2_0, ID3V2_2_1, ID3V2_3_0, etc.)
- {Get,Set}Spec now used in favor of deprected {Get,Set}Version, GetRevision
- Field definitions updated accordingly; now smaller and more exact
2000-04-24 Version 3.7.3
* C/C++ interface changes:
- Moved V1_LEN* constants into an enumeration so that they can be used as
array size initializers in C. Renamed the constants for consistency
(LEN_V1 -> ID3_V1_LEN, LEN_V1_TITLE -> ID3_V1_LEN_TITLE, etc.)
- Renamed ID3_TagType's enums to be more consistent with rest of library's
enums (V1_TAG -> ID3TT_ID3V1, V2_TAG -> ID3TT_ID3V2, etc.)
- ID3_Err enumeration now defines ID3E_NoError
* C++ interface changes:
- ID3_Frame now has a copy constructor
- ID3_Tag::AddNewFrame deprecated for AttachFrame (no other difference in
- ID3_Tag::Link(char *, bool, bool) deprecated for
ID3_Tag::Link(char *, luint). Now accepts ID3_TagTypes to determine which
tags to parse. i.e, mytag.Link("myfile.mp3", ID3TT_ID3V2 | ID3TT_LYRICS);
- ID3_Tag::operator<<, ID3_Tag::AddFrame: relevant parameters now const
* C interface changes:
- ID3Tag_Parse, ID3Tag_Update, ID3Tag_Strip now return an ID3_Err
- Added functions ID3Tag_UpdateByTagType, ID3Frame_New, ID3Frame_NewID,
* Implementation changes:
- AddFrame, AddFrames now add copies of the frames passed in.
- AttachFrame adds the actual frame passed to it.
- The tag takes responsibility for managing its frames' memory in all cases.
* Miscellaneous changes:
- Moved most enum and struct declarations to include/id3/globals.h so they
are accessible to C interface
- id3com.dsp file is 'fixed', but the project still doesn't compile w/o
- Most doxygen comments moved from tag.h to respective files
- Fixed a bug in id3lib.spec which caused rpm binaries to be compiled without
exception handling
- examples, include/id3/* header files no longer include config.h
- Other minor bugfixes
2000-04-21 Version 3.7.2
* Implementation of C interface for all platforms (in src/c_wrapper.cpp, which
replaces dll_wrapper.cpp)
* Added examples/demo_simple.c which demonstrates basic use of C interface
* Auto-generated documentation no longer shipped with main tarball distribution
* mp3 example files no longer included (still available via CVS)
* Updated Windows project files so that they'll (hopefully) compile cleanly
2000-04-19 Version 3.7.1
* Interface changed: functions in version.{h,cpp} replaced with constants
defined in globals.h
* Added a spec file for creating rpm's
* C interface now defined in include/id3.h, replaces include/src/dll.h;
* Lots of file movement. src/id3/* to src/; src/examples to examples;
* Examples now compiled as installable binaries, rather than 'checks'
* Removed unnecessary files: externals.h, types.h, version.{h,cpp}, dll.h
2000-04-15 Version 3.7.0
* New project management: MusicMatch handed reigns over to Scott Thomas Haug
* New project licensing: LGPL (
* New versioning: 3.7.x is unstable series leading up to 3.8.x stable
* Many bug fixes
* Better windows compatibility, with new windows project files
* Improved documentation, using the Doxygen documentation system
* Extended API, improved implementation
* More supported frames
* Now parses and rerenders unrecognized frame types
* Better version handling in configuration files, similar to the glib library
1999-12-02 Version 3.6.2
* Improved portability: another minor portability fixes, along with the
inclusion of zlib sources and project files for windows compilation.
1999-12-01 Version 3.6.1
* Code movement: moved the header files from src/id3 to include/id3 to allow
for easier windows compilation.
* Improved portability: made changes in several files to improve compilation
on windows. (thanks to elrod for the fixes)
* Random cleanup: some spelling errors fixed, some minor file administration,
1999-11-30 Version 3.6.0
* Code overhaul: more descriptive variable naming, streamlined implementation
logic, cleaner interface specification, generalization of magic numbers and
* Better documentation: transcribed the the "Documentation for ID3Lib 3.05"
document (written by Dirk Mahoney, 22 Nov 1998) into the actual source, using
javadoc-like tags so as to create documentation with the application doc++.
Using this program (and ones like it) allows for creating the documentation
in many different formats, including html, texinfo, man, latex, and the like.
* Added functionality: Added additional functions for simplified access to
common tags, such as artist, title, and album.
* More robust error checking: Improved upon the exception handling already in
place to better handle error conditions, such as invalid tags, unrecognized
frames, and the like. Work is still needed to ensure the library can handle
error situations gracefully.
* Improved portability: restructured the code into a GNU-like directory.
hierarchy. By making use of the GNU tools automake and autoconf, a wide
variety of platforms can be easily supported. This allows for a standard
"./configure; make; make install" installation process, as well as an
equally trivial method for uninstallation: "make uninstall". Likewise,
"make check" builds the example applications (see below).
* Enhanced examples: the src/examples/ subdirectory has both new and improved
examples demonstrating how to make use of id3lib. The original "id3convert"
example now can convert both ways between id3v1 and id3v2 tags, as well as
strip both types of tags off of files via command-line switches.
Additionally, an "id3info" app has been added for displaying id3v1/v2 tag
information about a file.
* Bug fixing: Fixes, fixes, and more fixes. A continual process.
* The zlib library files were removed from the project. The need for zlib
was instead made a requirement through the configuration process via autoconf
and automake.
* All of the id3lib library files were renamed by removing the "id3_" prefix.
Instead, the library files were placed in an id3 subdirectory in the src
directory. Likewise, when the library is installed on a system, an "id3"
subdirectory is created in the indicated include directory, and the header
files are placed there. Pragmatically, this means that code that makes use
of id3lib needs to "#include <id3/tag.h>" rather than "#include <id3_tag.h>".
This was done to create more structure and to avoid clutter in the include
* The versioning strategy has been updated to be more in line with the
"libtool" way. However, in order to be more compatible with how versions
progressed previously, I've taken the approach that many other libraries have
taken: I've "massaged" the version:revision:age numbers so that the resulting
compiled library shows up as (or whatever the current release
is). This is /strongly/ advised against in the libtool documentation, so I'm
considering going to a more "traditional" libtool versioning approach (see
the libtool info page for more information).
There is yet much to do! Please see the TODO file for known bugs and lacking