Des enceintes sans fil à l’aide d’un Raspberry Pi

C’est un peu le truc « in » du moment pour les bidouilleurs et j’ai craqué moi aussi en commandant un Raspberry Pi. Je n’avais pas la moindre idée de ce que j’allais en faire au moment où je l’ai acheté mais depuis, je lui ai trouvé quelques utilisations sympathiques. L’une de ces utilisations est un récepteur audio sans fil. Ce que j’entends par là, c’est que je peux faire passer le son de n’importe quelle application de mon PC par les enceintes branchées sur le Raspberry Pi à partir du moment où le-dit PC est connecté sur le même réseau (dans mon cas en wifi via la box de mon fournisseur d’accès).

Dressons rapidement une liste du matériel nécessaire:

  • la box de votre fournisseur d’accès à Internet ou un routeur wifi
  • un Raspberry Pi connecté via un câble réseau à votre box
  • des enceintes connectées au Raspberry Pi via la prise jack
  • un PC connecté en wifi à la box

Les exemples de configuration sont valables pour la distribution Archlinux (ArchlinuxARM pour le Raspberry Pi, Archlinux pour le PC) mais peuvent être adaptés à d’autres distributions.

J’ai exploré plusieurs pistes et j’en suis arrivé à la conclusion que ce qui répondrait le mieux à mes usages est PulseAudio. En effet, PulseAudio intègre un serveur réseau qui me permet de sortir le son de n’importe quelle application, y compris un navigateur où je fais tourner Youtube ou Deezer.

Première étape, installer PulseAudio sur le Raspberry Pi et sur le PC. Ce qui est bien, c’est que c’est la même commande (à exécuter sur chaque machine tout de même ;-) ) :
# pacman -S pulseaudio
On va aussi installer le package alsa-utils car il ajoute deux services systemd qui sauvegarde le volume à l’extinction du PC et qui le restaure au démarrage.
# pacman -S alsa-utils

Côté PC, c’est déjà terminé. Si vous êtes sous Ubuntu, PulseAudio est installé par défaut donc c’est encore plus simple.

Côté Raspberry Pi par contre, il reste un peu de configuration. Bien que ce soit déconseillé, on va faire tourner PulseAudio en mode système car les raisons invoquées ne s’applique pas vraiment à la situation de notre Raspberry Pi.

On commence par créer un groupe « pulse » et un utilisateur « pulse » dans ce groupe.
sudo groupadd --system pulse
sudo useradd --system -G pulse --home /var/run/pulse pulse

Il va falloir aussi éditer le fichier /etc/pulse/system.pa et y ajouter la ligne suivante :
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
Il faut aussi rajouter un symbole dièse devant la ligne suivante pour éviter que PulseAudio se mette en veille:
# load-module module-suspend-on-idle

A ce niveau, vous pouvez lancer PulseAudio sur votre Raspberry Pi avec la commande suivante :
sudo pulseaudio --system -D --disallow-module-loading --disallow-exit

Si comme moi, vous avez branché à la fois le HDMI et la prise jack sur votre Raspberry Pi, le son va sortir par la prise HDMI par défaut. La commande qui suit résout le problème :
sudo amixer cset numid=3 "n"
n=0: auto
n=1: analog
n=2: hdmi

On y est presque, depuis votre PC, commencez par redémarrer votre environnement de bureau qui se chargera de démarrer PulseAudio pour vous et lancer votre application avec la commande :
PULSE_SERVER="adresse_ip_du_pi" "application"
en remplaçant « adresse_ip_du_pi » par l’adresse IP de votre Raspberry Pi et « application » par votre lecteur de musique favori (assurez-vous qu’il n’a pas de session déjà ouverte sinon fermez-là avant de lancer la commande)

Voilà !

Sauf que après reboot du Raspberry Pi, ça ne marche plus. Il faut soit relancer la commande sudo pulseaudio --system -D --disallow-module-loading --disallow-exit ou créer un service systemd qui va le faire pour nous au démarrage.
Créez le fichier /usr/lib/systemd/system/pulseaudio.service

[Unit]
Description=PulseAudio Sound System
After=network.target
 
[Service]
ExecStart=/usr/bin/pulseaudio --system --disallow-module-loading --disallow-exit
Restart=always
 
[Install]
WantedBy=multi-user.target

et activez le avec la commande :
sudo systemctl enable pulseaudio.service

Amélioration :
Bon, ça marche mais le son n’est vraiment pas terrible : il y a des craquements, des sauts, bref ce n’est pas super agréable.
Comme souvent sous Linux, il y a beaucoup de choses paramétrables dans des fichiers de configuration. Celui qui nous intéresse ici est le fichier /etc/pulse/daemon.conf où il faut décommenter et changer les valeurs des lignes suivantes :

resample-method = trivial
default-sample-rate = 48000
default-fragments = 2
default-fragment-size-msec = 10

(configuration trouvé ici)

Les commentaires sont fermés.