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
When using Sendspin for home theater surround sound, each client/speaker needs to be assigned a specific surround channel role (e.g. "Surround Left", "Center", "LFE", "Height Top Middle"). Currently there is no protocol-level concept of speaker role/position, and no UI in Music Assistant to configure this.
Problem
Today, configuring even a stereo pair requires manual steps (as discussed in #10):
Go to each client's settings
Change output_channel_mode from Stereo to Left or Right
Group the speakers
Create a permanent sync group
For surround sound, this approach doesn't scale. A 9.2.1 Atmos setup has 12 discrete channels — each speaker needs to know its role, and the server needs to route the correct channel to each client.
Proposed additions
1. Protocol: speaker_role field in client capabilities
Extend the player@v1_support (or a future player@v2) with a speaker_role field:
Server-side splitting (companion issue): That issue covers the audio demuxing; this issue covers the metadata/routing/UI layer.
static_delay_ms: Already exists per client — essential for surround calibration (distance compensation).
Prior art
Apple HomePod: Spatial audio with automatic speaker role detection based on room position
Sonos: Surround setup wizard in the app — assigns Arc (front), Sub, Era 300 (surround) to specific roles
WiSA: Automatic speaker discovery and channel assignment via proprietary protocol
Denon HEOS: Surround group configuration in the HEOS app
Why this matters
Without speaker role assignment, surround over Sendspin requires users to manually configure channel modes, create groups, and mentally track which ESP32 is which channel. This is fragile and not user-friendly.
A proper surround channel assignment system would make Sendspin the first open-source protocol with a complete wireless surround sound solution — from transport (50μs sync) to channel routing to user configuration.
Summary
When using Sendspin for home theater surround sound, each client/speaker needs to be assigned a specific surround channel role (e.g. "Surround Left", "Center", "LFE", "Height Top Middle"). Currently there is no protocol-level concept of speaker role/position, and no UI in Music Assistant to configure this.
Problem
Today, configuring even a stereo pair requires manual steps (as discussed in #10):
output_channel_modefrom Stereo to Left or RightFor surround sound, this approach doesn't scale. A 9.2.1 Atmos setup has 12 discrete channels — each speaker needs to know its role, and the server needs to route the correct channel to each client.
Proposed additions
1. Protocol:
speaker_rolefield in client capabilitiesExtend the
player@v1_support(or a futureplayer@v2) with aspeaker_rolefield:{ "supported_roles": ["player@v1"], "player@v1_support": { "speaker_role": "surround_left", "speaker_group_type": "surround_9_2_1" } }Suggested channel identifiers (following ITU-R BS.2051 / Dolby Atmos naming):
front_leftfront_centerfront_rightsurround_leftsurround_rightback_leftback_rightlfetop_front_lefttop_front_righttop_middletop_back_lefttop_back_right2. Protocol:
surround_groupgroup typeExtend the group model to support a
surroundgroup type where:speaker_rolewithin the group3. Server/UI: Surround setup wizard
Music Assistant (or any Sendspin server) should provide:
How it relates to existing work
speaker_role: left+speaker_role: right. Surround generalizes this.static_delay_ms: Already exists per client — essential for surround calibration (distance compensation).Prior art
Why this matters
Without speaker role assignment, surround over Sendspin requires users to manually configure channel modes, create groups, and mentally track which ESP32 is which channel. This is fragile and not user-friendly.
A proper surround channel assignment system would make Sendspin the first open-source protocol with a complete wireless surround sound solution — from transport (50μs sync) to channel routing to user configuration.