z440.atl.core
6.16.0
dotnet add package z440.atl.core --version 6.16.0
NuGet\Install-Package z440.atl.core -Version 6.16.0
<PackageReference Include="z440.atl.core" Version="6.16.0" />
paket add z440.atl.core --version 6.16.0
#r "nuget: z440.atl.core, 6.16.0"
// Install z440.atl.core as a Cake Addin #addin nuget:?package=z440.atl.core&version=6.16.0 // Install z440.atl.core as a Cake Tool #tool nuget:?package=z440.atl.core&version=6.16.0
Audio Tools Library (ATL) for .NET
![.NET](https://img.shields.io/badge/.NET-6-lightgrey.svg)
Optimized with : ReSharper, BenchmarkDotNet and CodeTrack
Current status
What is ATL .NET ?
This library is aimed at giving .NET developers a managed, portable and easy-to-use library to read and write metadata from digital audio files and playlists with one single unified API, whatever the underlying format.
using ATL.AudioData;
// Initialize with a file path
Track theTrack = new Track(audioFilePath);
// Works the same way on any supported format (MP3, FLAC, WMA, SPC...)
System.Console.WriteLine("Title : " + theTrack.Title);
System.Console.WriteLine("Duration (ms) : " + theTrack.DurationMs);
theTrack.Composer = "Oscar Wilde (アイドル)"; // Support for "exotic" charsets
theTrack.AdditionalFields["customField"] = "fancyValue"; // Support for custom fields
theTrack.Save();
// Can alternatively be initialized with a Stream
theTrack = new Track(stream);
You'll find more working code on the Code snippets section of the Documentation, including what you need to manage embedded pictures (e.g. cover), chapters , lyrics and playlists
What is NOT ATL .NET ?
Audio Tools Library .NET is not
a standalone application : it is a library aimed at being used by developers to build software
an audio music player : it gives access to various properties and metadata (see below for the comprehensive list), but does not process audio data into an audible signal
Why open source ?
ATL has been open source since its creation. The original ATL 2.3 source written in Pascal language is still out there on Sourceforge !
By publicly sharing the result of their work, the MAC team has helped many developers to gain tremendous time in creating audio tools.
As a fellow audiophile and developer, I'm proudly extending and improving their initial contribution to the open source community.
Why would I want to use ATL while TagLib is out there ?
ATL has a full C# implementation and does not use any dependency, which makes portability trivial if your app is already based on .NET or Mono frameworks
ATL can auto-detect the format of the audio data you're using, even if the file extension has the wrong label or if you're feeding it raw data witout context
ATL features a flexible logging system which allows you to catch and record audio file reading/writing incidents into your app
ATL supports more audio formats than TagLib, including video game audio formats (SPC, PSF, VGM, GYM)
ATL supports chapters natively
ATL supports lyrics natively
ATL supports BEXT, LIST (general metadata, labels and notes), CUE (cue points), SMPL (sample loops), DISP (displayable objects), XMP, CART and iXML metadata chunks in RIFF / WAV files
ATL supports Playlists and Cuesheets
ATL supports async calls on writing operations
How to use it ? Which platforms and .NET/Mono versions does ATL run on ?
The ATL library runs on .NET Standard 2.1+ / .NET 6+
ATL unit tests run on .NET 6+
The library and its tests have been maintained on Visual Studio Express and Community (currently on Community 2022)
Please refer to the Code snippets section of the Documentation for quick usage
What kind of data can ATL actually read ? From which formats ?
SUPPORTED AUDIO FORMATS AND TAGGING STANDARDS
NB1 : Empty cells mean "not applicable for this audio format"
NB2 : All metadata is read according to Unicode/UTF-8 encoding when applicable, which means any "foreign" character (japanese, chinese, cyrillic...) will be recognized and displayed properly
R= Read / W= Write
Audio format | Extensions | ID3v1.0-1.1 support | ID3v2.2-2.4 support (1) | APEtag 1.0-2.0 support | Format-specific tagging support |
---|---|---|---|---|---|
Advanced Audio Coding, Apple Lossless (ALAC) | .AAC, .MP4, .M4A, .M4B | R/W | R/W | R/W | R/W |
Apple Core Audio | .CAF | (5) | |||
Audible | .AAX, .AA | R/W | R/W | R/W | R/W |
Audio Interchange File Format | .AIF, .AIFF, .AIFC | R/W | R/W | ||
Digital Theatre System | .DTS | ||||
Direct Stream Digital | .DSD, .DSF | R/W | |||
Dolby Digital | .AC3 | R/W | |||
Extended Module | .XM | R/W (2) | |||
Free Lossless Audio Codec | .FLAC | R/W | R/W | ||
Genesis YM2612 | .GYM | R/W | |||
Impulse Tracker | .IT | R/W (2) | |||
Matroska Audio, WebM Audio | .MKA, .WEBM | R/W | |||
Musical Instruments Digital Interface | .MID, .MIDI | R/W (3) | |||
Monkey's Audio | .APE | R/W | R/W | R/W | |
MPEG Audio Layer | .MP1, .MP2, .MP3 | R/W | R/W | R/W | |
MusePack / MPEGplus | .MPC, .MP+ | R/W | R/W | R/W | |
Noisetracker/Soundtracker/Protracker | .MOD | R/W (2) | |||
OGG : Vorbis, Opus, Embedded FLAC, Speex | .OGG, .OGA, .OPUS, .SPX | R/W | |||
OptimFROG | .OFR, .OFS | R/W | R/W | R/W | |
Portable Sound Format | .PSF, .PSF1, .PSF2, .MINIPSF, .MINIPSF1, .MINIPSF2, .SSF, .MINISSF, .DSF, .MINIDSF, .GSF, .MINIGSF, .QSF, .MINIQSF | R/W | |||
ScreamTracker | .S3M | R/W (2) | |||
SPC700 (Super Nintendo Sound files) | .SPC | R/W | |||
Toms' losslesss Audio Kompressor | .TAK | R/W | |||
True Audio | .TTA | R/W | R/W | R/W | |
TwinVQ | .VQF | R/W | |||
PCM (uncompressed audio) | .WAV, .BWAV, .BWF | R/W | R/W | R/W (4) | |
Video Game Music (SEGA systems sound files) | .VGM, .VGZ | R/W | |||
WavPack | .WV | R/W | |||
Windows Media Audio/Advanced Systems Format | .WMA, .ASF | R/W |
(1) : ATL reads ID3v2.2, ID3v2.3 and ID3v2.4 tags, but only writes ID3v2.3 tags and ID3v2.4 tags
(2) : all sample names appear on the track's Comment field. Track title only is editable
(3) : MIDI meta events appear on the track's Comment field
(4) : Support for LIST (general metadata, labels and notes), CUE (cue points), SMPL (sample loops), DISP (displayable objects), BEXT, CART, XMP and iXML metadata chunks
(5) : Reads audio properties only, due to the rarity of sample CAF files tagged with actual metadata
DETECTED FIELDS
Audio properties (from audio data)
Bitrate, Bit depth (bits per sample), Sample rate, Duration, VBR, Codec family, Channels count and arrangement
Standard metadata (from tags)
Titles : Track title, Album title, Original album title, Content group description
People & Organizations : Track artist, Album artist, Original artist, Composer, Conductor, Lyricist, Publisher, Involved people, Series title / Movement name
Count & Indexes : Track number, Total tracks, Disc number, Total discs, Album, Rating, Album sort order, Album artist sort order, Artist sort order, Title sort order, Series part / Movement index
Dates : Recording Year and Date, Original Release Year and Date, Publishing Date
Identifiers : ISRC, Catalog Number
Ripping & Encoding : Encoded By, Encoder
URLs : Audio Source URL
Style : Genre, Beats Per Minute (BPM)
Miscellaneous : Comment, Description, Long description (also known as "Podcast description"), Language, Copyright, Embedded pictures, Chapters, Unsynchronized and synchronized Lyrics using the LRC or ID3v2 format
Custom metadata
Any other field that might be in the tag is readable and editable by ATL. More information can be found on the dedicated page
NB : Most metadata will be read "as is", with minimal alteration. If your file has invalid tags (e.g. chapter start timecode located after file duration), ATL will give you back that information without trying to auto-correct it.
Industry standards
ATL supports the following industry standards :
- Broadcast wave / BEXT (EBU – TECH 3285) for WAV files
- Broadcast wave / CART (AES Standard AES46-2002) for WAV files
- Broadcast wave / iXML for WAV files
- XMP (ISO 16684–1) for MP4/M4A and WAV files
SUPPORTED PLAYLISTS FORMATS
- Read and write : ASX, B4S, M3U, M3U8, PLS, SMIL (including WPL and ZPL), XSPF, DPL (PotPlayer playlist)
- Read-only : FPL (Foobar2000 playlist)
See detailed compatibility table here
SUPPORTED CUESHEETS FORMATS
CUE
What is the roadmap of ATL.NET ?
- Support for Broadcast wave metadata : aXML
- Connectors to other library file formats (e.g. iTunes)
NB : Any user request that can be granted quickly will take priority over the roadmap
Does ATL.NET include code authored by other people ?
ATL.NET is based on :
Audio Tools Library 2.3 by Jurgen Faul, Mattias Dahlberg, Gambit, MaDah and Erik Stenborg (code ported from Pascal to C# and refactored)
MIDI class 1.5 by Valentin Schmidt & Michael Mlivoncic (code ported from PHP to C# and refactored)
Special thanks for their contributions to...
leglubert, tarrats, DividedSE, audiamus
Find this library useful? ❤️
Support it by joining stargazers for this repository. ⭐
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Ude.NetStandard (>= 1.2.0)
-
net6.0
- Ude.NetStandard (>= 1.2.0)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on z440.atl.core:
Package | Downloads |
---|---|
Milki.Extensions.MixPlayer
This library is for timelined sound effects playing. |
|
Sandreas.AudioMetadata
Extension library to improve abilities of atldotnet, an excelent audio metadata library. |
|
FRESHMusicPlayer.Core
Audio library abstraction library designed to make creating an audio player easier :) |
|
MonoStereo
An custom audio engine built using NAudio and PortAudio. |
|
MonoStereo.Slim
A portable NAudio based audio engine. |
GitHub repositories (5)
Showing the top 5 popular GitHub repositories that depend on z440.atl.core:
Repository | Stars |
---|---|
jellyfin/jellyfin
The Free Software Media System - Server Backend & API
|
|
audiamus/AaxAudioConverter
Convert Audible aax files to mp3 and m4a/m4b
|
|
h4lfheart/FortnitePorting
Automation of the Fortnite Porting Process
|
|
NickvisionApps/Tagger
Tag your music
|
|
Miaoyww/NonsPlayer
Multiple music streaming services & High performance.A real music player. 多音源 | 高性能。一个真正的音乐播放器
|
Version | Downloads | Last updated | |
---|---|---|---|
6.16.0 | 126 | 2/8/2025 | |
6.15.0 | 940 | 2/2/2025 | |
6.14.0 | 1,280 | 1/25/2025 | |
6.13.0 | 1,016 | 1/22/2025 | |
6.12.0 | 1,184 | 1/11/2025 | |
6.11.0 | 3,652 | 12/22/2024 | |
6.10.0 | 699 | 12/15/2024 | |
6.9.0 | 2,758 | 12/1/2024 | |
6.8.0 | 5,771 | 11/8/2024 | |
6.7.0 | 1,403 | 11/2/2024 | |
6.6.0 | 5,356 | 10/19/2024 | |
6.5.0 | 5,505 | 9/29/2024 | |
6.4.0 | 6,688 | 9/7/2024 | |
6.3.0 | 1,578 | 9/4/2024 | |
6.2.0 | 596 | 9/1/2024 | |
6.1.0 | 3,753 | 8/11/2024 | |
5.26.0 | 2,451 | 8/4/2024 | |
5.25.0 | 7,515 | 6/2/2024 | |
5.24.0 | 1,078 | 5/27/2024 | |
5.23.0 | 3,822 | 5/1/2024 | |
5.22.0 | 5,461 | 4/17/2024 | |
5.21.0 | 2,533 | 3/27/2024 | |
5.20.0 | 6,250 | 2/20/2024 | |
5.19.0 | 1,588 | 2/12/2024 | |
5.18.0 | 1,476 | 1/31/2024 | |
5.17.0 | 298 | 1/28/2024 | |
5.16.0 | 1,497 | 1/12/2024 | |
5.15.0 | 1,415 | 1/7/2024 | |
5.14.0 | 2,148 | 1/4/2024 | |
5.13.0 | 294 | 1/1/2024 | |
5.12.0 | 6,492 | 11/4/2023 | |
5.11.0 | 1,441 | 10/22/2023 | |
5.10.0 | 652 | 10/18/2023 | |
5.9.0 | 1,556 | 10/8/2023 | |
5.8.0 | 1,369 | 9/21/2023 | |
5.7.0 | 2,235 | 9/15/2023 | |
5.6.0 | 2,038 | 9/1/2023 | |
5.5.0 | 2,262 | 8/25/2023 | |
5.4.0 | 292 | 8/24/2023 | |
5.3.0 | 329 | 8/21/2023 | |
5.2.0 | 576 | 8/18/2023 | |
5.1.0 | 269 | 8/16/2023 | |
5.0.0 | 250 | 8/14/2023 | |
4.36.0 | 2,305 | 7/28/2023 | |
4.35.0 | 469 | 7/24/2023 | |
4.34.0 | 2,241 | 6/20/2023 | |
4.33.0 | 4,497 | 5/10/2023 | |
4.32.0 | 394 | 5/7/2023 | |
4.31.0 | 691 | 4/17/2023 | |
4.30.0 | 326 | 4/15/2023 | |
4.29.0 | 541 | 4/5/2023 | |
4.28.0 | 305 | 4/3/2023 | |
4.27.0 | 355 | 3/31/2023 | |
4.26.0 | 1,800 | 3/27/2023 | |
4.25.0 | 518 | 3/23/2023 | |
4.24.0 | 372 | 3/19/2023 | |
4.23.0 | 457 | 3/12/2023 | |
4.22.0 | 386 | 3/11/2023 | |
4.21.0 | 341 | 3/9/2023 | |
4.20.0 | 898 | 2/26/2023 | |
4.19.0 | 1,861 | 2/7/2023 | |
4.18.0 | 2,361 | 1/5/2023 | |
4.17.0 | 1,935 | 12/22/2022 | |
4.16.0 | 5,504 | 12/9/2022 | |
4.15.0 | 488 | 12/5/2022 | |
4.14.0 | 1,183 | 11/23/2022 | |
4.13.0 | 1,851 | 10/25/2022 | |
4.12.0 | 585 | 10/16/2022 | |
4.11.0 | 745 | 10/10/2022 | |
4.10.0 | 845 | 9/20/2022 | |
4.9.0 | 6,590 | 7/15/2022 | |
4.8.0 | 3,229 | 6/12/2022 | |
4.7.0 | 5,271 | 5/25/2022 | |
4.6.0 | 781 | 5/21/2022 | |
4.5.0 | 769 | 5/18/2022 | |
4.4.0 | 1,959 | 4/9/2022 | |
4.4.0-alpha | 219 | 3/20/2022 | |
4.3.0 | 3,052 | 1/15/2022 | |
4.2.0 | 571 | 1/9/2022 | |
4.1.0 | 562 | 12/14/2021 | |
4.0.0 | 425 | 12/9/2021 | |
3.25.0 | 1,831 | 9/21/2021 | |
3.24.0 | 653 | 9/3/2021 | |
3.23.0 | 732 | 8/6/2021 | |
3.22.0 | 1,845 | 5/27/2021 | |
3.21.0 | 459 | 5/26/2021 | |
3.20.0 | 1,447 | 4/12/2021 | |
3.19.0 | 1,403 | 4/5/2021 | |
3.18.0 | 8,065 | 2/8/2021 | |
3.17.0 | 1,199 | 1/27/2021 | |
3.16.0 | 525 | 1/14/2021 | |
3.15.0 | 1,612 | 12/4/2020 | |
3.14.0 | 709 | 11/22/2020 | |
3.13.0 | 1,772 | 10/27/2020 | |
3.12.0 | 674 | 10/19/2020 | |
3.11.0 | 2,852 | 9/19/2020 | |
3.10.0 | 959 | 9/12/2020 | |
3.9.0 | 773 | 9/6/2020 | |
3.8.0 | 707 | 8/31/2020 | |
3.7.0 | 2,034 | 8/10/2020 | |
3.6.0 | 1,914 | 6/28/2020 | |
3.5.0 | 1,315 | 5/22/2020 | |
3.4.1 | 794 | 5/5/2020 | |
3.4.0 | 584 | 5/5/2020 | |
3.3.0 | 1,439 | 3/29/2020 | |
3.2.0 | 680 | 3/19/2020 | |
3.1.0 | 840 | 2/17/2020 | |
3.0.0 | 688 | 2/16/2020 | |
2.16.0 | 4,830 | 1/10/2020 | |
2.15.0 | 697 | 12/18/2019 | |
2.14.0 | 951 | 11/24/2019 | |
2.13.0 | 1,004 | 9/23/2019 | |
2.12.0 | 1,027 | 7/26/2019 | |
2.11.0 | 881 | 6/10/2019 | |
2.10.0 | 726 | 5/22/2019 | |
2.9.0 | 912 | 4/30/2019 | |
2.8.0 | 739 | 4/4/2019 | |
2.7.0 | 705 | 3/21/2019 | |
2.6.0 | 717 | 3/10/2019 | |
2.5.0 | 1,420 | 9/2/2018 | |
2.4.2 | 1,317 | 6/23/2018 | |
2.4.1 | 1,033 | 6/18/2018 | |
2.4.0 | 1,019 | 6/15/2018 | |
2.3.0 | 1,285 | 1/7/2018 | |
2.2.1 | 1,212 | 11/18/2017 | |
2.2.0 | 1,186 | 11/18/2017 | |
2.1.0 | 1,249 | 10/22/2017 | |
2.0.1 | 1,010 | 9/24/2017 |
___INTERFACE-BREAKING CHANGES___
is now type instead of . This will break your code is you're using low-level classes instead of .
You can use to safely retrieve the track number value as an integer.
NB : Using will fail when confronted to LP notation (e.g. A1).
_Changed_
- New field to manipulate track numbers as strings (useful for storing LP information, e.g. A1)
NB1 : That field writes non-numeric values on tagging systems that support them technically, even if specs are against it (ID3v2)
NB2 : That field won't write non-numeric values on tagging systems that do not support them technically (e.g. MP4/M4A, ID3v1, SPC700)
_Fixed_
- MKA : Properly read files whose first Cluster doesn't start at Timestamp 0
- M3U : Fix wrong parsing of title/artist separator ()
_Technical_
- Releases are now fully automated (thanks to @kitsumed) and now include symbols, deterministic build and compiler flags
***Binaries are available from nuGet***