Utiliser le raspberry en tant que serveur de son grâce au serveur Pulseaudio. Le raspberry sera connecté à la chaine Hifi. Tous les postes du réseau pourront rediriger leurs flux audios sur le serveur pulseaudio du raspberry afin que le son soit joué sur la chaine.
ALSA (Advanced Linux Sound Architecture) et Pulseaudio ne sont pas installés par défaut:
sudo -i apt-get update apt-get install alsa-base pulseaudio pulseaudio-module-zeroconf avahi-daemon
Les dépendances seront installés notamment le paquet alsa-utils contenant alsamixer (configuration du périphérique audio depuis l'espace utilisateur en console).
Charger le pilote du périphérique son
modprobe snd-bcm2835
Pour que le module soit automatiquement chargé lors du démarrage, l'ajouter dans le fichier /etc/modules.conf
root@raspberrypi:~# echo "snd-bcm2835" | tee -a /etc/modules
Lancer automatiquement le serveur pulseaudio au démarrage de la raspberry. Modifier le fichier /etc/default/pulseaudio, passer la variable PULSEAUDIO_SYSTEM_START à 1.
# 0 = don't start, 1 = start PULSEAUDIO_SYSTEM_START=1
$ sudo cp /usr/share/doc/pulseaudio/examples/pulseaudio.init.example /etc/init.d/pulseaudio $ sudo chmod 755 pulseaudio $ sudo update-rc.d pulseaudio defaults 98 02
Remarque: Cette variable active le script de gestion du daemon dans /etc/init.d. Si cette variable est a zero le script init est sans effets.
Configurer le serveur pulseaudio pour qu'il écoute sur le réseau. Modifier le fichier de configuration /etc/pulse/system.pa. Décommenter ou ajouter les directive chargeant les modules zeroconf et native-protocol-tcp
### Utiliser raspeberry comme serveur de son load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/16 auth-anonymous=1 load-module module-zeroconf-publish load-module module-rtp-recv
Démarrer le service
root@raspberrypi:~# service pulseaudio start
On peut vérifier que le serveur ecoute sur 5353 (RTP multicast)
$ netstat -anpe | grep 5353
Vérifier les niveaux sonores avec avec alsamixer (à l'installation, tous les canaux sont à 0). Sous Alsamixer le label <MM> indique que le canal est désactivé. la valeur <00> indique qu'il est actif mais d'intensité nulle. Ma touche M permet d'activer/désactiver le canal les touches ← et → permettent de sélectionner le canal et les touches haut et bas a modifier les intensités.
Si lors de l'appel de la commande alsamixer le message d'erreur suivant s'affiche: cannot open mixer: No such file or directory
Vérifier si root peut lancer la commande. Si c'est le cas, vérifier que l'utilisateur courant est dans les groupes audio et pulse-access. L'utilisateur doit être dans ce groupe pour contrôler les périphériques audios.
$ sudo usermod -a -G pulse-access pi
Vérifier que le pilote du périphérique audio est chargé
lsmod | grep snd
Vérifier que des périphériques audio existent
aplay -l
Test des hauts parleurs
speaker-test -c 2
Pour jouer des sons(mp3) à partir de la ligne de commande plusieurs programmes existent:
sudo apt-get install mpg123
Il faut maintenant configurer les postes clients pour qu'ils se connectent au serveur pulseaudio du raspberry. Pour que pulseaudio puisse détecter automatiquement les périphériques présents sur le réseau il faut sur chaque poste:
cela installer les paquets suivants:
yoann@hermes:~$ sudo apt-get install paman paprefs pavucontrol padevchooser
Menu Applications » son et vidéo »Pulse audio device chooser. Selectionner Configure Local Sound Server… Activer l'option “Make discoverable PulseAudio network sound devices available locally” Onglet Multicast/RTP activer l'option “” et selectionner l'option create separate
Redirger les application ALSA Rediriger les application utilisant ALSA sur le serveur pulseaudio. Modifier le fichier /etc/alsa.conf pour tout le systeme ou ~/alsarc pour l'utilisateur courant
Coté client, inserer dans le fichier /etc/pulse/default.pa
load-module module-zeroconf-discover
Si le serveur n’apparaît pas dans les périphérique, on peut l'ajouter manuellement avec la commande:
pacmd load-module module-tunnel-sink server=192.168.1.10
Réduire la quantité de mémoire allouée exclusivement au GPU. Je l'ai passée au minimum 16 MO.
Les connexion se font via ssh, on peut désactiver les consoles ttyX. Éditer le fichier /etc/inittab
et commenter les lignes puis pour forcer la relecture de inittab:
telinit q
Rapidement le son joué par le serveur saccade fortement. Le problème disparaît si le daemon est lancé en tant que root:
/usr/bin/pulseaudio -D --system