Skip to content

[REQUEST] UI/protocol support for surround channel assignment per client (speaker role mapping) #75

@eugenio

Description

@eugenio

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):

  1. Go to each client's settings
  2. Change output_channel_mode from Stereo to Left or Right
  3. Group the speakers
  4. 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:

{
  "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):

Identifier Description
front_left Front Left
front_center Center
front_right Front Right
surround_left Surround Left
surround_right Surround Right
back_left Surround Back Left
back_right Surround Back Right
lfe Low Frequency Effects (subwoofer)
top_front_left Height Front Left
top_front_right Height Front Right
top_middle Height Top Middle
top_back_left Height Back Left
top_back_right Height Back Right

2. Protocol: surround_group group type

Extend the group model to support a surround group type where:

  • Each client has a unique speaker_role within the group
  • The server routes the matching channel from the multichannel source to each client
  • The group enforces that all standard surround positions are filled (or explicitly marked as phantom/virtualized)

3. Server/UI: Surround setup wizard

Music Assistant (or any Sendspin server) should provide:

  • A surround group creation flow that shows a room layout diagram
  • Drag-and-drop assignment of discovered Sendspin clients to speaker positions
  • Automatic channel routing based on assignment
  • Calibration support (delay per speaker, level matching)

How it relates to existing work

  • [REQUEST] Stereo Pair Support? #10 (Stereo Pair): Stereo pair is speaker_role: left + speaker_role: right. Surround generalizes this.
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions