Music Player Daemon, Icecast & Beets sur Debian/Raspbian

J’ai, comme beaucoup de personne, pas mal de musique dans un format numérique quelconque.

Ces fichiers musicaux sont stocké sur un seveur de fichier (NAS).

J’ai raspberry pi qui héberge un serveur mpd qui va lire la musique via NFS sur le NAS.

Je diffuse ensuite cette musique sur une “web radio” perso via icecast.

IceCast n’est pas nécessaire au fonctionnement mais j’aime bien la petite page web avec quelques infos sur la musique qui est diffusée…

MPD

MPD est un lecteur audio sans interface… donc en mode serveur. Il permet de diffuser de la musique en local ou sous forme de plux audio. On peut l’utiliser pour créer une pseudo web radio.

Installation

Rien d’extra ordinaire, MPD est dans les dépots raspbian/debian

En root :

apt install mpd

Configuration

Le fichier de configuration se trouve dans /etc/mpd.conf.

Les entrées suivante me semble les plus importante a configurer :

  • music_directory
  • log_file
  • user
  • group
  • bind_to_address
  • port
  • password

Et pour finir, une ou plusieurs sortie audio.

Dans mon cas une sortie de type shout.

audio_output {
         type            "shout"
         encoder         "vorbis"                # optional
         name            "Le nom que l'on donne à son Stream"
         host            "0.0.0.0"
         port            "8000"
         mount           "/mon_point_de_montage.ogg"
         password        "le mot de passe défini dans la conf IceCast"
         quality         "9.0"
 #       bitrate         "128"
         format          "44100:16:1"
         protocol        "icecast2"              # optional
         user            "source"                # optional
         description     "un nom qui va bien"        # optional
         url             "https://mon.url"    # optional
         genre           "mixed"                 # optional
         public          "no"                    # optional
         timeout         "2"                     # optional
         mixer_type      "software"              # optional
 }

La Future radio sera donc disponible à l’adresse : https://mon.url/mon_point_de_montage.ogg

Client

mpc

On place dans sont .bashrc:

export MPD_HOST=PASSWORD@localhost

Ou, bien sur, PASSWORD est le mot de passe défini dans le champ password défini dans la conf mpd.

Et on remplace localhost par l’ip de la machine qui va bien. Dans mon cas, le client est sur la machine serveur donc…

ncmpcpp

On ne peut faire plus simple comme nom…

J’ai suivi la fiche sur debian facile.

La configuration par défaut prend en charge le même parametrage que pour mpc donc ça fonctionne out of the box…

IceCast2

Outil pour construire une web radio. On dispose alors d’une page web avec un player qui pointe sur la radio et permet de la diffuser.

Installation

IceCast est dans les dépots.

apt install icecast2

Sur raspbian, j’ai rencontré un petit soucis… les répertoires /etc/icecast2/admin et /etc/icecast2/web était vide… ce qui est embêtant vue qu’ils contiennent le site web et la page d’administration… alors tel un ninja, j’ai récupérer le source de l’application sur le site du projet et j’ai récupéré le contenu de ces deux répertoire.

Configuration

Ma configuration est très basique…

La configuration se trouve dans /etc/icecast2/icecast.xml.

 <authentication>
           <!-- Sources log in with username 'source' -->
           <source-password>le mot de passe défini dans la conf IceCast</source-password>
           <!-- Relays log in with username 'relay' -->
           <relay-password>le mot de passe défini dans la conf IceCast</relay-password>
  
           <!-- Admin logs in with the username given below -->
           <admin-user>un_login</admin-user>
           <admin-password>un mot de passe</admin-password>
       </authentication>

Beets

J’utilise beets pour gérer ma bibliothèque musicale ainsi que pour la génération automatique de playlist.

L’outil est capable :

  • d’organiser les répertoires et fichiers
  • de gérer les metadatas
  • de compléter les metadatas
  • de générer des playlists automatiquement.

Je me suis basé sur la documentation et sur divers blog pour parvenir à mes fins !

Installation

pip install beets

Configuration

Le fichier de configuration est dans ~/.config/beets/config.yaml

directory: /mon/point/de/montage/des/fichiers
library: /chemin/vers/ma/bdd/beets_musiclibrary.db
import:
   move: yes
   write: yes

plugins: embedart the duplicates missing info smartplaylist mpdupdate fetchart # activation de quelques plugins natifs

#paths:
#   default: %the{$albumartist}/[$year] $album/$track - $title # le motif permettant de nommer les dossiers associés aux albums

the:
   patterns: ['^les ', '^le ', '^la ', '^un '] # les mots à virer. Ne pas oublier l'espace ou "Lady Saw" devient "Dy Saw, La" et on ne la reconnait plus

lastgenre:
   count: 5 #nombre de catégories à récupérer au max

#https://beets.readthedocs.io/en/v1.3.17/plugins/smartplaylist.html?highlight=playlist
#Le plugin pour générer des playlist automatique

smartplaylist:
    relative_to: /mon/point/de/montage/des/fichiers
    playlist_dir: /mon/point/de/montage/des/playlists
    playlists:
        - name: all.m3u
          query: ''
        - name: beatles.m3u
          query: 'artist:Beatles'
        - name: film.m3u
          query: 'film'

mpdupdate:
    host: localhost
    port: 6600
    password: 'PASSWORD'

fetchart:
    cautious: true
    cover_names: front back
    sources: itunes *

Utilisation

Client MPD pour Android

Il y en existe plein, je donne juste celui que j’utilise =).