-
-
Notifications
You must be signed in to change notification settings - Fork 64
Changelog (discontinued)
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 aMemoryStream
- 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, usingSettings.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 totrue
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
- New setting
Fixes
- General : Saving a
Track
after callingTrack.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
andPlaylistReaderFactory
classes have been completely removed -
PictureInfo
constructors do not take anyImageFormat
argument anymore. Use newPictureInfo.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 ofSettings.AddNewPadding
- Use
Settings.PaddingSize
(default = 2048) to define the default/max padding size
- Use
- 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.
UsePlaylistIOFactory.GetInstance().GetPlaylistIO
optional parameters to override default settings :
-
PlaylistFormat.LocationFormatting
allows 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.FileEncoding
allows 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 theTrack
reading the file
Bugfixes
- Tracknumbers containing the
/
ornn/
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 ofstring
v2.7 (2019.03.21)
Functional
- New attributes
TrackTotal
andDiscTotal
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 tofalse
(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 aStream
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