Skip to content

Fix replaygain mapping for Subsonic Artist Radio and Top Songs #4328

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 8, 2025

Conversation

deluan
Copy link
Member

@deluan deluan commented Jul 8, 2025

Description

This PR fixes the bug where artist radios (similar songs) were ignoring replaygain information, causing songs to be played at much louder volumes than when played manually.

The issue was that the getSimilarSongs2 and getTopSongs Subsonic API endpoints return replaygain data in a different format (replayGain object) than what the frontend expects (rgAlbumGain, rgAlbumPeak, rgTrackGain, rgTrackPeak fields). This PR adds proper mapping between these formats to ensure replaygain information is correctly passed to the playback system.

Related Issues

Fixes #4299

Type of Change

  • Bug fix
  • New feature
  • Documentation update
  • Refactor
  • Other (please describe):

Checklist

Please review and check all that apply:

  • My code follows the project's coding style
  • I have tested the changes locally
  • I have added or updated documentation as needed
  • I have added tests that prove my fix/feature works (or explain why not)
  • All existing and new tests pass

How to Test

  1. Enable replaygain in Navidrome settings
  2. Ensure your music library has files with replaygain tags
  3. Start an artist radio from any artist page
  4. Verify that songs play at the expected volume level (consistent with manual playback)
  5. Test both "Play top songs" and "Play similar songs" functions
  6. Compare the perceived volume with manually playing the same songs

Screenshots / Demos (if applicable)

N/A - This is an audio-related bug fix with no visual changes.

Additional Notes

  • The fix adds a mapSubsonicSong function that maps the replayGain object from Subsonic API responses to the expected frontend format
  • Comprehensive test coverage has been added to verify the mapping works correctly for both radio and top songs functionality
  • This change only affects the artist actions (radio and top songs) - other playback methods were already working correctly
  • The mapping is defensive and only adds the replaygain fields if they exist in the source data

This PR addresses the volume inconsistency issue reported in #4299 by ensuring replaygain information is properly preserved when starting artist radios.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @deluan, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses the proper handling of replay gain information received from the Subsonic API, specifically for songs retrieved through artist-related actions like 'radio' and 'top songs'. I've introduced a new mapping mechanism to standardize how this data is stored and ensured its correct application, backed by new unit tests to confirm the functionality.

Highlights

  • ReplayGain Mapping: I've implemented a new utility function, mapReplayGain, to extract replayGain information (album gain/peak, track gain/peak) from Subsonic song objects. This data is now mapped to new top-level rg* fields on the song object for easier access and consistency.
  • Integration: The mapReplayGain utility has been integrated into the playTopSongs and playSimilar actions. This ensures that replay gain data is correctly processed and available when playing songs from Subsonic radio and top songs lists, providing a more consistent listening experience.
  • Testing: I've added comprehensive unit tests in ArtistActions.test.jsx to verify that replay gain information is correctly mapped and accessible for songs fetched via both the 'radio' (similar songs) and 'top songs' actions. This includes mocking Subsonic API responses with replayGain data and asserting the correct transformation.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly adds replay gain mapping for Subsonic radio and top songs, along with corresponding tests. The review focuses on improving code quality by making the mapping function pure to avoid side-effects, reducing code duplication in both the business logic and test files, and making test assertions more concise and readable. These changes will improve the maintainability of the code.

Signed-off-by: Deluan <deluan@navidrome.org>
Signed-off-by: Deluan <deluan@navidrome.org>
@deluan deluan marked this pull request as ready for review July 8, 2025 18:07
@deluan deluan changed the title Fix replaygain mapping for Subsonic radio Fix replaygain mapping for Subsonic Artist Radio and Top Songs Jul 8, 2025
@deluan deluan merged commit 65961cc into master Jul 8, 2025
35 checks passed
@deluan deluan deleted the lj02zu-codex/fix-mapping-of-replaygain-info branch July 8, 2025 20:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Artist radios seem to ignore replaygain information
1 participant