community italiana di domotica personale
 
Usare Mini PC/Intel NUC/Raspberry come ricevitore audio AirPlay 2 compatibile, con Shairport Sync (su Docker)

Usare Mini PC/Intel NUC/Raspberry come ricevitore audio AirPlay 2 compatibile, con Shairport Sync (su Docker)

SCOPI DELLA GUIDA:
  • Installare e configurare il software “Shairport Sync” con Docker su Mini PC/Intel NUC, su Raspberry Pi o computer tradizionali con sistema operativo Linux Debian per utilizzarlo come ricevitore audio compatibile Apple AirPlay 2 (anche con Android)
  • Livello di difficoltà: basso
  • Costo: n/a
CONCETTI AFFRONTATI:
COMPONENTI SOFTWARE UTILIZZATE:
PREREQUISITI (alternative):
DISPOSITIVI FISICI UTILIZZATI:
  • Un qualunque dispositivo o un server in grado di effettuare streaming audio su standard AirPlay 2
GUIDA DEDICATA A utenti:
Debian
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione guida: 1.1

AirPlay 2 con Shairport-sync

Abstract

Shairport Sync è un software che rende il computer sul quale è in esecuzione ricevitore per qualsiasi stream audio inviato da un emettitore Apple AirPlay/AirPlay 2 compatibile, vale a dire dispositivi Apple oppure Google Android che utilizzino applicazioni in grado di effettuare streaming in questo senso (per esempio l’app AirMusic, o altre).

Collegare questo computer così configurato ad un amplificatore o a delle casse acustiche lo rende quindi implicitamente compatibile Apple AirPlay/AirPlay 2, standard particolarmente apprezzato perché a differenza di altri utilizza come mezzo di trasmissione il Wi-Fi piuttosto che, per esempio, il Bluetooth, oltre ad presentare un livello qualitativo nettamente superiore.

A differenza della prima versione di AirPlay, AirPlay 2 garantisce non sono una qualità complessiva ancora migliorata, ma anche un buffering maggiore (non più solo pochi secondi, ma ben di più, anche fino al minuto) nonché una funzione particolarmente apprezzata, ovvero l’audio multistanza.

In pratica, disponendo di una cassa compatibile AirPlay2 (oppure collegata con un computer con in esecuzione Shairport Sync come spiegato in questa guida) è possibile riprodurre contemporaneamente musica su altre casse analogamente compatibili in modo completamente sincronizzato, permettendo agli utenti di riprodurre musica da più speaker contemporaneamente.

Scopo della presente guida è quindi quello di installare e configurare Shairport Sync istanziato come container Docker presso il sistema operativo Linux Debian installato su Mini PC/Intel NUC , su Raspberry Pi dotato di sistema operativo Raspberry Pi OS o comunque su computer tradizionale in grado di eseguire Docker.

Si parte

Assunti

Questa guida è dedicata a chi abbia già un computer con sistema operativo Linux Debian. Per coloro che non abbiano ancora provveduto e si trovino ad avere un Mini PC/Intel NUC oppure un Raspberry Pi, magari acquistati appositamente per realizzare la propria domotica, allora questo passo della guida va smarcato seguendo prima questa guida nel caso del Mini PC (che spiega passo passo come configurare il sistema operativo Linux Debian) oppure questa, in caso di Raspberry Pi.

Una volta terminata la configurazione del mini/micro computer inclusa la possibilità di collegarvisi tramite SSH nonché aver effettuato il perfezionamento – vedi guide per Mini PC (o computer generico) su Linux Debian oppure per Raspberry Pi – è possibile procedere nella presente guida.

Installare Docker

Installare Docker è piuttosto semplice, esistono infatti una procedura completamente automatica oppure una manuale. Entrambe sono illustrate in dettaglio in questa breve guida per Mini PC (o computer generico) con Linux Debian oppure questa per Raspberry Pi OS.

Se si ha già provveduto all’installazione di Docker, va da sé che questo passaggio possa essere saltato.

ATTENZIONE: affinché i comandi a seguire funzionino, è necessario aver aggiunto Docker al gruppo sudoers, come spiegato in guida per Mini PC/Intel NUC su Debian oppure in quella per Raspberry Pi OS.

Istanziare Shairport Sync

A questo punto è possibile provvedere all’istallazione di Shairport Sync, il quale viene eseguito come container Docker tramite un’istanza specifica.

In ambito Docker, l’istanziamento dell’applicazione può essere effettuato tramite esecuzione di un comando manuale (più immediato) oppure tramite una configurazione del tool di gestione Docker Compose, approccio inizialmente più ostico ma che consigliamo per tutta una serie di motivi. Entrambe le scelte sono valide, ma in prospettiva (specie in ottica di aggiornamento) imparare ad usare Docker Compose è altamente consigliato.

Tramite comando “docker run”

Istanziamo dunque Shairport Sync su Docker tramite il comando che segue via terminale (da CLI o via SSH):

docker run -d --name shairport --net host --device /dev/snd --restart always mikebrady/shairport-sync:development

Si noti come il campo “device” vada a indicare al software di utilizzare il device “/dev/snd“, ovvero la scheda audio del computer. Tale parametro, come molti altri, può essere variato per ottenere eventualmente configurazioni diverse e particolari, per esempio in presenza di schede audio esterne particolari.

Al termine, verifichiamo che tutto sia andato per il verso giusto:

docker logs shairport

nel log dovremmo trovare qualcosa come:

0.003431802 "shairport.c:1729" Started!
0.000097499 "shairport.c:1756" software version: "x.x.x-libdaemon-OpenSSL-Avahi-ALSA-pipe-soxr-convolution-metadata-mqtt-dbus-sysconfdir:/etc"
0.000041302 "shairport.c:1762" log verbosity is 1.

Congratulazioni: Shairport Sync è ora operativo.

Vetrina Promo

Tramite Docker Compose

Se astutamente si sceglie di utilizzare Docker Compose, allora è semplicemente necessario aggiungere al proprio file docker-compose.yaml la seguente configurazione (sotto il bocco services):

  shairport:
    container_name: shairport
    restart: always
    image: mikebrady/shairport-sync:development 
    network_mode: host
    devices:
    - "/dev/snd"

Si noti come il campo “device” vada a indicare al software di utilizzare il device “/dev/snd“, ovvero la scheda audio del computer. Tale parametro, come molti altri, può essere variato per ottenere eventualmente configurazioni diverse e particolari, per esempio in presenza di schede audio esterne particolari.

Una volta salvato il file docker-compose.yaml, eseguire il comando:

docker compose up -d shairport

il quale provvederà a istanziare il container.

N.b. In caso il comando “docker compose” dovesse dare errore, verificare di non aver installata la versione applicativa di Docker Compose anzichè la versione plug-in alla quale il comando sopra fa riferimento. In tal caso, adeguare il comando da “docker compose” a “docker-compose” (col trattino in mezzo).

Al termine, verifichiamo che tutto sia andato per il verso giusto:

docker logs shairport

nel log dovremmo trovare qualcosa come:

0.003431802 "shairport.c:1729" Started!
0.000097499 "shairport.c:1756" software version: "x.x.x-libdaemon-OpenSSL-Avahi-ALSA-pipe-soxr-convolution-metadata-mqtt-dbus-sysconfdir:/etc"
0.000041302 "shairport.c:1762" log verbosity is 1.

Congratulazioni: Shairport Sync è ora operativo.

Perfezionamento della qualità audio

Prima di iniziare ad utilizzare Shairport Sync, provvediamo a perfezionare la configurazione in modo da ottenere la massima resa acustica possibile.

Andiamo a modificare il range in db del volume del segnale in uscita. Entriamo sul terminale del container appena creato col comando:

docker exec -it shairport sh

Entriamo in edit nel file “/usr/local/etc/shairport-sync.conf”:

cd etc
vi shairport-sync.conf

e andiamo a cercare la voce:

// volume_range_db = 60 ;

sostituendola quindi (premendo sulla tastiera la lettera “i” per entrare in modalità edit) con:

volume_range_db = 30 ;

Cerchiamo poi la voce “name” impostando in quella voce il nome che vorremo visualizzare come outpout sui dispositivi Apple, per esempio:

name = "SALA" ;

Usciamo salvando premendo ESC, poi “:wq”, infine invio.
Effettuare infine un riavvio dell’istanza:

docker restart shariport

Volume di output

Il volume di output del computer ospitante influenza anche l’output di Shairport Sync. Si consiglia di impostarlo a 95%-100% tramite il comando:

sudo alsamixer

regolare quindi il volume con le freccette della tastiera e poi uscire tramite ESC.

MQTT

Opzionalmente, Shairport Sync prevede l’utilizzo di MQTT come veicolo per produrre telemetrie e ricevere comandi specifici.

N.b. Per chiarimenti sul tema MQTT si consiglia di leggere la guida dedicata alla configurazione del protocollo MQTT per la propria domotica. Ovviamente, per procedere nelle configurazioni proposte in questo paragrafo si assume che sulla rete locale sia già stato presente un broker MQTT (eg. Eclipse Mosquitto).

Per attivare tale supporto è necessario modificare ulteriormente il file di configurazione del software:

docker exec -it shairport sh
cd etc
vi shairport-sync.conf

recandosi sul fondo del file, si troveranno delle voci raggruppate sotto il blocco “mqtt“:

mqtt =
{
//  enabled = "no"; // set this to yes to enable the mqtt-metadata-service
//  hostname = "iot.eclipse.org"; // Hostname of the MQTT Broker
//  port = 1883; // Port on the MQTT Broker to connect to
//  username = NULL; //set this to a string to your username in order to enable username authentication
//  password = NULL; //set this to a string you your password in order to enable username & password authentication
//  capath = NULL; //set this to the folder with the CA-Certificates to be accepted for the server certificate. If not set, TLS is not used
//  cafile = NULL; //this may be used as an (exclusive) alternative to capath with a single file for all ca-certificates
//  certfile = NULL; //set this to a string to a user certificate to enable MQTT Client certificates. keyfile must also be set!
//  keyfile = NULL; //private key for MQTT Client authentication
//  topic = NULL; //MQTT topic where this instance of shairport-sync should publish. If not set, the general.name value is used.
//  publish_raw = "no"; //whether to publish all available metadata under the codes given in the 'metadata' docs.
//  publish_parsed = "no"; //whether to publish a small (but useful) subset of metadata under human-understandable topics
//  Currently published topics:artist,album,title,genre,format,songalbum,volume,client_ip,
//  Additionally, empty messages at the topics play_start,play_end,play_flush,play_resume are published
//  publish_cover = "no"; //whether to publish the cover over mqtt in binary form. This may lead to a bit of load on the broker
//  enable_remote = "no"; //whether to remote control via MQTT. RC is available under `topic`/remote.
//  Available commands are "command", "beginff", "beginrew", "mutetoggle", "nextitem", "previtem", "pause", "playpause", "play", "stop", "playresume", "shuffle_songs", "volumedown", "volumeup"
}; 

le voci da attivare e configurare (come minimo) sono le seguenti:

enabled Impostare a yes per attivare il supporto MQTT
hostname Indicare l’hostname o l’IP del proprio broker (eg. 192.168.1.100)
port Indicare la porta del servizio MQTT (solitamente 1883)
username / password Indicare le eventuali credenziali d’accesso al broker MQTT
topic Il topic MQTT presso il quale telemetrie e comandi faranno capo (lasciare shariport in caso ci sia una sola istaza del software sulla rete domestica, altrimenti personalizzarlo con un distintivo (eg. shaiport-sala)
publish_parsed Impostare a yes. Necessario affinché i payload delle telemetrie siano intelleggibili
enable_remote
Impostare a yes. Necessario affinché Shairport-Sync possa ricevere comandi via MQTT.

Per farlo ovviamente è necessario modificare il file rimuovendo i due caratteri di commento in testa ad ogni riga “//“, oltre a modificare il testo come da proprie esigenze. Per entrare in editing del file, premere la lettera “i”.

Al termine della configurazione, usciamo salvando premendo ESC, poi “:wq”.
infine riavviamo il servizio con:

docker container restart shairport

Da qui in poi, telemetrie e comandi verranno rispettivamente inviate ed eseguite da Shairport-Sync.

HOME ASSISTANT

Dopo l’avvenuta configurazione di MQTT, volendo è pensabile di integrare le funzioni AirPlay sull’HUB per domotica personale Home Assistant (o altri dotati di supporto MQTT).

Uso

Ora sarà possibile, collegandosi alla Wi-Fi e durante l’esecuzione di flussi audio (Spotify, messaggi vocali, qualsiasi cosa all’infuori dei suoni di sistema) cliccare sull’icona così fatta:

Apple Airplay Icon

per elencare tutti i dispositivi AirPlay presenti nella rete locale, incluso il nostro mini/micro computer reso ricevitore AirPlay 2 compatibile.

Sui dispositivi Android tramite specifiche app oppure sui server streaming in grado di erogare flussi AirpPlay, basterà “puntare” al nome assegnato all’istanza Shairport Sync e la riproduzione si avvierà automaticamente.

MULTISTANZA

Come illustra l’immagine a seguire:

AirPlay 2 - Esempio

più casse compatibili AirPlay 2, quindi anche computer con in esecuzione Shairport Sync, (nel caso sopra, “Sala” e “Camera”), possono riprodurre, automaticamente e in modo perfettamente sincronizzato, il medesimo flusso audio. Inoltre, è persino possibile regolare in modo discreto il volume di ogni singolo output: basta premere sul device corrispondente e regolarne l’emissione sonora.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.