Skip to content

Changelog (discontinued)

Zeugma440 edited this page Aug 14, 2022 · 1 revision

Counting from v3.22, the Github releases page will become the reference changelog.

The present page will be kept online for archive purposes.


v3.21 (2021/05/26)

Fixed

  • MPEG : Better detection of actual frame headers
  • MP4 : Fix crash when instanciating a Track using a MemoryStream
  • ID3v2 : Handle exotic track/track total separators without crashing (e.g. trackNum//trackTotal)

v3.20 (2021/04/12)

New

New Track.TechnicalInformation field that contains low-level information about the file. For this release, TechnicalInformation contains the offset and size of the audio data chunk (useful when you want to find the part of an audio file that does not change when editing metadata).

Changed

Track : All setters for physical properties are now internal for clarity's sake, as ATL cannot be used to alter sample rates, bitrates and other non-meta info that is published by Track.


v3.19 (2021/04/05)

Fixed

  • Vorbis-tag : Fields with multiple values are now properly detected

e.g. ARTIST=aaa ARTIST=bbb will be displayed as aaa;bbb when Settings.DisplayValueSeparator is ; (customizable)

  • Vorbis-tag : The Artist field is now saved as a multiple value tag, using Settings.DisplayValueSeparator as separator

e.g. aaa;bbb will be saved as ARTIST=aaa ARTIST=bbb when Settings.DisplayValueSeparator is ; (customizable)


v3.18 (2021/02/08)

New

  • ID3v2 : Automatically detect size descriptor format of the chapter CTOC frame (plain integer or synch-safe integer; both are actually used)

Fixed

  • ID3v2.3 : Comment content description is now written with a BOM, as per specs

v3.17 (2021/01/27)

New

Support for Apple Core Audio (CAF) files

Fixed

ID3v2 : fix writing URL link frames with the ID3v2.3 format

Warning : If your app relies on Format.ID or hardcoded constants to identify audio formats (e.g. WAV, MP3, OGG...), be advised the IDs of the formats produced by AudioDataIOFactory.getFormats and its sister methods have changed (previous value * 1000).

The values of the CID_xxx public constants of AudioDataIOFactory have also changed accordingly. Consider reviewing your code if your have hardcoded these values instead of referring to the constants themselves.

The rationale for that is to be able to create stable sub-format IDs to properly tag containers like CAF files that package other audio formats. Every "major" format is now a multiple of 1000, and thus has the freedom to create up to 1000 sub-format IDs depending on what is contained inside the parsed file.


v3.16 (2021/01/14)

New

Track.Save and Track.Remove now return a boolean : true if the operation succeeds; false if it doesn't

Changed

Changed behaviour : when editing a file solely tagged with ID3v1, the library enriches it with the tagging format defined in Settings.DefaultTagsWhenNoMetadata

Warning : If your app has to keep ID3v1 tags alone when editing them (old behaviour), you'll have to set Settings.EnrichID3v1 to false before calling Track.Save

Fixed

WAV : Editing files containing a non-standard IXML tag with a tree data structure now works properly


v3.15 (2020/12/04)

New fields available

  • Track.AudioFormat : format of the audio data
  • Track.MetadataFormats : list of the formats of available metadata. The list is empty when the file is untagged.

v3.14 (2020/11/22)

New

  • MP4/M4A : New Settings.MP4_readChaptersExclusive setting to have more control over which kind of chapters is read from the file (Quicktime or Nero).
    Default is the usual behaviour where ATL reads any of the two, and ends up with Nero chapters when both are present.

Changed

  • Every chapter starts at the end of the one before it, whatever value is given to EndTime.

That allows to quickly write chapter addition code by only giving StartTime and Title, e.g.

theTrack.Chapters.Add(new ChapterInfo(0, "Prologue: Mei"));
theTrack.Chapters.Add(new ChapterInfo(790 * 1000, "Chapter One: Bobbie"));
theTrack.Chapters.Add(new ChapterInfo(2214 * 1000, "Chapter Three: Prax"));

=> Creating non-chaptered "gaps" between your chapters is not possible anymore.

Fixed

  • MP4/M4A : shwm, hdvd, ©mvc and ©mvi fields are now properly written as integers
  • MP4/M4A : Fix integer "class 21" values being written and read as 8-bit ints only (now handles dynamically 8/16/24/32-bit integers)
  • MP4/M4A : Fix certain cases when the library couldn't properly detect the stco/co64 atoms
  • MP4/M4A : Fix writing truncated Quicktime chapter titles when they contain non-western characters
  • MP4/M4A : Fix Quicktime chapters not being written properly (regression from v3.13)
  • WAV : Fix certain LIST INFO metadata (e.g. title and comments) not appearing when read by Windows

v3.13 (2020/10/27)

Documentation

Public classes are better documented (more inline doc should appear when coding)

Fixed

Fix a few specific crashes with WAV files (thanks to @skolmer)

Technical

  • RAM usage is optimized when updating large files
  • ID3v2 / specs compliance: Unused chapter offsets are now properly neutralized

v3.12 (2020/10/19)

New Settings.ForceDiskIO option to force using disk I/O for tag editing, resulting in higher disk usage, but lower RAM usage.


v3.11 (2020/09/19)

Prevent crash when calling the library from multiple threads simultaneously


v3.10 (2020/09/12)

New

  • Support for Audible files (AAX & AA)
  • Support for "Publishing date" metadata

Fixed

  • WAV : Fix performance issue when encountering non-text fields (e.g. NITR) in the LIST/INFO structure

v3.09 (2020/09/06)

MP4/M4A : Fix writing Quicktime chapter data for track durations > 1:30


v3.08 (2020/08/31)

Fixed : ID3v2 now handles user-defined WXXX values properly


v3.07 (2020/08/10)

  • Fixed : TAK does not accept ID3v2 tagging anymore
  • Changed : When writing to an empty file, if none of the allowed metadata formats is compatible with the target file, the library falls back to the first supported metadata format of the target file

v3.06 (2020/06/28)

  • MP4/M4A : Specific tags written by Windows to the moov.udta.Xtra atom (e.g. rating) can be read and edited

v3.05 (2020/05/22)

  • MP4/M4A : It is now possible to create metadata from scratch when the file does not have any udta atom
  • MP4/M4A : Properly handle padding changes
  • ID3v2 : ATL does not read nor write ID3v2 tags to MP4/M4A files anymore (was not spec-compliant anyway)

v3.04.1 (2020/05/05)

WAV : Fix reading NumSampleLoops


v3.04 (2020/05/05)

WAV : Support for sample metadata (including loop points)


v3.03 (2020/03/29)

NuGet package now includes documentation.


v3.02 (2020/03/19)

Fixed : Unnecessary processing when reaching the end of the stream that can sometimes lead to a crash


v3.01 (2020/02/17)

Fixed : Popularity field can now be saved


v3.00 (2020/02/16)

PLEASE NOTE THAT .NET FRAMEWORK 3.0 SUPPORT IS DROPPED.

ATL NOW DEPENDS ON .NET FRAMEWORK 4.5

New

  • ATL can now send feedback about writing progress through IProgress. See sample code for more information.
  • New ATL.Version.getVersion method to get ATL's current version programmatically
  • ID3v2 : New Settings.ID3v2_forceAPICEncodingToLatin1 to control the format of picture descriptions. It defaults to true because Latin-1 which is a pre-requisite for Windows to display images as covers.
  • ID3v2 : New Settings.ID3v2_forceUnsynchronization to force unsynchronization when writing ID3v2 tags (default : off)
  • MP4/M4A : Support for unsynchronized lyrics
  • MP4/M4A : Support for non-interleaved Quicktime chapters
    • New setting MP4_createNeroChapters to force writing Nero chapters to MP4/M4A files
    • New setting MP4_createQuicktimeChapters to force writing Quicktime chapters to MP4/M4A files
    • New setting MP4_keepExistingChapters to force keep existing chapters in MP4/M4A files, regardless of the other chapter creation options

Fixes

  • General : Saving a Track after calling Track.Chapters.Clear does clear all chapters
  • General : Calling Track.EmbeddedPictures after setting values doesn't reset these values anymore
  • ID3v2 : Embedded pictures now appear as icons when viewing the file in Windows explorer
  • MP4/M4A : Artist field is now saved with the proper field code and is readable by 3rd party software
  • MP4/M4A : Prevents file corruption when writing data in certains scenarios
  • MP4/M4A : It is now possible to create metadata from scratch when the file does not have any meta atom
  • MP4/M4A : It is now possible to create Nero chapters from scratch when the file does not have any chpl atom
  • MP4/M4A : Nero Chapters timestamps > 10 minutes are now written properly

! Breaking changes to interface !

  • Obsolete MetaDataIO.PictureStreamHandler field has been completely removed
  • Obsolete Track.Rating field has been completely removed
  • Obsolete IPlaylistReader and PlaylistReaderFactory classes have been completely removed
  • PictureInfo constructors do not take any ImageFormat argument anymore. Use new PictureInfo.fromBinaryData static constructor to directly load binary data and auto-detect image format

For instance, instead of doing this

PictureInfo newPicture = new PictureInfo(Commons.ImageFormat.Gif, PictureInfo.PIC_TYPE.CD);
newPicture.PictureData = System.IO.File.ReadAllBytes("E:/temp/_Images/pic1.gif");

you should now do this

byte[] data = System.IO.File.ReadAllBytes("E:/temp/_Images/pic1.gif");
PictureInfo newPicture = PictureInfo.fromBinaryData(data, PictureInfo.PIC_TYPE.CD);

v2.16 (2020.01.10)

Changes

  • Add M4B to the supported extensions (under AAC/MP4/M4A)
  • MP4/M4A : Better handling of certain files where the stsz atom has extra properties

v2.15 (2019.12.18)

Changes

  • ID3v2 : Reads TDRC fields written in ID3v2.3 headers (MediaMonkey behaviour)
  • MP4/M4A : ©day field can now store an entire date as well as a simple year

v2.14 (2019.11.24)

Bugfixes

  • ID3v2 : ATL gracefully fails when encountering badly formatted header frames

v2.13 (2019.09.23)

Bugfixes

  • Duration of very short OGG files is now reported correctly
  • Files with an invalid APE tag now gracefully fail (no more stacktrace in logs)

Technical

  • File I/O buffer size can be customized using Settings.FileBufferSize

NB : Defining a buffer that is larger than the file size itself is not supported. Don't set 200MB, that will crash the app for any file smaller than that.


v2.12 (2019.07.26)

Bugfixes

  • Metadata on OPUS files can now be saved properly

v2.11 (2019.06.10)

Functional

  • New Track.Date field to manage recording date (no date = DateTime.MinValue)
  • New Track.Lyrics field to manage both unsynchronized and synchronized Lyrics
    NB : so far only the ID3v2 standard (USLT/SYLT) has been implemented

Technical

  • ID3v2, VorbisComment, FLAC, MP4 : Padding is now properly managed
    • Use Settings.AddNewPadding (default = false) to add padding to files that don't have it
      NB : Existing padding will always be managed whatever the value of Settings.AddNewPadding
    • Use Settings.PaddingSize (default = 2048) to define the default/max padding size
  • FLAC : Better performance when updating files with embedded pictures
  • Overall : Tags with a complex structure (e.g. MP4, FLAC, WMA) are buffered when written, which consumes a little more memory but speeds up the whole writing operation considerably (updated file is written on disk in one go instead of moving all bytes around for each updated section of the tag)
  • WMA : Multiple picture fields are now persisted in the right zones of the file

Bugfixes

  • FLAC VENDOR field won't be added to ID3v2 tags anymore when a FLAC file is tagged with ID3v2

! Breaking changes to interface !

  • Settings.EnablePadding has been renamed Settings.AddNewPadding

v2.10 (2019.05.22)

Functional

  • Adjustments to ATL.Playlist default settings to allow maximum compatibility with music players when writing playlist files. Comprehensive tests have been made on Winamp 5.8, VLC 3.0.6, MusicBee 3.3.7016, AIMP 4.51 (2084), Foobar2000 1.4.4 and iTunes 12.9.4.102.

    Use PlaylistIOFactory.GetInstance().GetPlaylistIO optional parameters to override default settings :

    • PlaylistFormat.LocationFormattingallows to format locations according to four different conventions
      • Filepath
      • Winamp URI ("file:" + filepath)
      • Microsoft URI ("file://" + filepath)
      • RFC URI (URI encoded according to RFC-3986)

    • PlaylistFormat.FileEncodingallows to encode the playlist file according to three different conventions
      • UTF-8 with file Byte order Mark
      • UTF-8 without file Byte order Mark
      • ANSI (aka Latin-1 aka ISO-8859-1)

v2.9 (2019.04.30)

Functional

  • New ATL.Playlist package that allows playlist writing (except for FPL that will remain read-only because the Foobar2000 team won't publish any spec of their playlist format that keeps evolving - see their FAQ)
  • Old ATL.PlaylistReaders classes are now marked as obsolete

Technical

  • Format.copyFrom method restored
  • New Track constructor that allows passing a file path without the Track reading the file

Bugfixes

  • Tracknumbers containing the / or nn/ values are now correctly handled

v2.8 (2019.04.04)

Functional

  • ID3v2 tags can now be written in ID3v2.3 standard by setting Settings.ID3v2_tagSubVersion = 3 before saving your tag
  • ID3v2 chapters : New Track.ChaptersTableDescription field to add the descriptive TIT2 subframe to the CTOC frame

Bugfixes

  • Using UTF-16 with ID3v2.4 now works properly
  • ID3v2 chapters are now properly read by the iOS Apple Podcast App and the Overcast podcast grabber
  • Fix anomaly when writing more than one tag in one single Save operation

! Breaking changes to interface !

  • ChapterInfo.Url type is now ChapterInfo.UrlInfo instead of string

v2.7 (2019.03.21)

Functional

  • New attributes TrackTotal and DiscTotal that provide the number of tracks / discs
  • New options in Settings class concerning Track and Disc fields formatting
    • UseLeadingZeroes : If true, use leading zeroes; number of digits is aligned on TOTAL fields or 2 digits if no total field
    • OverrideExistingLeadingZeroesFormat : If true, UseLeadingZeroes is always applied regardless of the format of the original file; if false, formatting of the original file prevails

Technical

  • ID3v2 : Existing padding doesn't disappear anymore when saving a tag; it evolves along the size of the tag (reduced if size increases, and the other way around)

Bugfixes

  • "Total tracks" (resp. "Total discs") fields formatted in the same field of the track (resp. disc) number (e.g "4/7") won't disappear anymore when updading a file
  • Existing Track and Disc fields will keep their leading zeroes formatting if Settings.OverrideExistingLeadingZeroesFormat is set to false (default)
  • FLAC : Embedded pictures are now actually saved in FLAC files
  • SPC : Fix badly formatted INTEGER or LENGTH fields when adding them to an empty file
  • SPC : Fix tagIO_RW_SPC_Existing unit test failing when batch-testing under Visual Studio
  • MP4 : Extended fields can now be written (e.g. ----:com.apple.iTunes:FANCYNAME)
  • VQF, Vorbis, ID3v2 : Year field is now properly saved

v2.6 (2019.03.10)

Functional

  • New attribute ChannelsArrangement Track.ChannelsArrangement that provides the number of channels and their arrangement (e.g. "Mono (1/0.0)", "Joint Stereo", "Center - Left - Right (3/0.0)"...)

Bugfixes

  • A couple edge-cases fixed on Util methods

v2.5 (2018.09.02)

Technical

  • Track can now be constructed using a Stream that contains your file's raw data. Its MIME-type or file extension has to be provided as well. This is useful when information is already in memory before calling ATL, or if you want to keep control on how the resource is accessed.

Functional

  • New attribute double Track.DurationMs that provides the duration of the track in milliseconds. int Track.Duration is maintained for retrocompatibility's sake.

v2.4.2 (2018.06.23)

Quickfix release

ID3v2 : Allow saving a field code with more than 4 characters (supported through TXXX extended fields)


v2.4.1 (2018.06.18)

Quickfix release

All tag systems : Avoid crashes when parsing a huge album or track number (>65535)


v2.4 (2018.06.15)

Technical

  • NuGet package is now truly multi-target and supports .NET 3.0, .NET Core 2.0 and .NET Standard 2.0

Functional

  • WAV : ID3v2 support (ID3v2 structure embedded as a RIFF chunk)
  • WAV : iXML support through AdditionalFields
  • WAV : BEXT support through AdditionalFields
  • WAV : LIST INFO support through AdditionalFields

Bugfixes

  • ID3v2 : Inserting chapters in a chapter-free file now writes a CTOC field in addition to the CHAP fields
  • ID3v2 : Fix parsing of TXXX fields with a key but without any value (TXXX...KEY\0\0 and TXXX...KEY\0)

v2.3 (2018.01.07)

Functional

  • AIFx Comments support (any ANNO chunk will be converted into COMT chunk when updating the file)
  • GYM tags now written with proper UTF-8 encoding
  • Images embedded in ID3v2 chapters can now be read and written (one image per chapter)
  • Gzipped VGM files (.VGZ extension) can now be read
  • ID3v2, APEtag, Vorbis, WMA and MP4 Ratings now fully tested, including "half-stars"

Tech stuff

  • CueSharp library dropped for custom, straight-to-the-point Cuesheet reader
  • Reworked embedded image reading to reduce memory footprint

! Breaking changes to interface !

  • Settings.InternalValueSeparator and Settings.DisplayValueSeparator are now chars instead of strings
  • TagData.PictureInfo and TagData.MetaFieldInfo are now standalone classes -> PictureInfo and MetaFieldInfo

Bugfixes

  • ID3v2 : Fix "Rating" field reading
  • AIFx : Fix embedded ID3v2 tag writing (should be located after SSND frame, not before, which is not documented anywhere)
  • DSF : Fix embedded ID3v2 tag writing (now updates correctly file size descriptor in header)

v2.2 (2017.11.18)

Functional

  • ID3v2 chapters support (CTOC and CHAP frames)
  • Vorbis chapters support
  • AAC Nero chapters support
  • AAC Quicktime chapters support (reading only)
  • GYM and VGM file formats support
  • Smarter detection of ID3v2 comments. Comments with description (e.g. "Catalog number") now appear as additional fields, and are persisted as TXXX fields, except for iTunes-specific tags (iTunNORM, iTunSMPB, iTunPGAP) that need to appear inside a "Comment" field

Bugfixes

  • ID3v2 : Fix unrecognized ID3v2.2 / ID3v2.3 fields as "standard" fields when rewriting the tag with ID3v2.4 standard (e.g. "RVA" was persisted as "TXXX RVA" instead of "RVA2")
  • ID3v2 : Fix unwanted text encoding byte in URL frames (e.g. WPUB)

v2.1 (2017.10.23)

Tech stuff

  • No external dependency to OpenCover
  • Compatibility with .NET Core 2.0 & .NET Standard 2.0 (System.Drawing is replaced by Commons.ImageUtils)

Functional

  • Track class now allows to retrieve all embedded pictures (not just the first one)
  • Public methods to easily add, update and remove metadata using the Track class
  • Public methods to easily add, update and remove embedded pictures using the Track class

Bugfixes

  • ID3v2 : Read cleaner values from UTF-16 encoded TXXX fields

v2.0 (2017.09.24)

Start of current changelog

Clone this wiki locally