/
/
# What does this implement/fix? Follow-up to #5937 and #5918. The two hooks that tell Music Assistant what a music service already did to its audio — normalize the loudness, crossfade the boundary — were bare properties, so they answered from whatever the provider last served rather than from the playback this question was actually about. For Spotify that meant one queue could read another queue's session: a second queue starting while the first sat idle could get MA's normalization applied on top of Spotify's, or miss it entirely. It also meant the crossfade was reported from a guess about the queue's neighbours, so a single-track play was credited with a fade off a list item that never played. Both hooks now take the stream they are answering about, so the source answers for the right queue and the right boundary. **Related issue (if applicable):** - follow-up to #5937 and #5918 ## Types of changes - [ ] Bugfix (non-breaking change which fixes an issue) — `bugfix` - [ ] New feature (non-breaking change which adds functionality) — `new-feature` - [ ] Enhancement to an existing feature — `enhancement` - [ ] New music/player/metadata/plugin provider — `new-provider` - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) — `breaking-change` - [ ] Refactor (no behaviour change) — `refactor` - [ ] Documentation only — `documentation` - [x] Maintenance / chore — `maintenance` - [ ] CI / workflow change — `ci` - [ ] Dependencies bump — `dependencies` ### Changes - `delivers_normalized_audio` and `delivers_crossfaded_audio` take the `StreamDetails` of the item being asked about instead of being properties - Spotify's Soloist session only answers for the queue it is actually serving - the crossfade is reported per boundary, from what the session fed and played across, instead of from the queue's neighbours - a fresh session's first item is no longer credited with a fade off a predecessor that never played, and a failed feed no longer claims one either - the neighbour check in the streams core is now the fallback for a source that is not serving the queue yet No change to the audio itself: every gate that means "MA applies nothing" still treats a source-performed step the same as none at all. ## Checklist - [x] The code change is tested and works locally. - [x] `pre-commit run --all-files` passes. - [x] `pytest` passes, and tests have been added/updated under `tests/` where applicable. - [ ] For changes to shared models, the companion PR in `music-assistant/models` is linked. - [ ] For changes affecting the UI, the companion PR in `music-assistant/frontend` is linked. - [x] I have read and complied with the project's [AI Policy](https://github.com/music-assistant/.github/blob/main/AI_POLICY.md) for any AI-assisted contributions. - [ ] I have [raised a PR against the documentation repository](https://github.com/music-assistant/music-assistant.io/blob/main/CONTRIBUTING.md) targeting the main or beta branch as appropriate.