DepUnPr

MPD su RPI II : Bluetooth

Audio via bluetooth da MPD

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 👍

Parte dell'interfaccia di MyMPD che mostra gli output disponibili e il controllo di volume

Possiamo abilitare solo un output o più di uno, MPD invierà l’audio a tutti gli output abilitati.

Cose da provare