$Id: NEWS,v 1.27 2002/07/23 13:57:45 t1mpy Exp $ this file will not be updated anymore. Please go to http://sourceforge.net/news/?group_id=979 for the latest news Old News: 2001-09-08 Version 3.8.0pre2 * ID3Lib maintainer has disappeared. Project maintenance taken over by existing developers * 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 http://sourceforge.net/projects/id3com * 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 efficient * 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!) * New tag type enums: ID3TT_LYRICS3, ID3TT_LYRICS3V2, ID3TT_MUSICMATCH, ID3TT_PREPENDED, ID3TT_APPENDED. Deprecated ID3TT_LYRICS * 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 reference * 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 compatibility) * 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 constness * 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 (sorry!) * 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 behavior) - 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, ID3Frame_Delete * 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 errors - 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 again 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 (http://www.gnu.org/copyleft/lesser.html) * 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 (http://www.stack.nl/~dimitri/doxygen/) * 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 (http://www.gtk.org) 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, etc. 1999-11-30 Version 3.6.0 * Code overhaul: more descriptive variable naming, streamlined implementation logic, cleaner interface specification, generalization of magic numbers and strings. * 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 " rather than "#include ". This was done to create more structure and to avoid clutter in the include directory. * 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 id3lib.so.3.6.0 (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 features...