URL: https://linuxfr.org/users/chimrod/journaux/utiliser-un-pi-zero-comme-serveur-de-son-et-lecteur-bluetooth Title: Utiliser un pi zero comme serveur de son et lecteur bluetooth Authors: chimrod Date: 2019年10月06日T11:27:04+02:00 License: CC By-SA Tags: jukebox, raspberry_pi, dac et mpd Score: 57 Le contexte =========== Depuis longtemps, j'utilise un PC branché à mon ampli hifi pour écouter la musique dans le salon. Ça me permet d'avoir un bon son depuis n'importe quel PC (via pulseaudio en réseau, MPD etc) et se passer des enceintes intégrées des PCs de bureau. Ce serveur de son servait aussi à héberger mes courriels, site, et serveur de fichier. Les choses changent, et depuis quelques temps, j'ai choisi d'héberger ces services sur des instances dédiées, et mon serveur équipé de disques raid, d'une grosse alim était devenu largement surdimensionné par rapport à son utilisation. En parallèle de ça, j'ai commencé à jouer avec le raspberry pi zero, et l'idée est venue de déporter le son sur un PI0, toujours en jouant avec pulseaudio pour récupérer le son depuis mon PC ou celui de ma femme, mon serveur MPD (qui ne sera allumé cette fois qu'au moment où j'ai besoin de ces fichiers). Il y a quelques années, j'avais également joué avec un DAC bluetooth (le philips AEA2700) puis avait laissé tombé devant le peu d'entrée de mon ampli qui ne rendait pas l'utilisation pratique. Vu que le PI0 dispose du wifi et du bluetooth, pourquoi ne pas l'utiliser également comme une sortie son pour y connecter les téléphones ? C'est à priori possible, mais n'ai jamais testé ça. À voir. La carte du PI0 n'a pas de sortie son (il y a quand même une sortie HDMI qui peut être utilisée avec un adaptateur), et j'ai voulu me faire plaisir pour une fois. Vu que le PI0 contient des ports GPIO, de nombreux constructeurs sont venus proposer des extensions pour ajouter une carte son sur le pi. J'ai retenu la [Mini Boss de Allo](https://www.allo.com/sparky/miniboss-rpi-zero.html), au vu des critiques glanées ci et là, mais sans avoir d'attente particulières sur la carte. Le but est avant tout de remplacer l'existant. Ah oui, avant qu'on aborde le sujet dans les commentaires, je ne suis pas mélomane, et je me suis contenté pendant des années des sorties son intégrées aux PC (les fameux [AC97](https://fr.wikipedia.org/wiki/Audio_Codec_%2797) et autres consorts), d'un ampli datant des années 80, et des enceintes peut-être aussi âgées... Mes oreilles ont été modelées par le MP3 et les concerts. Mes avis sur le son ne sont donc pas des références. Installation ============ C'est parti pour une petite Raspbian Lite, pas d'interface graphique, le but est que tout fonctionne sans intervention (ou presque). On configure ce qu'il faut (wifi etc), on branche la carte, et comme le [libre](https://github.com/allocom/Patches) fait bien les choses, il suffit d'une ligne de conf dans un fichier pour charger les drivers correspondants : ```ini dtoverlay=allo-boss-dac-pcm512x-audio ``` Et c'est tout ! Premier test ============ Pour tester, je me suis copié un fichier directement sur la carte, installé `mpg123`, et là. WOW ! (insérer ici le commentaire de quelqu'un qui découvre une nouvelle dimension pour la première fois). Pour être sûr, je débranche tout, je remet les fils sur mon ancien serveur, rejoue le même fichier. Ok, j'ai compris, il n'y aura pas de retour. Je garde ! PulseAudio ========== Sur le serveur -------------- Maintenant, il ne reste plus qu'à configurer pour avoir le son depuis les PCs. Là c'est facile, il me suffit de reprendre ma configuration précédente : ```bash sudo apt-get install pulseaudio ``` Dans le fichier `/etc/pulse/system.pa` : ```ini # Autoriser les connexions du réseau load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;réseau-local-ipv4/24;réseau-local-ipv6::/64 auth-anonymous=1 ``` Afin que le service démarre avec le raspberry pi, nous allons préparer un petit script dans le fichier `/etc/systemd/system/pulseaudio.service` ```ini [Unit] Description=PulseAudio system server [Service] ExecStart=/usr/bin/pulseaudio --system [Install] WantedBy=multi-user.target ``` On active ensuite le démarrage du service avec la commande suivante : ```console sudo systemctl enable pulseaudio.service ``` Sur les clients --------------- Je ne voulais pas rediriger par défaut le son vers le pi0. Des fois on a juste besoin de regarder des vidéos de chats, et pour ça, le son du PC suffit largement. Sur les PCs, j'ai donc ajouté une sortie son, tout en gardant le serveur local de pulseaudio : Ça donne cette ligne à ajouter dans le fichier `/etc/pulse/default.pa` : ```ini load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.0.2:4713 sink=alsa_output.platform-soc_sound.stereo-fallback ``` Le nom de la sortie peut être trouvée avec la sortie de la commande `pulse pactl list` depuis le pi0 Ça permet de choisir à partir du contrôleur de volume de pulseaudio la sortie vers laquelle on souhaite rediriger le son. Bluetooth ========= Et maintenant, nous allons voir comment déclarer le PI0 comme une sortie bluetooth ! En fait, on va utiliser à la fois pulseaudio et son module dédié : ```bash sudo apt-get install pulseaudio-module-bluetooth ``` et on modifie le fichier `/etc/pulse/default.pa` pour le charger : ```ini load-module module-bluetooth-policy .ifexists module-bluetooth-discover.so load-module module-bluetooth-discover .endif ``` Pour que ça fonctionne, il faut aussi ajouter l'utilisateur `pulse` au groupe `lp` : ```bash sudo usermod -a -G lp pulse ``` Il faut bien sûr que le pi0 soit déclaré comme un périphérique capable de recevoir du son. Pour cela, il y a toute une série de codes que l'on peut trouver [à cette adresse](http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html) qui permettent d'identifier la classe du périphérique auprès des appareil. De mon côté, j'ai pris le code `0x200428` qui correspond à une sortie audio HIFI. Ça se passe ensuite dans le fichier `/etc/bluetooth/main.conf` : ``` Class = 0x200428 # How long to stay in discoverable mode before going back to non-discoverable # The value is in seconds. Default is 180, i.e. 3 minutes. # 0 = disable timer, i.e. stay discoverable forever DiscoverableTimeout = 0 # How long to stay in pairable mode before going back to non-discoverable # The value is in seconds. Default is 0. # 0 = disable timer, i.e. stay pairable forever PairableTimeout = 0 ``` Autorisation d'un périphérique ------------------------------ Notre pi0 autorise maintenant n'importe qui a s'appairer avec lui, à tout moment. Ça n'est toutefois pas suffisant, il faut encore autoriser la connexion. C'est là la seule étape qu'on ne peut pas automatiser, il faut faire l'autorisation manuellement, pour chaque nouveau périphérique. Il faut à se moment se connecter sur le pi0, et lancer l'autorisation via `bluetoothctl` ```console $ bluetoothctl trust ``` Et c'est tout ! Ensuite on laisse opérer la magie de pulseaudio, qui récupère le son et le joue directement. On dispose donc d'un petit périphérique sans fil qui peut maintenant centraliser tout le son de la maisonnée ! Conclusion ========== En fait, ça n'était pas aussi compliqué que ça quoi je m'attendais. J'ai passé à peu près une demi journée pour trouver les informations, et je suis au final vraiment bluffé par la qualité du son. De manière générale, le son ne laggue pas quand je joue depuis un PC ou que je diffuse en bluetooth, le PI fait bien son boulot. Voilà il ne me reste plus qu'a mettre en route ma scie à chantourner et faire un petit boitier qui va bien ! Je retourne à ma musique !

AltStyle によって変換されたページ (->オリジナル) /