Releases: Zeugma440/atldotnet
Version 4.13
Changed
- MP4/M4A : Track timescales are preserved after editing
- MP4/M4A : New chapter track timescale is now 1000 instead of 44100
Fixed
- MP4/M4A : Better management of TRACK.TREF atom when removing and adding chapters back
- MP4/M4A : Only use samples from audio track to detect bitrate
Binaries are available from nuGet
Version 4.12
New
- 8 new standard fields are now available
- Album sort order
- Album artist sort order
- Artist sort order
- Title sort order
- Content group description
- Series title / Movement name
- Series part / Movement index
- Long description (also known as "Podcast description")
- ID3v2 : Support for the
GEOB
frame (see https://github.com/Zeugma440/atldotnet/wiki/Focus-on-non-standard-fields)
Changed
- ID3v2 : the
TIT1
frame is not mapped toTrack.Description
anymore, but to the newTrack.Group
Fixed
- MP4/M4A : Issues when removing metadata from the file
- WAV : Better compliance with word-aligned chunk size (the infamous padding byte located at the end of each chunk)
Binaries are available from nuGet
Version 4.11
Interface breaker
- Progress feedback arguments are now passed to action methods (i.e.
Save
andRemove
) instead ofTrack
's constructor
New
async
support for writing operations : see https://github.com/Zeugma440/atldotnet/wiki/Progress-feedback for all useful information- More precise progress feedback
- New setting to prevent console output when ATL encounters exceptions (thanks to @sandreas)
=>Settings.OutputStacktracesToConsole
, which defaults totrue
for retrocompatibility
Changed
- MP4/M4A : New chapter data is now added to an existing
mdat
atom instead of creating a brand newmdat
atom at the end of the file
Fixed
- MP4/M4A : Prevent chapter data from staying in the file after removal in certain circumstances (kudos to @CooPzZ for his patience)
Binaries are available from nuGet
Version 4.10
Interface breakers
- Write progress feedback is now reported on the calling thread using
Action<float>
instead ofIProgress<float>
Changed
- MP4/M4A : Better handling of non-standard fields (see https://github.com/Zeugma440/atldotnet/wiki/Focus-on-non-standard-fields for more details)
- MP4/M4A : Log a warning when doing stuff that VLC doesn't like
- Saving chapters that have no pictures while other have some
- Saving chapter 1 that doesn't start at
0:00
Fixed
- MP4/M4A : Using
Remove
now properly strips the file from metadata instead of messing it up - MP4/M4A : Fine-tune roundings to fix last chapter image not being visible when last chapter has certain durations
- MP4/M4A : Many fixes to chapters and chapter pictures management
Big thanks to @CooPzZ for his precious help on these improvements !
Binaries are available from nuGet
Version 4.09
Changed
- M4A/MP4 : Write Description using desc instead of ©des
- Priorize Date over Year when writing to a RECORDING_DATE_OR_YEAR field
Fixed : Make date format culture-proof
Binaries are available from nuGet
Version 4.08
Fixed
- MP4/M4A : Atoms with invalid size header that makes them larger than the file are now read
- MP4/M4A : Look for UDTA atom inside TRAK atoms if not found as a direct child of MOOV
- MP4/M4A : Description metadata now uses the correct field identifier
©des
Binaries are available from nuGet
Version 4.07
New
- MP4/M4A : Chapter pictures are now supported
Fixes
- MP4/M4A : Chapters track is now properly detected even when located before the audio track
- MP4/M4A : Integer values from
AdditionalFields
are now written with the correct endianness
Technical
- The library is compatible again with projects set up with Invariant globalization (
<InvariantGlobalization>true</InvariantGlobalization>
)
Thanks to @sandreas for his precious contribution !
Binaries are available from nuGet
Version 4.06
New
- Cuesheets : The encoding used by CUE files is now automatically detected
- Playlists : Support for DPL (Daum PotPlayer) playlists
Changed
- APE : Metadata is now read using
Settings.DefaultTextEncoding
(default : UTF-8) instead of hardcoded UTF-8, as the latter is recommended, not mandatory
Fixed
- When a file is already opened by another app, ATL now raises an exception if you try to update it
Technical
- ATL now includes the C# UDE Port library
- Any exception logged by within ATL is now logged with its
InnerException
Thanks to @melinyi for the comprehensive feedback !
Binaries are available from nuGet
Version 4.05
APE, Vorbis, WMA : Support for unsynchronized lyrics using Track.Lyrics.UnsynchronizedLyrics
Binaries are available from nuGet
Version 4.04
Breaking changes
- Major overhaul of
TagData
and related classes to streamline and simplify some parts of the library-
You won't have any impact if you just use the
Track
class -
If you were using
TagData
, please useTagHolder
instead and mind the following :- Some fields have been renamed to align with the rest of the library
Rating
->Popularity
Pictures
->EmbeddedPictures
- Some fields have been merged to align with the rest of the library
Recording<xxx>
->Date
TrackNumberTotal
andTrackTotal
->TrackTotal
DiscNumberTotal
andDiscTotal
->DiscTotal
- Public type of the "Additional fields" field has been simplified and is now a
IDictionary<string, string>
- Numeral and date fields are now typed instead of being plain strings
- Last but not least, as collections (
EmbeddedPictures
,AdditionalFields
andChapters
) are deep-copied upon access, they can't be edited on the fly anymore. You'll have to edit a temporary collection and feed it toTagHolder
// Old code (won't work anymore) TagData tag = new TagData(); tag.Pictures = new List<PictureInfo>(); PictureInfo pic1 = PictureInfo.fromBinaryData(/*...*/, PIC_TYPE.Unsupported, tagType, 0x01); tag.Pictures.Add(pic1); PictureInfo pic2 = PictureInfo.fromBinaryData(/*...*/, PIC_TYPE.Unsupported, tagType, 0x02); tag.Pictures.Add(pic2);
// New code TagHolder holder = new TagHolder(); // Now use TagHolder instead of TagData // Note that you don't have to worry about holder.Pictures not being initialized anymore IList<PictureInfo> testPictureInfos = new List<PictureInfo>(); // Use a local temporary collection PictureInfo pic1 = PictureInfo.fromBinaryData(/*...*/, PIC_TYPE.Unsupported, tagType, 0x01); // That part hasn't changed testPictureInfos.Add(pic1); PictureInfo pic2 = PictureInfo.fromBinaryData(/*...*/, PIC_TYPE.Unsupported, tagType, 0x02); testPictureInfos.Add(pic2); holder.EmbeddedPictures = testPictureInfos; // Feed the temporary collection to the TagHolder
- Some fields have been renamed to align with the rest of the library
-
- The subset of
IMetaDataIO
with the properties has been extracted and calledIMetaData
- The
IMetaData.Track
field name has been renamed toTrackNumber
andIMetaData.Disc
has been renamed toDiscNumber
to align with the naming of theTrack
class and the oldTagData
class - Most helper classes are now internal to the library - for instance, you can't directly call
StreamUtils
orWavHelper
anymore (don't know why you would in the first place...)
New
- OGG : Support for reading embedded FLAC
- OGG : ATL now properly reads multiplexed OGG files (e.g. Vorbis + Theora) and processes the audio part only
- M4A/MP4 : Support for Publisher and Publishing date fields
- M4A/MP4 : Support for alternate
@des
code for the General description field - New standard field to
Track
andIMetaData
: Product ID - New feature : date values in
AdditionalFields
can be auto-formatted when prefixing them withMetaDataHolder.DATETIME_PREFIX
. That feature can be turned off withSettings.AutoFormatAdditionalDates
Changed
The PictureTokens
field is now deprecated as it is a remain from the era where ATL didn't support embedded images directly. This field will be removed on the next major udpate.
Fixed
WAV LIST INFO chunk now properly supports Recording Date, Genre, Popularity and Track number
Technical
Fixed unit tests for Linux and Unix-based systems (thanks to @sandreas)
Binaries are available from nuGet