Ci-dessous, les différences entre deux révisions de la page.
— |
serveur-son [2015/12/28 11:25] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== 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 [[http://www.audiophonics.fr/fr/dac-diy/audiophonics-i-sabre-dac-es9023-raspberry-pi-a-b-20-i2s-p-9341.html|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 : [[https://github.com/debian-pi/raspbian-ua-netinst|raspbian-ua-netinstall]]. | ||
+ | |||
+ | Il faut d'abord télécharger la dernière version en ''.img.xz'' sur [[https://github.com/debian-pi/raspbian-ua-netinst/releases/tag/v1.0.7|cette page]]. Ensuite on va suivre [[https://github.com/debian-pi/raspbian-ua-netinst|ces instructions]] : | ||
+ | |||
+ | <code bash> | ||
+ | xzcat /path/to/raspbian-ua-netinst-<latest-version-number>.img.xz > /dev/sdX | ||
+ | sync | ||
+ | </code> | ||
+ | |||
+ | Ensuite on peut ajouter les paquets que l'on veut installer au départ en éditant le fichier ''installer-config.txt''. | ||
+ | |||
+ | <code bash> | ||
+ | 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' | ||
+ | </code> | ||
+ | |||
+ | 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 : | ||
+ | |||
+ | <code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | ===== 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'') : | ||
+ | |||
+ | <code bash 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" | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== 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 : | ||
+ | |||
+ | <code bash 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 | ||
+ | </code> | ||
+ | |||