MPD su RaspberryPI
Cosa serve
- un raspberrypi (testato su 4)
- debian (testato con debian 12 aarch64
- podman (opzionale)
Podman per l’interfaccia web. Si puo’ fare senza, ma non l’ho testato.
MPD
Installazione
# apt install mpd
Configurazione
editiamo /etc/mpd.conf
Ecco cosa ho modificato nel mio file di configurazione.
Se erano commentati (la riga cominciava con #
), sono stati decommentati
music_directory "/media/sda1/Musica"
questa è la cartella che contiene la mia musica
bind_to_address "0.0.0.0"
bind_to_address "/run/mpd/socket"
Il primo è l’indirizzo di rete su cui risponderà mpd, 0.0.0.0
per rispondere su tutte le interfacce di rete.
Il secondo per potersi collegare via socket locale. Servirà per l’interfaccia web.
zeroconf_enabled "yes"
zeroconf_name "Music Player @ %h"
Sul mio raspberry ho installato Avahi, quindi ho abilitato le opzioni. Non ho ancora visto se funziona
audio_output {
type "httpd"
name "My HTTP Stream"
encoder "lame" # optional, vorbis or lame
port "8000"
bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
## quality "5.0" # do not define if bitrate is defined
bitrate "128" # do not define if quality is defined
# format "44100:16:1"
# max_clients "0" # optional 0=no limit
}
Qui abilito l’output via stream http, usando il server di streaming http integrato in mpd.
L’encoder è impostato a “lame” per avere lo stream in mp3. Dai miei test, il client per android malp funziona molto meglio con lo stream in mp3. Io ho deciso di impostare il bitrate a 128, vedete voi.
Non ho impostato una password nel file di configurazione perché il mio mpd sarà raggiungibile solo in rete locale a casa.
Avvio
Configurato, non resta che avviare il servizio
# systemctl enable --now mpd
A questo punto dovreste potervi collegare all’indirizzo di controllo:
http://vostroserver:6600
che dovrebbe rispondere qualcosa tipo
OK MPD 0.23.5
e anche all’indirizzo dello streaming
http://vostroserver:8000
che non risponde perché non c’è nessun brano in esecuzione.
Client android malp
mapl è installabile da f-droid.
Per prima chiede di creare il profilo.
- Nome profilo: quello che volete
- Hostname or ip: indirizzo del vostro server
- Port: 6600
- Password: vuoto, non ho impostato una password
- Enable streaming from serve: abilitato
- Streaming url: http://vostroserver:8000
A questo punto si puo’ andare su Library, cercare una canzone, selezionarla pigiare “play”. Dovrebbe partire l’indicatore di avanzamento ma non si sente nulla.
Aprendo il player, menu ⋮
si seleziona “star streaming” e si aspetta. dopo una decina di secondi dovrebbe partire l’audio.
Si, bisogna farlo ogni volta.
Client web
Come client web usiamo myMPD, la documentazione è qui: https://jcorporation.github.io/myMPD/
Per l’installazione ci sono tre opzioni:
- Docker/Podman
- Loro repository Debian
- Compilazione da sorgente
La compilazione non sembra complicata, ma per questa volta ho scelto di usare Podman, che ho già installato sul raspino per altre cose (pihole).
L’interfaccia web sarà raggiungibile all’indirizzo
htttp://vostroserver:6680/
installazione
Per tenere le cose in ordine, creo una cartella /opt/mympd
dove ci metto quello che serve
Creo lo script bash che avvierà il container: /opt/mympd/run.sh
#!/bin/bash
set -e
NAME="${1:-mympd}"
# girerà come utente pi:pi, che è il mio utente sul raspi
# e che ha accesso alla cartella musica
RUNAS="1000:1000"
# creo le due cartelle per salvare configurazione e cache tra i riavvi
# del container
MYMPD_BASE="${MYMPD_BASE:-$(dirname "$0")}"
[[ -d "$MYMPD_BASE" ]] || mkdir -p "$MYMPD_BASE" || { echo "Couldn't create storage directory: $MYMPD_BASE"; exit 1; }
mkdir -p "${MYMPD_BASE}/workdir"
mkdir -p "${MYMPD_BASE}/cachedir"
chown -R "$RUNAS" "${MYMPD_BASE}/workdir" "${MYMPD_BASE}/cachedir"
# avvio il container
podman run \
--rm \
--name "$NAME" \
-p 6680:8080 \
-u 1000:1000 \
-e UMASK_SET=022 \
-e MYMPD_SSL=false \
-e MYMPD_HTTP_PORT=8080 \
-v /run/mpd:/run/mpd \
-v "${MYMPD_BASE}/workdir:/var/lib/mympd" \
-v "${MYMPD_BASE}/cachedir:/var/cache/mympd" \
\
-v "/media/sda1/Musica:/media/sda1/Musica:ro" \
-v "/var/lib/mpd/playlists:/var/lib/mpd/playlists:ro" \
\
ghcr.io/jcorporation/mympd/mympd
⚠ OCCHIO!
Ricodarsi di modificare
"/media/sda1/Musica":/media/sda1/Musica:ro"
con il percorso alla giusta cartella musica
rendo lo script eseguibile
# chmod +x run.sh
creo il service unit per systemd: /opt/mympd/mympd.service
[Unit]
Description=Web-based MPD client
After=network-online.target mpd.service
[Service]
TimeoutStartSec=0
Restart=always
ExecStart=/bin/bash /opt/mympd/run.sh %n
[Install]
WantedBy=multi-user.target
Lo installo nel sistema e lo avvio
# ln -s /opt/opt/mympd/mympd.service /etc/systemd/system/
# systemctl daemon-reload
# systemctl start mympd
Ora la vostra interfaccia dovrebbe essere raggiungibile su
htttp://vostroserver:6680
Configurazione
myMPD si collega a mpd via socket unix, quindi non c’è bisogno di dirgli dove trovare mpd, pero’ possiamo dirgli dove trovare lo stream e di farlo partire in automatico quando c’è qualche brano in esecuzione
Facciamo: menu (icona in alto a sx) -> Impostazioni -> Caratteristiche
- Riproduzione locale
- Abilita: check
- Porta del flusso: 8000
- URI del flusso: http://vostroserver:8000/
- Riproduzione automatica: check
Poi pigiamo “Salva” in fondo alla finestra.
Il resto delle impostazioni a discrezione.
Cose da provare
- installare l’interfaccia web da sorgente
- configurare un secondo stream con un bitrate minore, potrebbe essere utile per quando sono collegato via VPN su rete cellulare. C’è da dire che non ho trovato un client che permetta di eseguire uno stream semplicemente scegliendolo come output
- recuperare un dongle bluetooth usb, collegare il raspino alla cassa bluetooth e configurarla come output di mpd