Volumio, un lecteur de musique sur Rasberry Pi

Volumio, un lecteur de musique sur Rasberry Pi

Volumio est un lecteur de musique open source, disponible pour de nombreux appareils et de nombreux systèmes d’exploitation. Avec Volumio, on peut avoir quelque chose qui ressemble à une chaîne Hifi numérique à un coût très faible.
Ici j’explique l’installation de Volumio sur un Raspberry Pi 2 et l’utilisation du système ingénieux qui permet d’en faire un système que l’on peut emmener partout avec soi dès lors que l’on a une connexion wifi.

Installation de Volumio sur un Raspberry Pi

Difficile de faire plus simple ! On télécharge une image disque, on la copie sur la carte SD d’un Raspberry Pi et ça y est, notre Pi est transformé en machine à musique numérique !

On télécharge l’image sur : https://volumio.org/get-started/

Téléchargement de la version Raspberry Pi de Volumio.

Une fois l’image téléchargée, on suit les instructions de la page
https://volumio.org/get-started/ . J’ai gravé l’image sur une carte SD avec l’utilitaire win32 disk manager .
On met la carte dans le Pi, on connecte le Pi à un cable ethernet et on raccorde le cable audio. Et on met le Pi en route

Réglages pour la connexion WIFI

En théorie si le Raspberry Pi est connecté seulement en wifi, on y a accès par l’intermédiaire d’un hotspot accessible via http://volumio.local/.
Mais comme j’avais connecté le Pi avec un cable ethernet aussi, j’ai pu avec quelques difficultés (je n’ai pas réussi à savoir ce qui avait fait que ça fonctionnait…) me connecter à http://volumio.local/ via le réseau cablé et faire les réglages suivants : 

  • nom unique volumio_Pi2  – nota il ne faut pas mettre d’espace ou de _ comme je l’ai fait. volumioPi2 aurait été plus intelligent
  • sortie audio = audio jack
  • paramétrage du wifi : ssid et mot de passe

Une fois que le volumio est redémarré, il devient accessible à l’adresse http://volumiopi2.local/ si on l’a nommé volumio_pi2. On voit bien que le _ induit en erreur.

Rendre possible le « nomadisme »

Lorsque le Raspberry Pi est équipé d’un système wifi, il peut être transporté partout. Si il n’est pas paramétré pour le réseau wifi où il arrive, il se mettra automatiquement en mode hotspot si on a pensé à régler le paramètre du hotspot pour que HOTSPOT FALLBACK soit sur OUI, comme dans la photo ci-dessous :

Volumio HOTSPOT FALLBACK sur OUI : le hotspot apparaît dès qu'il ne réussit pas à se connecter au réseau

Rendre accessible en SSH

Dans l’aide de Volumio, en anglais, il est indiqué que l’on peut régler l’appareil pour être accessible en SSH.
On tape http://volumiopi2/dev/ dans un navigateur , et on a accès à un bouton pour activer le SSH !

pour activer le SSH sous Volumio

On peut alors accéder au pi en ssh avec la commande

ssh volumio@192.168.1.16

Si problème, on peut régénérer la clé SSH

ssh-keygen -R 192.168.1.16

Le mot de passe est volumio. Evidemment on peut le changer.

si besoin d’être root, on devra être root

Autres sources d’information :

Les réglages et extensions de volumio

http://volumio_pi2.local permet d’accéder à une interface de réglage. Avec un appareil android, on devra taper l’adresse IP de l’appareil…

L’installation d’extensions se fait via l’interface de réglage aussi, à l’adresse http://volumio.local/plugin-manager

La liste des extensions disponible est accessible ici : https://volumio.org/forum/volumio-plugins-collection-t6251.html.

Pour trouver l’adresse des radios en streaming, le meilleur annuaire est http://fluxradios.blogspot.com/

Raspberry Pi : créer un serveur de musique avec mpd

Raspberry Pi : créer un serveur de musique avec mpd

J’ai de la musique digitalisée sur un disque dur. Je voudrais la partager dans toute la maison sans avoir à laisser un PC gourmand en route 24/24. Je crée donc un serveur de musique sur un Raspberry Pi disposant d’un disque dur externe. J’utilise mpd comme serveur.

Note du 11/1/2018 : ce serveur ne me plaisait pas vraiment car je ne trouvais pas d’application Android vraiment agréable pour le gérer. Et je ne voyais pas comment l’utiliser pour gérer des listes de lecture et des destinations différentes. J’ai donc repris le collier sur le sujet. J’ai créé d’autres articles de la série pour créer un serveur bien mieux, avec mini DLNA et UPnP.

Dernière MAJ : 11 janvier 2018

Comment fonctionne un serveur de musique ?

J’ai eu beaucoup de mal à comprendre quoi choisir…

Je me suis refusée à prendre des systèmes qui arrivent avec la distribution, je voulais apprendre quelque chose en installant un serveur par dessus une distribution Raspbian classique (Jessie Lite dans mon cas).

Lorsqu’on a de la musique sur un disque dur, il nous faut trois éléments pour pouvoir l’entendre quelque part :

  1. un serveur de musique, qui gère les fichiers, les indexe et les met à disposition ;
  2. un client, qui agit sur le serveur pour lui dire quoi jouer, créer des « playlists », lui dire où émettre les sons générés par la playlist.
  3. un « renderer » (je ne vois pas comment traduire ça), qui restitue la musique dans des haut-parleurs.

mpd tient lieu de serveur. Sur le même pi, on place un client (mpc) avec lequel on peut intéragir en ligne de commande. Et si on connecte le Pi contenant mpd à des haut-parleurs (ou à un ampli), c’est mpd qui assure la fonction de « renderer ».

Si je veux jouer de la musique à partir du même disque dur dans d’autres endroits, j’ai deux possibilités :

  1. lire le flux audio du premier Pi et le jouer sur l’équipement qui le lit. Par exemple, je peux l’écouter sur une tablette équipée de MPdroid, qui va tenir lieu de client, mais qui va aussi servir de renderer pour un éventuel flux audio.
  2. installer d’autres Pi équipés de mpd. Dans ce cas, il semblerait (je n’ai pas encore essayé) qu’il faut installer icecast sur le premier Pi et c’est icecast qui se charge de transmettre les fichiers au deuxième Pi.

Préparer le Raspberry Pi

J’utilise un Raspberry Pi B+, avec un dongle wifi Edimax EW-7811Un. Pour le préparer, suivre ces trois autres articles de ce site :

J’ai donc un Pi correctement installé, avec un disque dur externe monté sur le répertoire /media/iomega et partagé par samba.

Note du 2/1/2018 : je l’ai aussi fait sur un Pi 3 sans souci

Installer mpd

J’ai principalement utilisé les sources suivantes :

Installer le serveur mpd, le client mpc et le gestionnaire de son alsa-utils.

apt-get install mpd mc alsa-utils

Installer les codecs qui pourraient être utiles :

apt-get install lame flac faad vorbis-tools

Vérifier que le son sort du Raspberry Pi

brancher des haut-parleurs dans la prise jack audio du Pi. On utilise la carte audio (plutôt mauvaise sur le Pi version 1).

Selon cet article, en anglais, on teste un son comme ça :

aplay /usr/share/sounds/alsa/Front_Right.wav

Si aucun son ne sort, on vérifie que le driver audio Broadcom est bien présent

lsmod | grep snd_bcm2835

S’il y a quelque chose qui s’affiche, c’est bon. Sinon, il faut charger le driver avec

modprobe snd_bcm2835

Si la commande s’éxécute sans message d’erreur c’est que c’est bon.

Mais aucune des deux commandes suivantes ne produit de son dans mes hauts parleurs

speaker-test -t sine -f 440 -c 2 -s 2
aplay /usr/share/sounds/alsa/Front_Center.wav

Je force donc l’utilisation de la sortie analogique dans laquelle les haut-parleurs sont connectés. Sinon c’est la sortie HDMI qui est utilisée par défaut.

amixer cset numid=3 1

Je n’entend toujours rien. Je monte le volume des haut-parleurs et là c’est bon.

configurer mpd

Pour bien comprendre le contenu du fichier de configuration, voir The Music Player Daemon – User’s Manual.

mpd a en principe créé un utilisateur ‘mpd’, qui appartient au groupe ‘audio’.

Modifier la configuration de samba

Les utilisateurs du groupe ‘audio’ doivent pouvoir lire les contenus de /media/iomega/MULTIMEDIA/musique et écrire dans /media/iomega/MULTIMEDIA/mpd.

Dans etc/smb.conf etc/samba/smb.conf (modifié le 2/1/2018)

valid users = @users, @audio  #utilisateurs ayant le droit de lire = de groupes @group
read only = yes
write list = @users, @audio   # utilisateurs ayant droit d’écrire
browseable = yes
public = yes

Je pense que ça ne sert à rien de régler valid users  et write list  puisque j’ai défini public=yes .

Modifier la configuration de mpd

éditer /etc/mpd.conf pour que :

music_directory		"/media/iomega/MULTIMEDIA/musique"
playlist_directory	"/media/iomega/MULTIMEDIA/musique/mpd"
db_file			"/media/iomega/MULTIMEDIA/musique/mpd/mpd.db"
user			« mpd »
#group               	"audio"
auto_update     	"yes"

volume_normalization    "yes"

bind_to_address          "192.168.1.102"
port			 "6600"

audio_output {
	type		"alsa"
	name		"Ampli salon"
#	device		"hw:0,0"	# optional
#	mixer_type      "hardware"      # optional
#	mixer_device	"default"	# optional
#	mixer_control	"PCM"		# optional
#	mixer_index	"0"		# optional
}

auto_update permet une mise à jour automatique de la base de données lorsque les fichiers sont modifiés.

Le réglage de la sortie audio de type « alsa » est identique à la configuration par défaut. La seule différence est le nom de cette sortie (« ampli salon »), qui permet d’identifier les sorties dans les clients.

Note : Si j’utilisais une carte son usb, il faudrait changer la ligne device             « hw:0,0 » , probablement en mettant « hw:1,0 ».

Pour savoir quels sont les numéros de cartes audio, taper :

cat /proc/asound/modules

Ça dit quelque chose comme :

0 snd_bcm2835
1 snd_sub_audio

La carte audio du Pi (driver snd_bcm2835) est numérotée 0. La carte USB (ici driver snd_sub_audio) est n°1.

On peut le vérifier en connectant la carte USB aux haut-parleurs puis en tapant :

aplay -D plughw:1,0 /usr/share/sounds/alsa/Front_Right.wav

Si le volume est suffisant (assez élevé), on entend une voix qui dit « front » puis « right ».

Ca fonctionne avec une carte audio à 2.82 € pièce (livraison gratuite si au moins 3 achetées) achetée sur ce site chinois.

J’ai par erreur laissé le # devant group. Cette instruction n’est donc pas utilisée. Ca n’a pas gêné, sans doute car j’avais réglé le disque comme public avec samba.

Créer les répertoires, fichiers et droits d’accès nécessaires

Créer tous les répertoires ou fichiers listés dans etc/mpd.conf et qui n’existent pas. Ensuite, j’ai placé mon utilisateur windows (alwindows) dans le groupe audio, et l’utilisateur mpd dans le groupe users mais je ne suis pas certaine que ça soit indispensable.

adduser mpd users
adduser mpd audio
adduser alwindows audio

Régler les droits d’accès et les propriétaires de tout ce qui se trouve dans les répertoires utilisés par mpd et définis dans mpd.conf :

chown -R mpd:audio /media/iomega/MULTIMEDIA
chmod -R g+rwx /media/iomega/MULTIMEDIA

chown -R mpd:audio /var/log/mpd
chmod -R g+rwx /var/log/mpd

chown -R mpd:audio /run/mpd
chmod -R g+rwx /run/mpd

chown -R mpd:audio /var/lib/mpd
chmod -R g+rwx /var/lib/mpd

Redémarrer samba :

service smbd restart

lancer mpd

mpd

Si bug « « socket: Failed to bind to ‘192.168.1.102:6600’: Address already in use » arrêter mpd avec :

service mpd stop

Puis le redémarrer avec

mpd --no-daemon --stdout --verbose

On voit la base de données qui se met à jour. Ca défile de 19h45 à 19h53 pour 65 Go de musique.

En cas de problème, il peut être utile de lire le log /var/log/mpd/mpd.log

Normalement, pour lancer mpd comme un service, on tape :

/etc/init.d/mpd start

tester avec MPdroid

MAJ : MPdroid fonctionne correctement mais son interface utilisateur est vraiment compliquée. J’ai installé M.A.L.P. – MPD Client, et c’est plus simple à utiliser.

Il suffit de renseigner l’adresse du serveur (192.168.1.102) et du port (6600) et le client se lance sur une tablette android.

Ca fonctionne : de ma tablette je déclenche de la musique.

Ecouter des radios web avec mpd

Je me suis inspirée de Un serveur musical avec MPD et Installation de MPD sur un raspberry pi !.

Dans le répertoire déclaré en tant que « playlist_directory » lors de la configuration de mpd (« /media/iomega/MULTIMEDIA/musique/mpd »), créer un fichier radios.m3u , dans lequel on place les url des radios sous la forme :

#EXTM3U
#EXTINF:-1,Country
http://streaming.radionomy.com/NashvilleEdge

Les sites European radios  et flux Radio liste les adresses de streaming des radios.

Ensuite, régler le propriétaire et les droits d’accès de ce fichier :

chown -R mpd:audio /media/iomega/MULTIMEDIA/musique/mpd/radios.m3u
chmod -R g+rwx /media/iomega/MULTIMEDIA/musique/mpd/radios.m3u

Réglages et création d’un flux audio

Imaginons que j’aime bien la musique qui se joue dans le salon et que j’ai envie de l’écouter dans mon bureau. Dans ce cas, il me suffit d’écouter le flux audio issu du salon. Mpd peut être configuré pour générer un flux audio qu’on peut écouter avec un navigateur internet ou autre lecteur de musique capable de lire un flux internet. On peut même créer une radio web diffusée à l’extérieur. Mais bon, ce n’est pas ce que je veux faire !

Pour générer un flux audio, éditer etc/mpd.conf et régler le « audio_output » de type « httpd » :

audio_output {
	type		"httpd"
	name		"flux httpd"
	encoder		"lame"			# optional, vorbis or lame
	port		"8000"
	bind_to_address "192.168.1.102"   		# optional, IPv4 or IPv6
	quality		"5.0"			# do not define if bitrate is defined
#	bitrate		"128"			# do not define if quality is defined
	format		"44100:16:1"
	max_clients "0"         # optional 0=no limit
}

redémarrer mpd avec service mpd restart .

Pour accéder au flux ainsi défini, on tape l’adresse suivante dans un navigateur (ou un lecteur capable de lire un flux réseau) :

  • http://192.168.1.102:8000/mpd.mp3 si on a réglé l’encodeur sur « lame »
  • http://192.168.1.102:8000/mpd.ogg si on a réglé l’encodeur sur « vorbis »

Mais cette adresse ne fonctionne que si l’on a lancé la génération d’un flux de streaming avec un client. J’ai utilisé Chimney, disponible gratuitement sur le « store » Windows 10 :

  • lancer la lecture de quelque chose ;
  • dans l’onglet général, cocher « stream to desktop » ;
  • dans l’onglet output, cochés les outputs « ampli salon » et « flux httpd » (ce sont les noms que j’ai défini dans mpd.conf) ;
  • dans l’onglet streaming, rien à faire si on n’a pas modifié le port par défaut (8000).

Ensuite, je peux ouvrir le flux audio, dans VLC ou un navigateur internet.

Utilisation de MPdroid

MPdroid est un client android pour mpd.

MAJ : MPdroid fonctionne correctement mais son interface utilisateur est vraiment compliquée. J’ai installé M.A.L.P. – MPD Client, et c’est plus simple à utiliser.

Une fois que le client est installé, il suffit de renseigner les éléments suivants :

  • Hôte : 192.168.1.102
  • Port : 6600
  • Hôte streaming : 192.168.1.102
  • Port streaming : 8000
  • Mot de passe : rien
  • Suffixe url streaming : mpd.mp3
  • Notification persistante : pas coché

Utilisation de VLC (sur PC) pour lire le flux audio

Pour créer un lien rapide vers le flux, on ouvre le flux une première fois à la main, en indiquant http://192.168.1.102:8000/mpd.mp3 dans Média / ouvrir un flux réseau. On lance la lecture.

Ensuite, dans Média / Enregistrer la liste de lecture, on enregistre, par exemple sous le nom salon-stream.xspf  .

Celà crée un fichier (que l’on peut éditer avec notepad++ par exemple) :

<?xml version="1.0" encoding="UTF-8"?>
<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">
	<title>Liste de lecture</title>
	<trackList>
		<track>
			<location>http://192.168.1.102:8000/mpd.mp3</location>
			<title>flux httpd</title>
			<extension application="http://www.videolan.org/vlc/playlist/0">
				<vlc:id>2</vlc:id>
				<vlc:option>network-caching=1000</vlc:option>
			</extension>
		</track>
	</trackList>
	<extension application="http://www.videolan.org/vlc/playlist/0">
			<vlc:item tid="0"/>
	</extension>
</playlist>

Et voilà, un simple clic et j’accède au flux audio sur mon ordinateur Windows.

Et maintenant ?

Je peux explorer l’intérêt de disposer d’UPnP comme expliqué dans cet article de « lesbonscomptes.com » ou avec un media player spécifique tel que proposé ici sur GitHub.

Il faut aussi que je trouve un client sous Windows 10 plus agréable que Chimney.