AirTunes con Linux

In un passato in cui utilizzavo un iMac come dispositivo desktop principale, acquistai una base Apple AirPort Express configurandola semplicemente come client della rete WiFi esistente in casa con un duplice scopo: collegare via Ethernet la mia nuova televisione in modo da sfruttare le caratteristiche “da mediacenter”, e collegarla tramite cavo audio all’Home Theatre per riprodurre in streaming le tracce audio di iTunes.

Francamente questa seconda funzionalità non l’ho mai sfruttata più di tanto, per cui quando ho deciso di abbandonare MacOS per avere Linux anche sul desktop, non ho mai approfondito come far funzionare lo streaming… ma recentemente mi sono preso la briga di trovare una soluzione.

Facendo qualche ricerca, ho scoperto che il sistema sonoro PulseAudio installato di default su Gnome, offre questa funzionalità integrata per cui sembrava cosa abbastanza semplice far funzionare tutto l’insieme: secondo teoria, andando in “Impostazioni audio” avrei dovuto vedere l’AirPort all’interno della scheda “Uscita” come dispositivo su cui riprodurre l’audio… ma ovviamente non era presente.

Il mio primo dubbio riguardava proprio PulseAudio: il protocollo di comunicazione che Apple chiama “AirTunes” in realtà si chiama “RAOP” e in alcune distribuzioni (ad es. Ubuntu) serve un plugin di PuseAudio per abilitarlo. Al contrario, su Arch Linux (la distro che uso sul desktop), il plugin RAOP è compilato all’interno di PulseAudio per cui non c’è nulla da installare.

La colpa è di qualcosa d’altro.

La colpa, infatti, era la mancanza di un altro componente: la compatibilità con il sistema Bonjour di Apple che consente “l’annuncio in rete” dei dispositivi. La compatibilità su Linux con il protocollo Bonjour è fornita dal demone Avahi, installato di default su buona parte delle distribuzioni. Una volta abilitato, il dispositivo AirPort è apparso magicamente nella lista dei dispositivi audio in uscita di PulseAudio.

Sembrava tutto fatto, però cercando di far emettere qualche suono al mio Home Theatre non si sentiva nulla… e il PulseAudio crashava inesorabilmente.

A questo punto ho riavviato PulseAudio in modalità debug per capire dove stesse il problema: dai messaggi ho visto che l’AirPort si annunciava con l’IP APIPA di classe 169.X.X.X al posto dell’IP della mia LAN casalinga (192.168.0.X per la cronaca) per cui il server PulseAudio non trovava il dispositivo e andava in crash. Francamente non capisco perchè l’AirPort si annuncia con quell’IP (o perchè il server PulseAudio vede solo quell’IP): nella mia rete c’è un server DHCP configurato per assegnare un IPv4 statico all’AirPort e, inoltre, gira un demone Radvd che assegna all’AirPort un indirizzo IPv6 statico.

Tra l’altro, in tutta sincerità, una volta abilitato il demone Avahi sul mio desktop, ho visto un aumento dei pacchetti di rete considerevole che, per come sono fatto, non mi è piaciuto.

Bene, visto che l’Avahi non mi soddisfa, che alternative abbiamo?

L’alternativa più semplice (e le cose semplici che funzionano a me piacciono particolarmente) è settare manualmente la periferica PulseAudio attraverso uno script da lanciare all’avvio della sessione Gnome:

1
2
#!/bin/bash
/usr/bin/pactl load-module module-raop-sink server=192.168.0.x

Grazie a questo semplice script, il sistema PulseAudio aggiungerà il device AirPort come “RAOP sink ‘192.168.0.x’”… e ora l’audio funziona.

Ho avuto un ultima difficoltà con il mio player preferito: Audacios.

Di default, Audacios usa come plugin di uscita Alsa e la qualità dell’audio in streaming sull’AirPort è a dir poco oscena! Basta settare come Plugin di uscita PulseAudio e come profondità di bit 32 per avere un audio di qualità anche sullo stereo.