DepUnPr

MPD su RPI II : Bluetooth

Audio via bluetooth da MPD

Seconda parte della serie “MPD su RaspberryPI”.

Avevo concluso la prima parte 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 amixer , 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