Commit Graph

6 Commits

Author SHA1 Message Date
david 3e730942ba audio-bridge: full pipewire-pulse.conf with context.modules
Alpine's pipewire-pulse is a minimal build that doesn't load
/usr/share/pipewire/pipewire-pulse.conf (no context.modules).
Provide a full config that includes all required modules.
2026-07-01 07:16:42 -07:00
david fff67f2baa audio-bridge: custom pipewire-pulse.conf with TCP 4713 listener
Alpine's pipewire-pulse binary is stripped (-a option removed); the
only way to configure listening address is via config file. Add
/etc/pipewire/pipewire-pulse.conf that overrides server.address to
include tcp:4713 alongside the default unix:native socket.

Server addresses now:
- unix:native (for in-container clients)
- tcp:4713 (for sibling containers connecting via PULSE_SERVER env var)
2026-07-01 07:14:20 -07:00
david 6c896f5165 audio-bridge: start pipewire-pulse separately with TCP 4713 listener
Alpine's pipewire-pulse package ships the daemon binary but doesn't
auto-load the PA bridge module on alpine. We need to start pipewire-pulse
as a separate process with -a tcp:4713 so PA clients (librespot, mopidy)
can connect via TCP.

Layout:
- pipewire: audio server (native protocol)
- pipewire-pulse: PA-compat bridge, listens on tcp:4713 + unix:/tmp/pulse-socket
- wireplumber: session manager (loads BT modules, hot-plug handling)
2026-07-01 07:12:02 -07:00
david 6b55a16581 audio-bridge: remove --print-pid from dbus session (broken in containers)
dbus-daemon --print-pid=N opens fd N for writing; under tini this fails
with 'Writing to pipe: Invalid argument'. Just use --fork for daemonization.
2026-07-01 07:09:54 -07:00
david c2f14b60aa audio-bridge: fix bluetoothd path + add session dbus + cleanup stale pid
- bluetoothd at /usr/lib/bluetooth/bluetoothd (not in PATH on alpine)
- Add session dbus via dbus-daemon --session (pipewire needs it)
- Clean up stale dbus.pid files on startup (host volume persists)
2026-07-01 07:06:25 -07:00
david 573821426c audio: add PipeWire+BT audio-bridge, mopidy (Qobuz+local), librespot (Spotify Connect)
- audio-bridge: alpine + pipewire + pipewire-pulse + wireplumber + bluez + dbus + tini
  Routes audio from librespot/mopidy/phone-BT to USB DAC (Q5K) via ALSA.
  Privileged + host network for bluetoothd HCI access.
- mopidy: built from python:3.12-slim-bookworm + pip (no ghcr.io dep).
  Qobuz (auth from developer.qobuz.com) + local files. PA bridge to audio-bridge.
- librespot: built from rust:1.85.1 on RPi (cross-compile too slow under qemu).
  Spotify Connect target named 'Klubhaus'. PA bridge to audio-bridge.

Both mopidy and librespot build locally to avoid ghcr.io auth/rate-limit issues.
PEQ stays on Q5K side (Qudelix app, 20 bands) for source-independent EQ.
2026-07-01 04:49:15 -07:00