Installer un serveur de son sur RaspberryPi2
Ce tuto a pour but de garder en mémoire l'installation d'un serveur de son sur RaspberryPi2 doté d'un DAC branché sur le GPIO, modèle ISabre Dac ES9023. On activera les drivers nécessaires au fonctionnement du DAC, le serveur de musique MPD, le serveur de son PulseAudio et on essayera de faire marcher avec ça le déport des sorties son d'autres ordis du réseau local vers le Raspi2 (ceci permet en effet de profiter du son sur l'ampli depuis n'importe quel autre ordinateur, le Raspi2 reccupérant le flux depuis le réseau).
Installation de Debian Jessie sur le Rasp
J'ai choisi d'installer une debian minimale sur le Rasp. Ceci se fait avec ce petit script bien pratique : raspbian-ua-netinstall.
Il faut d'abord télécharger la dernière version en .img.xz
sur cette page. Ensuite on va suivre ces instructions :
xzcat /path/to/raspbian-ua-netinst-<latest-version-number>.img.xz > /dev/sdX sync
Ensuite on peut ajouter les paquets que l'on veut installer au départ en éditant le fichier installer-config.txt
.
preset=server packages=vim,alsa-base,bash-completion,htop,keyboard-configuration,raspi-config,nfs-common,pulseaudio,pulseaudio-esound-compat,pulseaudio-module-lirc,pulseaudio-module-zeroconf,lame,faad,gstreamer1.0-alsa,gstreamer1.0-pulseaudio,gstreamer1.0-plugins-base,gstreamer1.0-plugins-bad,gstreamer1.0-plugins-good,gstreamer1.0-plugins-ugly,rng-tools,mpd,mpc,psmisc,bzip2,unzip,gzip mirror=http://mirrordirector.raspbian.org/raspbian/ release=jessie hostname=cynips domainname= rootpw=xxxxxxxxxx cdebootstrap_cmdline= bootsize=+128M # /boot partition size in megabytes, provide it in the form '+<number>M' (without quotes) rootsize= # / partition size in megabytes, provide it in the form '+<number>M' (without quotes), leave empty to use all free space timeserver=time.nist.gov cmdline="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline" rootfstype=ext4 rootfs_mkfs_options= rootfs_install_mount_options='noatime,data=writeback,nobarrier,noinit_itable' rootfs_mount_options='errors=remount-ro,noatime'
On insère la carte flashée dans le Rasp et tout est automatique par la suite.
Après l'install et le reboot on se connecte en ssh en utilisant le compte root
et le mot de passe raspbian
. On change ce mot de passe après la première connection avec la commande passwd
puis on configure la langue et le clavier avec dpkg-reconfigure locales
, dpkg-reconfigure tzdata
, dpkg-reconfigure keyboard-configuration
. On peut ensuite lancer ces commandes pour configurer les utilisateurs, le son et le client web pour mpd :
echo -e "arm_freq=1000\ncore_freq=500\nsdram_freq=500\nover_voltage=2\ngpu_mem=16\ndtoverlay=hifiberry-dac\ndtoverlay=lirc-rpi\ndtparam=i2c_arm=on\ndtparam=i2s=on\ndtparam=spi=on" >> /boot/config.txt sed -i 's/snd-bcm2835//g' /etc/modules echo "bcm2708-rng" >> /etc/modules adduser salon addgroup -gid 1010 maison adduser salon audio adduser salon pulse adduser salon pulse-access adduser salon maison mkdir -p /home/salon/.mpd/playlists chown -R /home/salon/.mpd chmod -R 755 /home/salon/.mpd mkdir /home/salon/musique mkdir /home/salon/data echo "sirex:/media/musique /home/salon/musique nfs defaults 0 0" >> /etc/fstab echo "sirex:/media/data /home/salon/data nfs defaults 0 0" >> /etc/fstab wget www.ympd.org/downloads/ympd-1.2.3-armhf.tar.bz2 -O /home/salon/ympd.tar.bz2 tar -xvf /home/salon/ympd.tar.bz2 rm /home/salon/ympd.tar.bz2 reboot
Configuration de MPD
MPD utilise un fichier de conf qu'il faut modifier pour que MPD s'execute en temps que l'utilisateur que l'on désire et qu'il utilise les bonnes sources d'entrée et de sortie pour le son. Il faut aussi lui donner les bons chemins vers les répertoires de musique et des configurations.
Voici le fichier de conf utilisé (/etc/mpd.conf
) :
- mpd.conf
music_directory "/home/salon/musique/" playlist_directory "/home/salon/.mpd/playlists" db_file "/home/salon/.mpd/tag_cache" log_file "/home/salon/.mpd/mpd.log" pid_file "/home/salon/.mpd/pid" state_file "/home/salon/.mpd/state" sticker_file "/home/salon/.mpd/sticker.sql" user "salon" bind_to_address "127.0.0.1" bind_to_address "192.168.2.3" port "6600" auto_update "yes" follow_outside_symlinks "yes" follow_inside_symlinks "yes" zeroconf_enabled "yes" zeroconf_name "Musique Cynips" #input { # plugin "cdio_paranoia" ##cdda://sr0 #} #input { # plugin "curl" ## proxy "http://192.168.178.3:8080" ## proxy "proxy.isp.com:8080" ## proxy_user "user" ## proxy_password "password" #} audio_output { type "alsa" name "Dac project" device "hw:0,0" # optional # format "44100:16:2" # optional # mixer_device "default" # optional # mixer_control "PCM" # optional # mixer_index "0" # optional # dop "no" } #audio_output { # type "pulse" # name "My Pulse Output" ## server "localhost" # optional #} mixer_type "software" volume_normalization "yes" audio_buffer_size "8192" filesystem_charset "UTF-8" id3v1_encoding "UTF-8"
Mise à jour de la base de donnée de MPD avec nautilus
Le navigateur de fichier Nautilus permet d'utiliser des scripts sur les fichiers et répertoires sélectionnés. Pour cela, il faut mettre les scripts dans /home/user/.local/share/nautilus/scripts
. Lorsque l'on ajoute un nouveau répertoire avec de la musique ou qu'on modifie les fichiers à l'interieur d'un répertoire, la base de donnée de MPD n'est pas à jour et on ne peut pas écouter de suite ces fichiers. Il faut donc mettre à jour la base et pour éviter de tout mettre à jour via le client (car ça peut être long), on crée un script nautilus pour y mettre :
- update-mpd.sh
#!/bin/bash rootdirectories="/home/pec/Musique/ /media/data/" OLDIFS=$IFS IFS=$'\n' for file in `echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"`; do IFS=$OLDIFS parent=`dirname "${file}"` for dir in $(echo $rootdirectories); do file=`echo "${file}" | sed "s|$dir||"` parent=`echo "${parent}" | sed "s|$dir||"` done if [[ -n $(ssh pec@cynips -C "mpc ls \"$file\"" 2>&1 | grep "error: Not found") ]]; then nom=$parent else nom=$file fi ssh pec@cynips -C "mpc update \"${nom}\"" zenity --notification --text "Mise à jour de $nom sur MPD" & done