Files
audioserver/README.md
T
2026-05-16 22:46:17 +02:00

4.5 KiB

audioserver — Docker Compose stack

Runs on the Audio Server (Pi 5).
Combines Snapserver, Mopidy, and the audiocontrol web frontend in one stack.

internet / LAN
    │
    ▼
┌───────────────────────────────────────┐  Docker network
│  frontend (Nginx :80)                 │
│    /api/hifiberry/ ──────────────────────────→ BeoCreate Pi :5005
│    /api/mopidy/rpc → mopidy:6680     │
│    /ws/mopidy      → mopidy:6680     │
│    /ws/snapcast    → snapserver:1705 │
├───────────────────────────────────────┤
│  mopidy (:6680, :6600 MPD)           │──→ /audio/mopidy.fifo ─┐
├───────────────────────────────────────┤                         │
│  snapserver (:1704, :1705, :1780)    │←── /audio/mopidy.fifo ─┘
│                                       │←── /audio/turntable.fifo ← host service
└───────────────────────────────────────┘

Prerequisites

sudo apt install docker.io docker-compose-plugin
sudo usermod -aG docker $USER   # logout & back in

One-time setup

1. Clone / copy this directory to the Pi 5

scp -r audioserver/ pi@audioserver.local:/opt/audiocontrol/stack
cd /opt/audiocontrol/stack

2. Copy the React source

The audiocontrol/ directory (from audiocontrol.tar.gz) must sit next to docker-compose.yml:

tar -xzf audiocontrol.tar.gz -C /opt/audiocontrol/stack/

3. Configure

cp .env.example .env
nano .env    # set BEOCREATE_HOST, TZ, HIFIBERRY_CARD, etc.

4. Create audio FIFOs

sudo bash scripts/init-pipes.sh

5. Install the turntable capture service

sudo cp scripts/turntable-capture.sh /opt/audiocontrol/scripts/
sudo chmod +x /opt/audiocontrol/scripts/turntable-capture.sh
sudo cp scripts/turntable-capture.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now turntable-capture

Start the stack

docker compose up -d --build
docker compose logs -f          # watch startup

Service ports

Service Port Purpose
Frontend 80 Web UI + API proxy
Snapserver 1704 Snapcast audio streaming
Snapserver 1705 JSON-RPC WebSocket
Snapserver 1780 Snapcast HTTP API
Mopidy 6600 MPD (optional, host access)

Mopidy's HTTP port (6680) is not exposed on the host — accessed only via the frontend Nginx proxy.


Updating

# Pull latest changes, rebuild, restart
docker compose down
docker compose up -d --build

Mopidy local library scan

docker compose exec mopidy mopidy local scan

Useful commands

docker compose ps                          # service status
docker compose logs snapserver            # snapserver logs
docker compose exec mopidy bash           # shell into mopidy
docker compose restart snapserver         # restart one service

Audio routing

Turntable
  → HiFiBerry HAT (ALSA hw:0)
  → turntable-capture.sh (host)
  → /opt/audiocontrol/pipes/turntable.fifo
  → Snapserver (Turntable stream)
  → BeoCreate Pi (Snapclient)

Mopidy
  → GStreamer filesink
  → /opt/audiocontrol/pipes/mopidy.fifo
  → Snapserver (Mopidy stream)
  → BeoCreate Pi (Snapclient)

Both are 48 kHz / 16-bit / stereo to match the BeoCreate DSP profile.


Troubleshooting

Frontend shows "unreachable" for BeoCreate DSP
Check that BEOCREATE_HOST in .env resolves from the Pi 5. Test:

curl http://beocreate.local:5005/api/volume

No audio from turntable
Check the ALSA card name in .env:

arecord -l   # lists available capture devices

Mopidy FIFO blocks on startup
Snapserver must open the FIFO before Mopidy can write to it.
The depends_on: snapserver in docker-compose.yml handles this, but if Snapserver is slow, restart Mopidy:

docker compose restart mopidy

Snapclient on BeoCreate can't connect
Port 1704 must be reachable from the BeoCreate Pi. Check firewall:

sudo ufw allow 1704/tcp   # if ufw is active