La Lanterne Rouge

Warning: Geek Inside

MPD : Mais Pourquoi Donc ?

- Posted in Sans catégorie by

J'ai raconté dans un article précédent que j'avais installé une webradio sur mon serveur Usul. J'ai utilisé pour cela MPD, d'abord en utilisant Icecast2 pour la diffusion, avant de me rendre compte que MPD proposait déjà un système simple (et économe en ressources !) pour assurer ce rôle. Pour rappel, cette radio est chargée avec une playlist composée de tous mes dossiers de musique hébergés sur mon NAS, et les joue aléatoirement.

MPD Playlist Updater

Comme ma musique évolue très régulièrement (suite à un tri de ma part, à l'ajout de nouveaux albums, ...), j'avais initialement un petit CRON nocturne qui était chargé de rafraîchir la playlist en reparcourant les dossiers. Mais au bout de quelques mois j'ai trouvé que certaines des pistes n'avaient rien à faire sur la radio : j'aurais bien aimé les exclure automatiquement à chaque rafraîchissement.

J'ai donc créé un petit script en PHP – appelé de manière très originale "MPD Playlist Updater" – qui est chargé de regénérer la playlist puis de la filtrer. Ce script se repose sur mpc pour commander le rafraîchissement, puis parse ensuite le fichier M3U obtenu (situé sur Debian dans /var/lib/mpd/playlists) et supprime les lignes selon une méthode simple :

  • un fichier exclude.conf est présent dans le répertoire du script mpd_playlist_updater.php et contient un filtre par ligne
  • ce fichier est est lu par le script et chaque ligne est utilisée comme pattern du filtre
  • si une entrée de la playlist matche un de ces patterns, alors elle est retirée de la playlist

L'ajout et la modification de filtre est donc très simple à effectuer puisqu'il suffit d'ouvrir le fichier exclude.conf avec un éditeur de texte (compatible UTF-8...).

Un petit résumé est écrit sur la sortie standard, ce qui entraîne l'envoi d'un mail lorsque le script est exécuté par CRON. Je peux ainsi savoir quel est le nombre de fichiers présents dans la playlist du jour et le nombre de fichiers exclus. Logiquement, le premier chiffre augmente régulièrement...

16384 et pas une de plus

Mais en regardant les rapports envoyés par mail, j'ai constaté récemment que le nombre de fichiers n'évoluait pas, alors même que je venais d'ajouter plusieurs albums à ma mp3thèque. Le nombre restait étrangement stable à 16384. Tiens donc.

Ce nombre me dit quelque chose. Voyons voir, ouvrons la calculatrice et faisons 16384 / 8. Résultat = 2048. Hum, d'accord à vue de nez ça fait 2^14, ce n'est donc pas un nombre quelconque. Mais pourquoi le nombre de fichiers reste-t-il bloqué à ce chiffre ?

Je parcours les dossiers de musique en utilisant

$ mpc ls

et tout les dossiers apparaissent bien, y compris les tout derniers, ajoutés récemment. Je m'en remets alors à Google en espérant ne pas découvrir que je suis le seul à essayer de mettre plus de 16 384 titres dans ma playlist. La réponse m'apparaît au bout de quelques minutes : il existerait un paramètre max_playlist_length...

Je consulte donc /etc/mpd.conf et effectivement, un petit bloc tout en bas du fichier dénommé "Resource Limitations" contenant ce paramètre, avec comme valeur par défaut... 16384. Hop, passons-le immédiatement à 32768 (j'aime les nombres ronds).

Je relance mon MPD Playlist Updater et ô surprise : le nombre de fichiers présents dans la playlist est passé à plus 20 000 ! Ça alors...

Si jamais une des deux informations présentées ici peut être utile à quelqu'un (à savoir le petit script de filtrage et la limite de la taille de la playlist), you're welcome!