Transformer son raspberryPI en Airplay

Pour être capable de faire communiquer ma vieille radio des années 40 avec mon Iphone, il va falloir être malin et l’objectif sera de coller un RaspberryPI entre les deux. Un grand nombre de projets raspberry expliquent comment jouer de la musique. Et nous verrons quelles solutions sont adaptées et comment s’y prendre

airplay

Il existe différentes méthodes et chacune a ses avantages.

  • Dans certains cas, on charge des fichiers audio MP3 sur le raspberry et on peut déclencher à distance la lecture (ne nécessite pas internet, mais nécessite d’accéder à son raspberry pour ajouter des morceaux).
  • Dans d’autres cas on enregistre ses playlists dans le raspberry qui va aller les lire via internet.
  • Enfin on peut transformer son raspberry en borne Airplay permettant ainsi de balancer la musique d’un Iphone, Ipad ou Mac dessus sur son périphérique connecté (nécessite internet ET d’avoir des outils Apple).

J’ai choisi cette dernière solution car je possède la triplette gagnante d’appareil Mac et parce que je veux pouvoir jouer de la musique provenant de n’importe quelle application, que cela soit de Deezer, Youtube, Soundcloud, Spotify ou un petit podcast Affaires sensibles sans avoir à accéder à mon raspberry toutes les 2 minutes.

airplay

Coup de bol, le protocole Airplay conçu par Apple (et donc verrouillé) a été percé à jour et a donné naissance à un clone open source nommé ShairPort. C’est ce que nous allons utiliser. Il existe plusieurs repositories et personnellement j’ai choisi celui d’Abrasive.

« Ben t’es con, tu te compliques la vie mon gars ! Y’a plus facile et mieux »  
C’est vrai ! Quand j’ai parlé de ce projet autour de moi, on ma répondu « pfff tu colles un chromecast audio dans ta radio et on en parle plus ». Ce qui n’est pas faux mais ce n’est pas ce que je recherche car je serai aussi bête qu’au début et je n’aurai même pas un sujet d’article pour le blog.

Une autre alternative plus proche consiste a installer un media center « Kodi » (anciennement XBMC) dans son Raspberry. Derrière ce nom se cache une interface graphique assez élégante où vous pourrez gérer vos musiques mais aussi vos séries avec une synchro automatique bref tout pour vous fabriquer une belle Apple TV raspberry. Si ça vous branche je vous recommande ce très bon tuto . Et vous n’aurez aucune ligne de code à taper.

Et c’est bien là mon problème. L’objectif c’est justement de pisser un peu de ligne de commande shell et de comprendre un peu la logique de Linux. Bref de mettre les mains dans le cambouis ! Alors en Avant (Guingamp) !

Installation

Pour commencer, tout le monde ne sait peut être pas ce qu’est un Raspberry PI. Il s’agit d’un Micro-ordinateur ultra petit, assez performant malgré tout qui permet d’intégrer un Ordinateur/serveur dans pleins de projets (domotique, robotique, mediacenter, et j’en passe). Il faut compter 60 € pour le dernier modèle RaspberryPI 2 + l’alimentation + la carte Micro SD (je vous invite à passer par ce site qui est plutôt clair ). Il tourne sous Linux et plus particulièrement sur une distribution adaptée : Raspbian Dans mon cas j’utilise la version Wheezy. Voici à quoi ressemble l’engin une fois connecté. Perso je n’avais pas d’écran dispo alors pour voir les choses en grand je l’ai connecté sur le vidéo projecteur.

Raspberrypi   Raspberrypi

Pour faire l’installation, il faudra que votre raspberry soit initialisé (je vous recommande cette méthode et vous aurez besoin de l’OS Raspbian) et connecté à internet. Pour les premiers tests, une connexion Ethernet filaire suffira, une fois que cette solution technique sera bien fonctionnelle on pourra se payer le luxe d’un dongle Wifi pour éviter de sortir un RJ45 de la radio.

Si tout va bien, au premier démarrage, vous accéder à l’écran de Setup. Personnellement j’ai modifié la langue de mon clavier afin de passer en Azerty et j’ai activé le lancement de l’interface graphique au démarrage.

raspi-config

Vous devriez être en mesure d’arriver sur le bureau graphique du raspberry (ou si vous êtes sur l’interface en ligne de commande tapez Sudo startx

lxde

Ayez le bon réflexe de mise à jour Linux ! Avant toute modif, un petit coup d’update/upgrade pour commencer sur une bonne base et être sûr que tous les logiciels sur votre Raspberry soient bien à jour. Ouvrez donc le LX Terminal et rentrez ces commandes:

$ sudo apt-get update
$ sudo apt-get upgrade

Cela peut prendre quelques minutes si votre config n’est pas à jour. Ensuite, nous allons avoir besoin d’installer un ensemble de logiciel et de librairies.

  • avahi-utils
  • build-essential
  • chkconfig
  • git
  • libao-dev
  • libavahi-client-dev
  • libcrypt-openssl-rsa-perl
  • libio-socket-inet6-perl
  • libssl-dev
  • libwww-perl
  • pkg-config

Rassurez-vous on peut utiliser une seule ligne de commande pour faire tout ça d’un coup.

$ sudo apt-get install avahi-utils build-essential chkconfig git libao-dev libavahi-client-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libssl-dev libwww-perl pkg-config

On note que sur un ordinateur classique le copier/coller se matérialise par un Ctrl + C Ctrl + V ou chez Apple cmd C, cmd V. Sur un terminal de commande Shell (comme le LX terminal de votre raspberry) Copier = Maj + insert et Coller = Ctrl + Insert.

On pensera à refaire un petit update/upgrade pour s’assurer que ces nouveaux outils sont bien à jour.

$ sudo apt-get update
$ sudo apt-get upgrade

En enfin, on peut installer Shairport. Pour cela, on va indiquer directement au raspberry où chercher l’archive :

$ git clone -b 1.0-dev git://github.com/abrasive/shairport.git

Une fois que c’est fait, on va se déplacer à l’intérieur du repertoire shairport avec :

$ cd shairport

Et on finalise l’installation avec :

$ sudo ./configure 
$ sudo make
$ sudo make install

Shairport est désormais installé. Il reste néanmoins un dernier petit paramétrage. En effet par défaut, le son du raspberry sort via le port HDMI. Or, pour nos tests nous allons forcer le Raspberry à faire sortir le son sur la prise jack.

$ sudo amixer cset numid=3 1

Un petit écran comme ceci s’affichera alors :

sudoamx

Démarrer Shairport

Vient le moment fatidique où on lance la bête et on verra bien le résultat. On tape donc une dernière commande pour activer le shairport.

$ shairport -a 'Raspberry Pierre'

Bon si tu t’appelles Jonathan tu peux être assez fou pour remplacer ton prénom 😉

Et là, tu vas vite sur ton Iphone et tu regardes si une nouvelle case « AirPlay » s’affiche à côté du « AirPort ». Si oui, tu te jettes sur ton application de musique (n’importe laquelle) pour vérifier que de la musique sort correctement.

IMG_9715IMG_9717

Là si de la musique sort de ton Raspberry, tu accèdes au rang de demi-dieu, tu peux te sortir une petite bière de mi-temps et tu peux aller réveiller ta femme pour lui annoncer la bonne nouvelle. Il y a cependant de fortes chances qu’elle ne partage pas ton enthousiasme et te traite de « gros geek ». Réjouis-toi, cela indique que ton Raspberry et ta femme sont bien paramétrés.

Vient alors un quart d’heure de douce joie de vivre, où tu essayes différents morceaux de musique pour voir si ça marche même avec des musiques différentes, tu augmentes le son via ton iphone, et tu te surprends à redécouvrir des playlists oubliées.

La partie n’est pas finie

Il reste juste « une toute petite chose à faire » : paramétrer le RaspberryPI pour lancer Shairport au moment du boot. Je mets des guillemets car ce fut la partie la plus complexe où il fallut essayer de comprendre un peu comment fonctionne son raspberry et j’ai commencé à me perdre dans les limbes de ce petit ordinateur à chercher la sortie.

La bonne nouvelle c’est que j’ai trouvé comment faire. La moins bonne c’est que je ne sais plus comment l’arrêter 🙂 Mais bon tant pis c’est un peu l’esprit Bricole moi un mouton.

Donc on va commencer par créer un nouveau fichier nommé Shairport.

$ sudo nano /etc/init.d/Shairport

Et dedans vous allez écrire ces 2 lignes en mettant ce que vous voulez entre guillemets. Ce sera le nom de votre périphérique Airplay.

#!/bin/bash
/usr/local/bin/shairport -a "MF10 Pierre"

Pour enregistrer ce fichier, appuyer sur Ctrl + O. L’interface vous demandera de confirmer yes/no je vous laisse deviner lequel il faut choisir. Et enfin l’interface vous demande de confirmer le nom du fichier. Vous n’avez qu’à taper sur Entrée. (Un message vous indique le nombre de ligne modifiée, soit 2). Vous n’avez qu’à quitter l’éditeur en appuyant sur Ctrl + X.

Ensuite on va modifier les permissions pour que ce fichier se retrouve dans la séquence de boot.

 
$ sudo chmod a+x /etc/init.d/Shairport 
$ update-rc.d Shairport defaults 

Enfin vous allez redémarrer votre Raspberry doucement sans arracher la connectique Micro-USB mais avec une simple ligne.

 
$ sudo reboot 

Le Raspberry va redémarrer et lors de la séquence de boot va directement se mettre en mode « Listen Connection ». C’est plutôt cool car votre périphérique le reconnait et donc la mission est accomplie ! En revanche vient le moment où il faut ranger le Raspberry et aller se coucher (oui car l’heure tardive devient matinale) et là…. Je me rends compte qu’aucune commande ne fonctionne. Je ne peux pas le stopper (via une commande), je ne peux pas lancer l’interface graphique ($ sudo startx ). Je ne peux que le rebooter avec Ctrl + Alt + Suprr. On est peut être pas obligé de le dire et on pourra le glisser dans la MF10 sans que cela se voit 🙂

TroubleShooting et réflexions

  • Au cours de mes errements j’ai tenté de résoudre 2 problèmes que je n’avais pas. J’ai peut-être commis une erreur à cet endroit ou pire oublié de décrire une étape requise. Sur ce tuto qui finalement m’a moins servi que prévu, le gars parle de régler un problème de permission avec ASLA (le gestionnaire du son du raspberry) et un autre qui serait un potentiel problème si shairport démarrait avant avahi-daemon. Du coup j’ai parametré son script et j’ai également installé sa tâche watchdog qui check toute les minutes si Shairport est bien lancé. C’est la partie crade de mon boulot et si c’était à refaire, j’attendrais d’avoir le problème avant de le régler…
  • Nombreux sites évoquent un son dégueulasse sur le raspberry et la nécessité de passer par un DAC ou une carte son Wolfson afin d’améliorer les choses. Personnellement j’ai n’ai pas eu ce problème est c’est peut-être une qualité du RaspberryPI 2. En effet un grand nombre de tutos commencent à dater et se basent sur un raspberryPI 1 qui n’a pas de connectique Jack 3.5
  • Nombreux site évoquent de forcer un peu le volume du son sur le raspberry avec
    $ alsamixer

    Perso, je n’ai pas ressenti le besoin de le faire. On verra à l’avenir.

  • Installer une connexion SSH pour être capable de piloter mon raspberry depuis mon PC, car une fois qu’il sera rangé dans la radio, ça sera moins commode d’aller taper quelques commandes. Pour cela cette solution semble parfaite.
  • J’aurais bien racheté un raspberryPI 0 (qui est une version light du raspberryPI 2 dans la connectique et surtout dans le tarif 5€ ) afin de garder mon 2 pour d’autres projets mais on notera que, le jack 3.5 disparait et qu’il faudra sans doute utiliser le son HDMI, et qu’il est en rupture de stock à un tarif bien supérieur que celui annoncé par la fondation Raspberry.
  • Il semble que le fait de passer d’une connexion filaire à une connexion Wifi sur un raspberry dans le cadre d’un Airplay augmente pas mal la charge CPU car le déchiffrement de la clé WPA n’est pas négligeable pour le raspberry. Sur ce site on parle de 60%.

Bref il reste plein de choses à faire sur le projet de la radio, et plein de choses à faire sur le Raspberry mais voilà une bonne première étape d’effectuée.

Références:
http://adrianmejia.com/blog/2014/02/15/cheap-airplay-receiver-with-raspberry-pi/
http://computers.tutsplus.com/articles/using-a-raspberry-pi-as-an-airplay-receiver–mac-54316

Naviguer dans la série<< Une vieille radio qui ne marche pas

5 Comments on “Transformer son raspberryPI en Airplay

  1. Tout cela m’a l’air superbe.
    Voir une MF10, une grand mère de près de 80 ans, pilotée par un iPhone !
    J’ai hâte d’entendre la MF10 crachouillant « Ici Londres… »

    Pour arrêter ton PI, en dehors de couper le courant, ne peux-tu faire ?
    sudo shutdown
    lequel est programmable, pour éviter de te coucher le matin…

    • Non car le raspberry n’accepte plus aucune commande (sudo reboot, sudo halt ou même Ctrl C)
      La seule chose qui fonctionne c’est Ctrl + Alt + Suppr qui reboot.
      De toute façon une fois dans la radio, ce sera l’ampli On/Off qui coupera ou allumera le RPi

  2. Bien sympa l’article Pierro, le « Réjouis-toi, cela indique que ton Raspberry et ta femme sont bien paramètres » m’a tué 🙂

  3. Lorsque je tape shairport -a ‘Raspberry Maxime’ le raspberry m’indique: buffer value must be > 30 and < 512. Que dois-je faire?
    Merci

    • Salut Maxime, désolé pour la réponse tardive (quasiment 1 mois 🙁 ) Je ne suis pas un expert mais en cherchant sur google on peut trouver ce forum http://www.dd-wrt.com/phpBB2/viewtopic.php?p=730976 et voir qu’en lançant la commande suivante ça devrait régler ton souci
      shairport -a « Raspberry Maxime » -b 282 -d
      Visiblement la valeur 282 n’est pas au hasard

      A noter que conformément à la doc sur github https://github.com/mikebrady/shairport-sync l’option -d semble permettre de mieux mettre en tache de fond shairport. c’est peut là mon propre souci 🙂

      j’epere que cela t’aidera

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *