====== Cuffia Bluetooth con Kodi su Raspberry Pi ======
Come ascoltare l'audio da Kodi con una cuffia Bluetooth, il tutto su Raspberry Pi. Questa è la piattaforma hardware e software:
* **Raspberry Pi 3 Model B**.
* Cuffie Bluetooth **Mpow H1**.
* Sistema Operativo Raspbian basato su **Debian Stretch 9.11**.
* **Kodi 17.6 Krypton**.
Il Raspberry Pi 3 include un controller Bluetooth, i pacchetti da installare sono:
* **bluez** - Include il demone **bluetoothd** che fornisce il servizio **bluetooth** e il programma di controllo **bluetoothctl**.
* **bluealsa** - Include il demone **bluealsa** che fornisce il servizio omonimo.
===== BlueZ, PulseAudio e BlueALSA =====
La nostra soluzione non prevede l'utilizzo di **[[https://www.freedesktop.org/wiki/Software/PulseAudio|PulseAudio]]**. Molte ricette invece prevedono di installare PulseAudio per collegare **[[http://www.bluez.org/|BlueZ]]** al sistema audio **[[https://alsa-project.org/|ALSA]]**. Questo perché è necessario un //middleware// per far comunicare il software che implementa il protocollo Bluetooth (BlueZ) con i driver del kernel e relative librerie che gestiscono la scheda audio (ALSA). In passato vi era una integrazione diretta fra BlueZ e ALSA e non era necessario alcun middleware, ma con BlueZ versione >= 5 è necessario una componente in più. In molti tuttavia preferiscono non installare PulseAudio a causa delle dipendenze e complicazioni che ciò comporta, perciò è nato **[[https://github.com/Arkq/bluez-alsa|BlueALSA]]**. Questa componente software fornisce un device PCM chiamato **bluealsa** che risponde alle specifiche **ALSA software PCM I/O plugin**, non è una **ALSA Kernel proc interface**.
Pertanto le istruzioni che seguono utilizzano **bluealsa** e **non richiedono l'installazione di PulseAudio**. Per altri dettagli vedere la pagina [[..:linux:sa:pulseaudio]].
===== Pairing delle cuffie Bluetooth =====
Con il servizio **bluetooth** attivo è possibile eseguire il programma **bluetoothctl** che fornisce una console di controllo a riga di comando. Le prime operazioni da fare sono abilitare l'interfaccia Bluetooth del Raspberry Pi con il comando **power on**, attivare l'agente Bluetooth che gestirà il pairing con **agent on**, quindi definire tale agent come quello predefinito con **default-agent** e infine ricevere la lista dei device rilevati con **scan on**:
# bluetoothctl
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:AA:27:A0 Discovering: yes
Tenendo premuto il tasto //cornetta// delle cuffie per circa 7 secondi, queste entrano in **modalità pairing** (il LED lampeggia blu/rosso). Nella console ''bluetoothctl'' si vede comparire il device **Mpow H1** con il suo MAC address:
[NEW] Controller B8:27:EB:AA:27:A0 kodi [default]
[NEW] Device EB:06:EF:F6:11:B4 Mpow H1
a questo punto è possibile fare il **pairing**, **trust** e **connect**:
pair EB:06:EF:F6:11:B4
connect EB:06:EF:F6:11:B4
trust EB:06:EF:F6:11:B4
Il **pairing** è la procedura per cui controller e device si riconoscono l'uno con l'altro, poiché le cuffie non hanno un'interfaccia di input (es. una tastiera) il pairing avviene senza digitare un PIN. Quando si esegue il comando **connect** le cuffie segnalano l'evento con il messaggio vocale **connected**. Con il comando **trust** si indica che d'ora in poi vorremo effettuare il paring e il connect automaticamente ogni volta che la cuffia viene accesa.
**ATTENZIONE**: Se il pacchetto **bluealsa** non è installato, il connect fallisce con il seguente errore:
[bluetooth]# connect EB:06:EF:F6:11:B4
Attempting to connect to EB:06:EF:F6:11:B4
Failed to connect: org.bluez.Error.Failed
Con il comando **info** è possibile verificare lo stato del device:
[Mpow H1]# info EB:06:EF:F6:11:B4
Device EB:06:EF:F6:11:B4
Name: Mpow H1
Alias: Mpow H1
Class: 0x240404
Icon: audio-card
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Headset (00001108-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Handsfree (0000111e-0000-1000-8000-00805f9b34fb)
Le preferenze delle connessioni Bluetooth (compreso lo stato di trust, ecc.) vengono salvate nella directory **/var/lib/bluetooth/**.
Da questo momento in poi la cuffia Bluetooth è disponibile come device per le librerie ALSA (e quindi per i comandi **aplay**, **alsamixer**, ecc.) semplicemente indicando come device la stringa **bluealsa:HCI=hci0,DEV=EB:06:EF:F6:11:B4,PROFILE=a2dp** (ovviamente il MAC address deve essere quello specifico del vostro dispositivo).
===== Test delle cuffie =====
I tool ALSA possono adesso usare la cuffia Bluetooth, è sufficiente indicare il device con l'opzione **-D**:
aplay -D bluealsa:HCI=hci0,DEV=EB:06:EF:F6:11:B4,PROFILE=a2dp \
/usr/share/sounds/alsa/Front_Center.wav
Purtroppo la periferica Bluetooth non viene elencata tra quelle disponibili dal comando **%%aplay --list-devices%%**, poiché BlueALSA è un plugin I/O, non un driver del kernel. Anche lanciando il comando **alsamixer** e premendo **F6**, la scheda audio bluealsa non viene elencata, ma è possibile scegliere l'opzione **enter device name** e digitare appunto **bluealsa**. Nella figura seguente ecco come viene evidenziata la periferica:
{{.:kodi:alsamixer-bluealsa.png?480|Alsamixer with Bluealsa device}}
Esistono due canali di output: **A2DP** e **SCO**. Si tratta di due protocolli differenti per il trasporto dell'audio su Bluetooth. Il primo è l'acronimo per **[[https://en.wikipedia.org/wiki/List_of_Bluetooth_profiles#Advanced_Audio_Distribution_Profile_(A2DP)|Advanced Audio Distribution Profile]]** e serve per lo streaming audio da un device all'altro. È quello che useremo nel nostro caso. Il protocollo **[[https://en.wikipedia.org/wiki/List_of_Bluetooth_protocols#Synchronous_Connection-Oriented_(SCO)_link|Synchronous Connection-Oriented]]** è invece generalmente utilizzato per canali audio mono, ad esempio per l'auricolare dello smartphone. Esiste anche un canale di input, infatti la cuffia Mpow H1 ha un **microfono integrato** per effettuare le telefonate (infatti utilizza il protocollo SCO). Infine il mixer mostra anche il **livello della batteria** della cuffia.
===== Configurazione /etc/asound.conf =====
La configurazione appena fatta **non è sufficiente** per poter selezionare le cuffie Bluetooth in Kodi; se andiamo nel menu **Settings** = //System settings// => //Audio// => **Audio output device** vediamo che compaiono le periferiche integrate del Raspberry Pi (**PI: HDMI** e **PI: Analogue**) ed altre eventuali periferiche ALSA (ad esempio **ALSA: USB Advanced Audio Device, Analog** per una scheda audio USB), ma non vi è traccia del dispositivo Bluetooth.
È necessario dichiarare il plugin bluealsa nel file **/etc/asound.conf** in questo modo:
pcm.btheadset {
type plug
slave.pcm {
type bluealsa
device "EB:06:EF:F6:11:B4"
profile "a2dp"
}
hint {
show on
description "Mpow H1 Bluetooth Headset"
}
}
Dopo aver **riavviato Kodi** - e solo se le cuffie hanno fatto il **connect** Bluetooth - sarà possibile selezionare il device audio **ALSA: Mpow H1 Bluetooth Headset** dal menu.
Il file **/etc/asound.conf** ha valenza per l'intero sistema, in alternativa è possibile creare un file **$HOME/.asoundrc** valido solo per l'utente che esegue Kodi.
Se si desidera che la periferica BlueALSA sia quella predefinita dal sistema ALSA (cioè quella utilizzata se non si indica il device con l'opzione -D), è sufficiente aggiungere una sezione al file di configurazione ''asound.conf'' (oppure alla versione personale dell'utente):
pcm.!default {
type plug
slave.pcm "btheadset"
}
===== Integrazione con Kodi =====
==== Audio output device ====
In Kodi 17 è possibile scegliere il device per l'uscita audio dal menu **Settings** = //System settings// => //Audio// => **Audio output device**. Qui vengono elencati tutti i dispositivi di tipo **ALSA Kernel** e quelli di tipo **PCM I/O plugin** che siano dichiarati in ''/etc/asound.conf''. Purtroppo Kodi crea l'elenco di questi dispositivi al suo avvio; **se il connect avviene dopo che Kodi è già avviato, la cuffia Bluetooth non viene mostrata**. È necessario riavviare Kodi per poterla selezionare.
==== Pulsanti delle cuffie ====
I pulsanti delle cuffie Mpow H1 vengono riconosciuti da Kodi per le seguenti funzioni:
^ Cornetta | Pausa |
^ + | Brano successivo |
^ - | Brano precedente |
Le funzioni integrate direttamente nella cuffia e confermate da messaggi vocali nella cuffia stessa sono invece:
^ Tenere permuto + | Alza il volume |
^ Tenere permuto - | Abbassa il volume |
^ Tenere permuto Cornetta per 3 sec | Disconnect |
^ Tenere permuto Cornetta per 4 sec | Pairing |
^ Tenere permuto Cornetta per 6 sec | Power off |
===== Web References =====
* **[[http://denvycom.com/blog/playing-audio-over-bluetooth-on-rasbperry-pi-command-line/|Playing Audio over Bluetooth on Rasbperry Pi (Using Bluealsa, Command Line)]]**
* **[[https://www.raspberrypi.org/forums/viewtopic.php?t=247334|Set bluealsa as default sound output device]]**
* **[[https://peppe8o.com/fixed-connect-bluetooth-headphones-with-your-raspberry-pi/|Connect Bluetooth Headphones with your Raspberry PI]]** - Using PulseAudio instead of BlueALSA.
* **[[https://stackoverflow.com/questions/6482798/a2dp-sco-pcm-hci|A2DP/SCO -PCM/HCI]]**
* **[[https://en.wikipedia.org/wiki/List_of_Bluetooth_profiles|List of Bluetooth profiles]]**
* **[[http://hitechreview05.blogspot.com/2018/09/mpow-h1-cuffie-bluetooth-recensione.html|Recensione cuffie Bluetooth Mpow H1]]**