MPD su RPI II : Bluetooth
Seconda parte della serie “MPD su RaspberryPI”.
Avevo concluso la (prima parte)[10-mpd-su-rpi.md] con una serie di cose da provare, tra cui l’idea di recuperare un dongle usb e provare a collegare una cassa bluetooth.
Mi è poi venuto in mente che è un Raspberry4, e che il bluetooth lo ha a bordo! E a casa ho una (brutta) lampada led multicolore con integrata cassa bluetooth!
Collegamela
Prima cosa, collegare il raspberry alla cassa. Il raspberry gira Debian headless: non ho schermo collegato, non ho un desktop. E quindi di base non ho installato quello che serve per il bluetooth. Installiamolo e verifichiamo che sia in escuzione
# apt install bluetooth
# systemctl status bluetoothd
Ora possiamo provare a collegare la cassa:
# bluetoothctl
Agent registered
[CHG] Controller AA:AA:AA:AA:AA:AA Pairable: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller AA:AA:AA:AA:AA:AA Discovering: yes
[bluetooth]#
E aspettiamo. Quando viene rilevata la cassa, viene stampato il nome e l’indirizzo bt (6 gruppi di due cifre esadecimali separati da :
, come l’indirizzo del controller qui è AA:AA:AA:AA:AA:AA
)
Una volta che abbiamo l’indirizzo possiamo collegarci:
[bluetooth]# connect <indirizzo>
Il sistema darà una serie di messaggi, probabilmente qualche errore, e si collegherà.
La cassa in questione non ha nessun tipo di autenticazione per il collegamento, non ho esperienze altrimenti.
Ora la cassa è connessa, ma come ci mando l’audio? Avendo un ambiente desktop completo solitamente c’è in esecuzione PulseAudio o PipeWire che si occupano di gestire i device audio, anche bluethoot, ma in questo caso non ci sono e non ho intenzione di installare e configurare uno dei due solo per questo.
Una ricerca sull’internet mi porta a trovare bluez-alsa. Il README spiega bene cosa fa e come configurarlo. Vediamo cosa ho fatto io.
Installiamo:
# apt install bluez-alsa-utils
Questo installa le utility per bluez-alsa e automaticamente tutti quello che serve.
Verifichiamo che sia in esecuzione
# systemctl status bluealsa
Se è tutto ok, scolleghiamo e ricolleghiamo la cassa bluetooth
# bluetoothctl
[...]
[bluetooth]# disconnect <indirizzo>
[bluetooth]# connect <indirizzo>
E se tutto va bene, possiamo riprodurre un wave sulla cassa bluetooth usando aplay:
# aplay -D bluealsa /usr/share/sounds/alsa/Front_Center.wav
l’opzione -D
indica il nome del device alsa da usare, che sarà appunto bluealsa
Viene creato anche un controllo mixer sul device per regolare il volume, il cui nome dipende dall’aggeggio bluetooth a cui siamo collegati. Per vedere come si chiama usiamo aplay
, che si trova nel pacchetto alsa-utils
:
# apt install alsa-utils
# amixer -D bluealsa
ALSA lib bluealsa-ctl.c:205:(bluealsa_dev_fetch_battery) Couldn't get device battery status: Object does not exist at path “/org/bluealsa/hci0/dev_BB_BB_BB_BB_BB_BB/rfcomm”
Simple mixer control 'SUPREMA-SKP - A2DP',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 127 [100%] [0.00dB] [on]
Front Right: Playback 127 [100%] [0.00dB] [on]
La mia si chiama SUPREMA-SKP - A2DP
.
Segniamoci il nome, che ci serve per il prossimo passaggio.
Prima di continuare, però, facciamo in modo che la cassa sia ricollegata in automatico:
# bluetoothctl
[bluetooth]# trust <indirizzo>
[bluetooth]# pair <indirizzo>
Output MPD
Ora che abbiamo un device alsa, possiamo dire a MPD di usarlo come output.
Questa è la configurazione dell’output in /etc/mpd.conf
audio_output {
type "alsa"
name "Cassa BT" # qui mettete quello che volete
device "bluealsa"
mixer_type "software"
mixer_device "bluealsa"
mixer_control "<nome controllo mixer>"
# mixer_index "0" # optional
}
Il <nome controllo mixer>
è quello che abbiamo trovato prima con amixer
.
Riavviamo MPD e colleghiamoci con un client, vedremo l’output disponibile. Possiamo mandare in play un brano e regolare anche il volume d’uscita 👍
Possiamo abilitare solo un output o più di uno, MPD invierà l’audio a tutti gli output abilitati.
Cose da provare
bluez-alsa
permette anche il flusso inverso dell’audio, da un dispositivo remoto al device alsa di default. Non mi serve nella mia configurazione, ma è da provare!