aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs
AgeCommit message (Collapse)Author
2025-10-02Fix mka-style tagging key (#14936)gnattu
2025-09-26Fixing the UFID field value giving a warning and not being correctly ↵Corentin Malbet
processed (#14851)
2025-07-07Update dependency z440.atl.core to v7 (#14391)renovate[bot]
2025-07-04Merge pull request #14309 from shanepowell/MediaInfoFixsShane Powell
Fix PeopleHelper.AddPerson Exceptions due to bad meta-data extracts.
2025-07-02Read ALBUMARTISTS in preference to ARTISTS when PreferNonstandardArtistsTag setEvan
Jellyfin implemented ARTISTS multivalue tag but did not implement the equivalent ALBUMARTISTS multivalue tag. This change adds ALBUMARTISTS support. If present and PreferNonstandardArtistsTag is set, ALBUMARTISTS will be used in preference to ALBUMARTIST. As with ARTISTS, the intent is to offer support for multiple album artists without affecting software that does not read ALBUMARTIST as a multivalued tag. Example album before/after: ALBUM : Amici e Rivali ARTIST : Lawrence Brownlee / Michael Spyres album_artist : Lawrence Brownlee ARTISTS : Lawrence Brownlee;Michael Spyres ALBUMARTISTS : Lawrence Brownlee;Michael Spyres Before ALBUMARTISTS support, Jellyfin reports: Album Artist: Lawrence Brownlee [hyperlinked] On each track Artist: Lawrence Brownlee, Michael Spyres After ALBUMARTISTS support, Jellyfin reoprts: Album Artist: Lawrence Brownlee [hyperlinked], Michael Spyres [hyperlinked] On each track Artist: none shown (no other artists in source metadata) This is ideal as both key artists are hyperlinkable from their albums. References to other products implementing ALBUMARTISTS: - Navidrome: https://www.navidrome.org/docs/usage/tagging-guidelines/#handling-multiple-artists-and-collaborations - Kodi: https://kodi.wiki/view/Music_tagging#albumartists - MusicBrainz Picard: https://picard-docs.musicbrainz.org/en/variables/variables_basic.html (_albumartists tag)
2025-06-23Fix missing music genre metadata (#14332)theguymadmax
2025-05-18Terminate at null char for audio tags (#14100)gnattu
2025-05-09Reject invalid replaygain tag value (#14082)gnattu
2025-05-04Recognize file changes and remove data on change (#13839)Tim Eisele
2025-04-26Merge pull request #13847 from Shadowghost/rework-chapter-managementTim Eisele
Rework chapter management
2025-04-13Safeguard against null value trimming in tag results (#13908)Tim Eisele
2025-03-12Merge branch 'master' into sort-nfo-dataMarc Brooks
2025-03-12Backport pull request #13694 from jellyfin/release-10.10.zgnattu
Clone fallback audio tags instead of use ATL.Track.set Original-merge: 9eb2044eae50c69be4cb3830887bdd5da15ee920 Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: Bond_009 <bond.009@outlook.com>
2025-02-28Add support for reading and storing Recording MBIDs from file metadata (#12173)Dominik Krivohlavek
* Add recording metadata provider * Add recording MBID * Save recording MBID during probing * Set recording ID in probe result normalizer * Add recording external media type * Reimplement after changes in upstream * Rename variable * Rename variable * Revert "Set recording ID in probe result normalizer" This reverts commit 9dd18c8aba3f970a5816a13a33acf3d58b0e440f. * Fix setting provider ID * Simplify code * Fix comment * Add missing using
2025-02-25Clean up usings and honor SortNameMarc Brooks
2025-02-09Backport pull request #13490 from jellyfin/release-10.10.zgnattu
Correctly handle audio number tag fallbacks Original-merge: 117d2082aa4f46f470c361c39f4a2189014260ee Merged-by: joshuaboniface <joshua@boniface.me> Backported-by: Bond_009 <bond.009@outlook.com>
2025-02-05Moved Trimmed to Jellyfin.Extensions.StringExtensionsMarc Brooks
2025-02-03Merge branch 'master' into sort-nfo-dataMarc Brooks
2025-02-03Backport pull request #13182 from jellyfin/release-10.10.zgnattu
Don't fall back to ffprobe results for multi-value audio tags Original-merge: f97f38585b69c7d810b5708a3c9d822a3ac545b6 Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: Bond_009 <bond.009@outlook.com>
2024-11-19Merge remote-tracking branch 'origin/master' into feature/EFUserDataJPVenson
2024-11-19Backport pull request #13003 from jellyfin/release-10.10.zgnattu
Only set first MusicBrainz ID for audio tags Original-merge: e2434d38c54b90070bc4eaffa7e3c5cdd9934602 Merged-by: crobibero <cody@robibe.ro> Backported-by: Joshua M. Boniface <joshua@boniface.me>
2024-10-09WIP porting new Repository structureJPVenson
2024-09-30Disable ATL's internal ID3v2.2/3 splitting (#12751)gnattu
2024-09-28Workaround ATL tag parsing (#12705)gnattu
2024-09-24Move GetCustomTagDelimiters to Extensiongnattu
2024-09-24Sanitize CustomTagDelimiters server sidegnattu
The API requires an array type and does not support runtime generated default value. Use server side helper function to sanitize it into char.
2024-09-18Sort embedded collections in Nfo filesMarc Brooks
Because the Nfo files emit the collections as they are in-memory, the files are not stable in format, genres, tags, albums, people, etc. are emitted in random orders. Add ordering of the collections when emitting the Nfo files so the file remains stable (unchanged) when underlying media information doesn't change. In the process of this, it became clear that most of the providers and probes don't trim the strings like people's names, genre names, etc. so did a pass of Trim cleanup too. Specific ordering: (alphabetical/numeric ascending after trimming blanks and defaulting to zero for missing numbers) BaseItem: Directors, Writers, Trailers (by Url), Production Locations, Genres, Studios, Tags, Custom Provider Data (by key), Linked Children (by Path>LibraryItemId), Backdrop Images (by path), Actors (by SortOrder>Name) AlbumNfo: Artists, Album Artists, Tracks (by ParentIndexNumber>IndexNumber>Name) ArtistNfo: Albums (by Production Year>SortName>Name) MovieNfo: Artists Fix Debug build lint Fix CI debug build lint issue. Fix review issues Fixed debug-build lint issues. Emits the `disc` number to NFO for tracks with a non-zero ParentIndexNumber and only emit `position` if non-zero. Removed the exception filtering I put in for testing. Don't emit actors for MusicAlbums or MusicArtists Swap from String.Trimmed() to ?.Trim() Addressing PR feedback Can't use ReadOnlySpan in an async method Removed now-unused namespace
2024-09-17Rework PR 6203Shadowghost
2024-09-07Add non-standard multi-value audio tag support (#12385)gnattu
2024-07-29Remove redundant NaN checkgnattu
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29Remove test vargnattu
Co-authored-by: Cody Robibero <cody@robibe.ro>
2024-07-29Make internal value separator a constantgnattu
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29Remove redundant checkgnattu
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29Apply suggestions from code reviewgnattu
Co-authored-by: Cody Robibero <cody@robibe.ro>
2024-07-29Check if the metadata is supported for title fallbackgnattu
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29Migrate to z440.atl instead of TagLib-Sharpgnattu
The ATL lib provides a lot of advantages to the TagLib we are currently using. Notably: - auto-detect the format of the audio data, even if the file extension has the wrong label, and provides unified API for different file types. - supports more audio formats than TagLib - supports lyrics natively - supports playlists and cuesheets - srovides relatively simple and controllable way for non-standard fields, enable us to implement compatibility features instead of waiting for lib updates - is actually maintained Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-17Add TrySetProviderId extensionBond_009
2024-07-17Fix (another) ArgumentNullException while scanning musicBond_009
``` [2024-07-17 14:31:18.202 +02:00] [ERR] [19] MediaBrowser.Providers.Music.AudioMetadataService: Error in "Probe Provider" System.ArgumentNullException: Value cannot be null. (Parameter 'value') at System.ArgumentNullException.Throw(String paramName) at System.ArgumentNullException.ThrowIfNull(Object argument, String paramName) at System.ArgumentException.ThrowNullOrEmptyException(String argument, String paramName) at MediaBrowser.Model.Entities.ProviderIdsExtensions.SetProviderId(IHasProviderIds instance, String name, String value) in /home/loma/dev/jellyfin/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs:line 121 at MediaBrowser.Model.Entities.ProviderIdsExtensions.SetProviderId(IHasProviderIds instance, MetadataProvider provider, String value) in /home/loma/dev/jellyfin/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs:line 151 at MediaBrowser.Providers.MediaInfo.AudioFileProber.FetchDataFromTags(Audio audio, MediaInfo mediaInfo, MetadataRefreshOptions options, Boolean tryExtractEmbeddedLyrics) in /home/loma/dev/jellyfin/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs:line 330 at MediaBrowser.Providers.MediaInfo.AudioFileProber.FetchAsync(Audio audio, MediaInfo mediaInfo, MetadataRefreshOptions options, CancellationToken cancellationToken) in /home/loma/dev/jellyfin/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs:line 139 at MediaBrowser.Providers.MediaInfo.AudioFileProber.Probe[T](T item, MetadataRefreshOptions options, CancellationToken cancellationToken) in /home/loma/dev/jellyfin/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs:line 105 at MediaBrowser.Providers.Manager.MetadataService`2.RunCustomProvider(ICustomMetadataProvider`1 provider, TItemType item, String logName, MetadataRefreshOptions options, RefreshResult refreshResult, CancellationToken cancellationToken) in /home/loma/dev/jellyfin/MediaBrowser.Providers/Manager/MetadataService.cs:line 800 ```
2024-06-24Backport pull request #12126 from jellyfin/release-10.9.zgnattu
Try to add extracted lyrics during scanning Original-merge: 25f02658f08c484338d4288e048a6e71dfb39d96 Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: Joshua M. Boniface <joshua@boniface.me>
2024-06-01Backport pull request #11859 from jellyfin/release-10.9.zgnattu
Use music metadata from ffprobe when TagLib fails Original-merge: b8a0cf6a9e627c3137700b71d3e52e6e11f8d96b Merged-by: crobibero <cody@robibe.ro> Backported-by: Joshua M. Boniface <joshua@boniface.me>
2024-05-17Backport pull request #11621 from jellyfin/release-10.9.znfmccrina
Handle exception for unexpected audio file YEAR tag values Original-merge: d5dc4435d9d0e2a1bbbb64a9133134afa9655da6 Merged-by: crobibero <cody@robibe.ro> Backported-by: Joshua M. Boniface <joshua@boniface.me>
2024-05-05Fix external LRC files being incorrectly overwritten during the initial scan ↵gnattu
(#11480)
2024-04-28Improve audio normalizationBond_009
* Move calculation of LUFS to a scheduled task as it's pretty slow * Correctly calculate album LUFS * Don't try to convert replaygain tags to LUFS values
2024-04-24Always scan ReplayGain tag (#11418)Bond-009
2024-04-23Don't run ffprobe a second time for music file (#11419)Bond-009
2024-04-14fix: fallback to artist if album artist not providedCody Robibero
2024-04-12Fix track MBID in audio metadata (#11301)Dominik Krivohlavek
2024-03-16Merge pull request #11155 from sel10ut/bugfix/fix-releasedate-tagBond-009
Fix parsing of audio PremiereDate property
2024-03-15fix: fallback to TagLib date parsing if ffprobe failssel10ut
Bring back hardcoded PremiereDate with correctly parsed year from TagLib, if ffprobe cannot get it
2024-03-14fix: change parsing of audio title tagsel10ut