You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Announcements sent to a group of speakers that announce natively (for example a sync group of Home Assistant Voice speakers) were handed to each speaker separately. Those speakers have no way to line up their start, so the rooms played the announcement noticeably out of step, which makes it hard to understand.
A group now only hands the announcement to the individual speakers when all of them can start it together. Otherwise the group plays the clip through its own synchronized stream, as it did before these speakers gained native announcements.
New coordinates_announcement_start hook on the player model, off by default
AirPlay and Sonos players report it, so their groups keep the native per-speaker announcement
Speakers that announce through Home Assistant (ESPHome Sendspin players, HA media players), Snapcast, Bose and Samsung do not, so a group of those plays the announcement in sync through the group stream (music stops and resumes)
A group mixing speakers from different providers also uses the group stream, since only speakers of one provider start together
A group only hands an announcement to each speaker when those speakers can
start it together. Otherwise the group plays the clip through its own
synchronized stream, so all rooms are heard as one. AirPlay and Sonos speakers
start together; speakers that announce through Home Assistant do not.
🚧 Automated critical-issue gate — this PR has an unresolved [CRITICAL] finding from the automated review, so it is kept as a draft (a draft PR can't be merged) until that is resolved. Please address the [CRITICAL] thread(s), then mark it Ready for review.
Maintainers: add the override-critical label to bypass this.
The outputs that announce for the members are resolved on the same state the members act on, so a group never splits between native and fallback playback.
[PROBLEM] A one-member group whose only native output leaves this capability at the default now uses generic stop/play/resume, even though there is no second start to synchronize. Resolve the native outputs first and treat one output as coordinated automatically; require the capability and shared provider only when there are multiple outputs.
Announcements sent to a group of speakers that announce natively (for
example a sync group of Home Assistant Voice speakers) were handed to
each speaker separately. Those speakers have no way to line up their
start, so the rooms played the announcement noticeably out of step,
which makes it hard to understand.
A group now only hands the announcement to the individual speakers when
all of them can start it together. Otherwise the group plays the clip
through its own synchronized stream, as it did before these speakers
gained native announcements.
- New `coordinates_announcement_start` hook on the player model, off by
default
- AirPlay and Sonos players report it, so their groups keep the native
per-speaker announcement
- Speakers that announce through Home Assistant (ESPHome Sendspin
players, HA media players), Snapcast, Bose and Samsung do not, so a
group of those plays the announcement in sync through the group stream
(music stops and resumes)
- A group mixing speakers from different providers also uses the group
stream, since only speakers of one provider start together
**Related issue (if applicable):**
- related issue music-assistant/support#6273
<!--
Tick exactly one box. CI (.github/workflows/pr-labels.yaml) derives
the label from the ticked box and applies it automatically; the
release-notes generator uses that same label to slot this change
into the next release notes.
-->
- [x] 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`
- [ ] Maintenance / chore — `maintenance`
- [ ] CI / workflow change — `ci`
- [ ] Dependencies bump — `dependencies`
- [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.
# What does this implement/fix?
Speakers whose native announcement is relayed through Home Assistant
(ESPHome Voice PE, and HA-relayed Sendspin) ignore the announcement
volume for a solo announcement. But when those same speakers are
announced to as a sync group, the announcement falls back to our own
synchronized stream, and each member got a hidden volume bump it
couldn't see or turn off.
This makes the behaviour consistent. The per-player announcement hints
(volume support, self-applied volume, coordinated start) now live in one
server-side `AnnouncementFeature` set on the player. A speaker whose
native route ignores the level defaults to no adjustment, so there's no
surprise bump. Choosing a volume strategy, or passing an explicit
volume, routes the announcement through the builtin path which applies
the level via the device volume, so it works the same solo and grouped.
**Related issue (if applicable):**
- Follow-up to #6392 (music-assistant/support#6273)
## Types of changes
- [ ] Bugfix (non-breaking change which fixes an issue) — `bugfix`
- [ ] New feature (non-breaking change which adds functionality) —
`new-feature`
- [x] 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`
- [ ] Maintenance / chore — `maintenance`
- [ ] CI / workflow change — `ci`
- [ ] Dependencies bump — `dependencies`
## 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this implement/fix?
Announcements sent to a group of speakers that announce natively (for example a sync group of Home Assistant Voice speakers) were handed to each speaker separately. Those speakers have no way to line up their start, so the rooms played the announcement noticeably out of step, which makes it hard to understand.
A group now only hands the announcement to the individual speakers when all of them can start it together. Otherwise the group plays the clip through its own synchronized stream, as it did before these speakers gained native announcements.
coordinates_announcement_starthook on the player model, off by defaultRelated issue (if applicable):
Types of changes
bugfixnew-featureenhancementnew-providerbreaking-changerefactordocumentationmaintenancecidependenciesChecklist
pre-commit run --all-filespasses.pytestpasses, and tests have been added/updated undertests/where applicable.music-assistant/modelsis linked.music-assistant/frontendis linked.