74 Commits

Author SHA1 Message Date
Deluan
6013e30f7b
Make ffmpeg path configurable, also finds it automatically in current folder. Fixes #1932 2026-01-02 20:22:41 +00:00
Corrado Primier
9a697ecaba
Fix Illumos build - #2067 (#2069)
Build currently fails on Illumos with error `Undefined symbol sendfile`. Fix it by linking `sendfile` explicitly.
2026-01-02 20:21:57 +00:00
Kendall Garner
2fb60b92ca
ReplayGain support + audio normalization (web player) (#1988)
* ReplayGain support

- extract ReplayGain tags from files, expose via native api
- use metadata to normalize audio in web player

* make pre-push happy

* remove unnecessary prints

* remove another unnecessary print

* add tooltips, see metadata

* address comments, use settings instead

* remove console.log

* use better language for gain modes
2026-01-02 20:21:18 +00:00
Deluan
12a9a64c1e
Don't show error when it is nil 2026-01-02 20:21:16 +00:00
Deluan
314a32f0b4
Add test for mapTrackTitle 2026-01-02 20:20:20 +00:00
Deluan
79be042b7f
Add new Artwork Cache Warmer 2026-01-02 20:20:19 +00:00
Deluan
05b95673db
Fix cover detection on M4A containers 2026-01-02 20:20:18 +00:00
Deluan
f82231abaf
Move alternative tag names mapping to metadata 2026-01-02 20:20:16 +00:00
Deluan
b9b4cd6b6c
Invert dependency of metadata and extractors 2026-01-02 20:20:16 +00:00
Deluan
e0bfb22007
Rename log.LevelCritical to log.LevelFatal 2026-01-02 20:20:16 +00:00
Reo
39de2e6a88
Fix Misleading Error Message on unreadable Media due to Permission (#1873)
* fix(taglib): Fix misleading error message on unreadable media - #1576

Signed-off-by: reo <reo_999@proton.me>

* fix(taglib): Add unit test and exclude scan for only unreadable file - #1576

Signed-off-by: reo <reo_999@proton.me>

* fix(taglib): Add unit test and exclude scan for only unreadable file - #1576

Signed-off-by: reo <reo_999@proton.me>

* fix(taglib): Add unit test and exclude scan for only unreadable file - #1576

Signed-off-by: reo <reo_999@proton.me>

* fix(taglib): Add unit test and exclude scan for only unreadable file - #1576

Signed-off-by: reo <reo_999@proton.me>

* fix(taglib): Add unit test and exclude scan for only unreadable file - #1576

Signed-off-by: reo <reo_999@proton.me>

* Fix test and simplify code a bit

We don't need to expose the type of error: `taglib.Parse()` always return nil

* Fix comment

Signed-off-by: reo <reo_999@proton.me>
Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:18:17 +00:00
Zane van Iperen
82c56e1115
Capture "musicbrainz_releasetrackid" tag (#1827)
* db/migration: typo fix

* model: add MbzReleaseTrackID field

* scanner: capture the musicbrainz_releasetrackid tag
2026-01-02 20:15:58 +00:00
Deluan
0870f600c2
Fix warning about mixing value and pointer receivers 2026-01-02 20:14:54 +00:00
Deluan
2ae0520108
Remove //+build tags, as the code does not compile on older versions of Go anymore 2026-01-02 20:14:54 +00:00
Deluan
90bc1981d8
Upgrade Ginkgo to V2 2026-01-02 20:14:21 +00:00
Deluan
b26c22f3e2
Recover from SIGSEGVs in taglib's code 2026-01-02 20:11:39 +00:00
Deluan
b39c5bd11f
Simplify prototype definition for taglib_read 2026-01-02 20:09:31 +00:00
Deluan
22662a1841
Fix ffmpeg bitrate parsing for flac files 2026-01-02 20:08:57 +00:00
Samarjeet
d2593d4b9f
Replace expanded with a dialog (#1258)
* Replace expanded with a dialog

* Change `info` label to "Get Info"

* Rename things for consistency

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:08:00 +00:00
Deluan
ecf65af3ae
Only apply audioStreamRx once 2026-01-02 20:08:00 +00:00
Deluan
b881bf5df8
Support 7.1 (8) channels 2026-01-02 20:08:00 +00:00
Miguel A. Arroyo
e9a7d0c5a2
feat: Adds Audio Channel Metadata - #1036 2026-01-02 20:08:00 +00:00
Deluan
5ddaa96e2b
More info when recovering from panic 2026-01-02 20:07:25 +00:00
Deluan
ce5400eacf
Recover from any possible taglib panics. Fixes #1343 2026-01-02 20:07:25 +00:00
caiocotts
4f35ec6dae
Use wchar_t for TagLib filenames on Windows (#1310)
* Use wchar_t for tagLib filenames on Windows

* Make TagLib default extractor for all platforms.

* Organize imports

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:06:33 +00:00
Deluan
b96344ca93
Some small refactorings 2026-01-02 20:06:13 +00:00
Deluan
19e1553dbe
Import song duration with hundredths when using TagLib
This is how ffmpeg extractor currently works, and it makes album durations more precise.
2026-01-02 20:06:12 +00:00
Deluan
a62472af7b
Fix build 2026-01-02 20:06:10 +00:00
Deluan
79dfba80cb
Use ffmpeg extractor by default on Windows
This is to avoid issue with unicode chars in filenames. See #810
2026-01-02 20:06:10 +00:00
Deluan
4f43c6bec5
Reorganize metadata extractors code 2026-01-02 20:06:10 +00:00
Deluan
dc717c62f1
Use TagLib to detect whether a media file has embedded cover or not 2026-01-02 20:06:10 +00:00
Deluan
442497ae5f
Change fallback extractor to taglib, the default option 2026-01-02 20:06:10 +00:00
Deluan
03e7edc427
Fix multiple id3v2.4 genres appearing as one big concatenated genre 2026-01-02 20:06:09 +00:00
Deluan
1e9e8edc49
Add multiple genres to MediaFile 2026-01-02 20:06:08 +00:00
Deluan
52510a55c4
Add genre tables, read multiple-genres from tags 2026-01-02 20:06:08 +00:00
Deluan
7ddf96904f
Don't panic when taglib returns an error 2026-01-02 19:31:52 +00:00
Deluan
eeeb98adb5
Foundational work to enable multi-valued tags 2026-01-02 19:31:52 +00:00
Deluan
4dd0ebf571
Remove C++11 warning in macOS 2026-01-02 19:31:10 +00:00
Deluan
26b52a49ee
Fix test 2026-01-02 19:31:10 +00:00
Deluan
fbfe1af318
Upgrade TagLib to 1.12 2026-01-02 19:31:10 +00:00
Brian Schrameck
4264a5c6ef
BPM metadata enhancement (#1087)
* BPM metadata enhancement

Related to #1036.

Adds BPM to the stored metadata about MediaFiles.

Displays BPM in the following locations:
- Listing songs in the song list (desktop, sortable)
- Listing songs in playlists (desktop, sortable)
- Listing songs in albums (desktop)
- Expanding song details

When listing, shows a blank field if no BPM is present. When showing song details, shows a question mark.

Updates test MP3 file to have BPM tag. Updated test to ensure tag is read correctly.

Updated localization files. Most languages just use "BPM" as discovered during research on Wikipedia. However, a couple use some different nomenclature. Spanish uses PPM and Japanese uses M.M.

* Enhances support for BPM metadata extraction

- Supports reading floating point BPM (still storing it as an integer) and FFmpeg as the extractor
- Replaces existing .ogg test file with one that shouldn't fail randomly
- Adds supporting tests for both FFmpeg and TagLib

* Addresses various issues with PR #1087.

- Adds index for BPM. Removes drop column as it's not supported by SQLite (duh).
- Removes localizations for BPM as those will be done in POEditor.
- Moves BPM before Comment in Song Details and removes BPM altogether if it's empty.
- Omits empty BPM in JSON responses, eliminating need for FunctionField.
- Fixes copy/paste error in ffmpeg_test.
2026-01-02 19:26:43 +00:00
Deluan
e05468d2dc
FIx ffmpeg output regex too rigid 2026-01-02 19:26:43 +00:00
Deluan
ff0f8a01d7
Fix cover art detection with ffmpeg 4.4 2026-01-02 19:26:42 +00:00
whorfin
35aa640cfe
Improve scanner (#1054)
* Handle subdirectories without rx permission correctly
Allow ogg files w/o metadata, having taglib behave more like ffmpeg

* Fix test for walk_dir_tree, fix full reading of files in permission-
constrained directories, allow directories with leading ellipses

* Sorted directory traversal is preferred, and cleanup tests

* Small refactoring to clean-up `loadDir` function and to remove some "warnings" from IntelliJ

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 19:26:41 +00:00
Deluan
a881b7d667
Comment out flaky tests 2026-01-02 19:22:07 +00:00
Deluan
10cf2372f8
Move project to Navidrome GitHub organization 2026-01-02 19:20:16 +00:00
Deluan
8313d6fe97
Fix log message, as it is also used for taglib 2026-01-02 19:20:12 +00:00
Deluan
ad8dc26f9c
Error should always be nil 2026-01-02 19:20:11 +00:00
Deluan
844ce06e30
Ignore "Cover (front)" tag when using ffmpeg extractor 2026-01-02 19:19:35 +00:00
Deluan
417fcb37e5
Import comments and lyrics 2026-01-02 19:19:34 +00:00