Squeezelite multiroom en Raspberry Pi: elegir la salida ALSA correcta y por qué evitar dmix
El audio multiroom con Squeezelite se monta con dos decisiones: qué tarjeta de sonido usa cada instancia y cómo se llama el reproductor en Logitech Media Server (LMS). La mayoría de los fallos no están en Squeezelite, están en la capa ALSA que hay debajo.
Identifica la salida antes de tocar nada
Estos tres comandos te dicen qué ve ALSA en la Raspberry Pi:
aplay -l # dispositivos de reproducción
cat /proc/asound/cards # tarjetas detectadas por el kernel
aplay -L # nombres ALSA utilizables
No asumas que la salida USB se llama igual en todas las Pi. Con un DAC USB conectado, aplay -l muestra el nombre exacto que luego va en la configuración; con la salida de auriculares de la placa, el nombre suele ser Headphones.
| Dispositivo | Qué hace | Para Squeezelite |
|---|---|---|
hw:CARD=X,DEV=0 | Acceso directo al hardware, sin mezclado | El preferido: una sola app controla la salida |
plughw:CARD=X,DEV=0 | Convierte formatos si hace falta | Aceptable si la tarjeta no soporta el formato nativo |
dmix:CARD=X,DEV=0 | Mezcla software para varias apps a la vez | Evitarlo: añade inestabilidad en sesiones largas |
sysdefault:CARD=X | Dispositivo por defecto del sistema | Solo para pruebas; no deja claro qué mezclador hay debajo |
Configuración en /etc/default/squeezelite
Si Squeezelite está instalado como servicio, su configuración de arranque vive en /etc/default/squeezelite. Para la salida de auriculares de una Raspberry Pi, la plantilla queda así:
# /etc/default/squeezelite
SL_NAME="salon"
SL_SOUNDCARD="hw:CARD=Headphones,DEV=0"
# SL_SERVER="192.168.1.20" # LMS, descomentar si no se autodescubre
Cambia SL_SOUNDCARD por lo que devuelva aplay -l en tu caso. Un DAC USB puede aparecer como hw:CARD=Audio,DEV=0 o con el nombre del chip; no lo copies a ciegas.
Por qué dmix te corta el audio
El mezclador dmix permite que varias aplicaciones compartan la misma salida, pero lo hace añadiendo una capa de software entre Squeezelite y el DAC. En sesiones largas esa capa es justo lo que se cae. Un montaje documentado desde hace años (Multi-Room Home Audio) pasó de cortes recurrentes a días seguidos sin fallos quitando dmix y asignando el DAC en exclusiva a Squeezelite. Para mantener dos fuentes de audio (música y notificador de calendario), la solución que usó su autor fue brutal pero real: dos DACs y mezcla en hardware.
Que dmix no aparezca en tu SL_SOUNDCARD no es un capricho de formato, es parte de la estabilidad.
Una instancia por habitación con systemd
Para varias habitaciones, crea una unidad systemd por salida. Cada una con su nombre y su dispositivo ALSA:
[Unit]
Description=Squeezelite salon
After=sound.target
[Service]
ExecStart=/usr/bin/squeezelite -n salon -o hw:CARD=Headphones,DEV=0
Restart=always
[Install]
WantedBy=multi-user.target
Guárdala como /etc/systemd/system/squeezelite-salon.service, y actívala con:
sudo systemctl enable --now squeezelite-salon.service
systemctl status squeezelite-salon.service
Repite el bloque para cada habitación cambiando -n (el nombre que verá LMS) y -o (la salida). Si dos instancias comparten la misma salida ALSA, se pisan; si dos comparten el mismo nombre, LMS no sabe cuál es cuál.
Problemas típicos
| Síntoma | Causa más probable | Qué tocar |
|---|---|---|
| No hay sonido y el reproductor arranca | Salida ALSA equivocada | Comprueba aplay -l y cambia SL_SOUNDCARD |
| Cortes aleatorios tras horas | dmix compartía el dispositivo | Usa hw: con acceso exclusivo |
| Dos habitaciones se mezclan | Dos instancias usan la misma salida | Una salida y un nombre por unidad systemd |
| LMS no ve el reproductor | Nombre duplicado o servidor no accesible | Cambia -n y revisa SL_SERVER |