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
The Local Audio Out provider exposes locally attached soundcards as players in Music Assistant. On Linux it enumerates PulseAudio sinks (USB DACs, built-in audio, HDMI, remap sinks, virtual sinks, etc.); on macOS it enumerates PortAudio/CoreAudio devices. It leverages the Sendspin provider for synchronization and timing, registering each device as an external Sendspin bridge client.
Key Features
Automatic Device Discovery: On Linux, enumerates all PulseAudio output sinks via pactl --format=json — returns native sample rate and format regardless of active stream state. On macOS, enumerates via PortAudio/sounddevice
Native Format Negotiation(Linux): Each PA sink advertises its native sample rate and bit depth (16, 24, or 32-bit) so Music Assistant transcodes to the correct format — no unnecessary resampling
Sendspin Integration: Each device is registered as a Sendspin bridge client, enabling synchronized multi-room playback
Hardware Volume Control: PulseAudio sink volume on Linux, CoreAudio on macOS, with automatic fallback to software scaling
Software Volume Control: Per-device volume and mute via PCM sample scaling when hardware control is unavailable or disabled
Stable Player IDs: Uses UUIDv5 derived from device name + host API index so players persist across restarts
Hardware Volume Ceiling(Linux): Configurable per-provider PA sink volume ceiling applied at startup
Bundled pactl binary for sink enumeration (fallback if pulseaudio-utils not installed)
bin/lib/
Bundled libpulsecommon shared library required by the bundled pactl binary
Dependencies
Sendspin provider (depends_on: sendspin): Required for audio synchronization and player management
libpulse-simple(Linux): PulseAudio simple client library accessed via ctypes for direct PCM streaming to sinks
pactl(Linux): Used for sink enumeration via --format=json. Provided by pulseaudio-utils in the MA base image, with a bundled binary as fallback
pulsectl(Linux): Python PulseAudio bindings used for hardware volume and mute control
sounddevice(macOS): Python bindings for PortAudio, used for audio output and device enumeration
numpy: Used for PCM volume scaling
Configuration
Setting
Platform
Description
Volume control mode
All
hardware (OS-level), software (PCM scaling), or disabled
Hardware volume ceiling
Linux only
Sets PA sink volume on startup to cap maximum output level (0–100, default 50)
Expanding Outputs with Stereo Pair Remap Sinks
Multi-channel sound cards (5.1, 7.1 surround) expose a single multi-channel PulseAudio sink by default. To use each channel pair as an independent MA player, PulseAudio module-remap-sink can split a multi-channel sink into individual stereo sinks — one per channel pair (front, rear, side, center/LFE). The Local Audio Out provider discovers and registers all remap sinks automatically alongside physical sinks, so no additional configuration is needed in MA once the remap sinks exist.
For Home Assistant OS users, the companion addon Pulse Audio Stereo Pairs automates this setup. It runs as a lightweight HA addon that creates the remap sinks on startup and reacts to audio device hot-plug and unplug events, removing the need to configure remap sinks manually via pactl. Once both the addon and this provider are running, each channel pair of every multi-channel card appears as a separate player in Music Assistant.
Notes
On Linux, multi-channel sinks (5.1, 7.1) are supported — the bridge opens a stereo stream and PulseAudio handles channel remapping automatically.
Virtual sinks created by module-remap-sink (stereo pairs split from multi-channel cards) are fully supported and are the recommended way to expose individual speaker pairs as independent MA players.
On Linux, pactl --format=json is used for enumeration because it always reports the sink's native sample rate and format, unlike pulsectl/libpulse which reports the currently negotiated stream format when streams are active.
On Linux, hardware volume control uses pulsectl to set the PA sink volume directly. If pulsectl is unavailable the provider falls back to software volume automatically.
On macOS, hardware volume control uses CoreAudio. If that fails the provider falls back to software volume automatically.