Journal Créer ses listes de lecture audio

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
Étiquettes :
10
25
déc.
2023

Sommaire

'lut les moules,

Le contexte

Maintenant que noël est (presque) passé, il va falloir commencer à penser au réveillon du jour de l'an et à préparer ses listes de lecture pour faire la fête, à vous la danse des canard et autres chenille pour danser jusqu'au bout de la nuit sans se prendre la tête à improviser sur le moment une recherche de pistes dans votre bibliothèque audio.

Comme vous avez tagué proprement vos fichiers audio à partir de mon précédent journal, il vous sera facile de créer vos listes de lecture.

Mais tout d'abord abordons le format des listes de lecture.

Les formats des listes de lecture

Le M3U (MPEG version 3.0 URL) est certainement le format le plus courant qui a été créé à l'origine par le logiciel WinPlay3 édité par la société allemande Fraunhofer accessoirement créateur du MP3 et s'est imposé comme standard de fait. Il contient une liste de fichiers multimédia simplement repérés par leur adresse (URL). C'est un bête fichier avec une adresse par ligne avec l’extension .m3u si le texte est encodé avec un encodage non unicode ou avec l’extension .m3u8 si le texte est encodé en UTF-8. Cette dernière extension n'a plus vraiment de sens aujourd'hui, mon système Mageia est par défaut en encodage UTF-8 et les fichiers m3u que je génère sont encodés en UTF-8 sans nécessairement avoir l'extension m3u8.
Mais revenons aux adresses qui peuvent avoir le format suivant:

  • Chemin absolu vers le fichier
  • Chemin relatif vers le fichier par rapport au fichier M3U
  • URL d'un fichier distant

Le M3U étendu (Extended M3U) contient des champs supplémentaires identifiés en début de ligne par un "#" et se terminant avec un ":" s'il y a du texte qui suit. Sans être exhaustif, on retrouve par exemple :

  • #EXTM3U - placé en en-tête de fichier indiquant qu'on utilise le format Extended M3U
  • #EXTINF : informations sur la piste
  • #PLAYLIST : Le titre de la playlist

Voilà un exemple de fichier au format M3U étendu

#EXTM3U
#EXTINF:227,Roé - Soledad>
/ultra/data/musiques/classement par genre/pop/Roe - soledad.mp3
#EXTINF:141,Al Martino - Volare
/ultra/data/musiques/classement par genre/pop/Al Martino - Volare.mp3
#EXTINF:218,Nek - Laura non c'e
/ultra/data/musiques/classement par genre/pop/Nek and Cerena - Laura non ce.mp3
#EXTINF:219,Gilberto Gil - Toda menina baiana
/ultra/data/musiques/classement par genre/pop/Gilberto Gil - Toda Menina Baiana.mp3
#EXTINF:248,Umberto Tozzi - tu
/ultra/data/musiques/classement par genre/pop/Umberto Tozzi - tu.mp3

Le chiffre devant le nom de la piste est la durée de la piste en seconde. On trouvera ici davantage de détail sur ce format.

Autre format le XSPF c'est une alternative libre à M3U ou d'autres formats propriétaires de liste qu'on n'abordera pas ici comme PLS pour iTunes ou ASX pour Windows Media. Il fonctionne également sur le principe d'une liste d'adresse mais au format XML et supporte l'unicode. Cela donne quelque chose comme cela:

<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
  <trackList>
    <track>
      <location>/ultra/data/musiques/classement par genre/pop/Roe - soledad.mp3</location>
      <title>Soledad</title>
      <creator>Roé</creator>
      <album>Roé</album>
      <duration>227000</duration>
      <trackNum>1</trackNum>
      <image>(embedded)</image>
    </track>
    <track>
      <location>/ultra/data/musiques/classement par genre/pop/Al Martino - Volare.mp3</location>
      <title>Volare</title>
      <creator>Al Martino</creator>
      <album>Best of Al Martino</album>
      <duration>141000</duration>
      <trackNum>1</trackNum>
      <image>(embedded)</image>
    </track>
<track>
      <location>/ultra/data/musiques/classement par genre/pop/Umberto Tozzi - tu.mp3</location>
      <title>tu</title>
      <creator>Umberto Tozzi</creator>
      <album>Tu</album>
      <duration>248000</duration>
      <trackNum>1</trackNum>
      <image>(embedded)</image>
    </track>
  </trackList>
</playlist>

Créer ses listes de lecture automatiquement

Maintenant pour créer automatiquement ses listes de lecture, en partant du principe que les fichiers audio ont été correctement tagués ID3 on pourra le faire automatiquement par script bash. En première approche on peut toujours créer des simples listes de lecture qui ne tiendront pas compte des tags ID3 en se contentant de parcourir un répertoire et sous répertoires et de mettre tous les fichiers audio dans un fichier playlist.m3u

#!/bin/bash
read -p "Chemin absolu ou relatif (par défaut relatif) " chemin
if [ "$chemin" = "absolu" ]
then
    path=$(pwd)
else
    path="."
fi
playlist="playlist.m3u"
rm -f $playlist
IFS=$'\n'
for fichier in $(find $path type f | grep '/*.ogg\|/*.mp3\|/*.flac')
do
      echo "Fichier trouvé $fichier"
      echo $fichier>>$playlist
done;
unset IFS

Ce script a la particularité de laisser le choix entre mettre un chemin absolu ou relatif dans la liste de lecture, le chemin relatif sera intéressant si vous importez votre bibliothèque audio sur un téléphone mobile. Il faudra faire en sorte d'avoir une arborescence relative identique et le fichier de liste de lecture placé au même endroit pour qu'il puisse retrouver les fichiers audio sans se soucier de leur chemin absolu.

Maintenant si on veut exploiter les métadonnées ID3, on pourra utiliser la commande ffprobe qui vient avec la suite ffmpeg et qui permet de lire les métadonnées. Le script ci-dessous va créer automatiquement une liste de lecture en filtrant sur le genre musical, toujours en demandant si l'on souhaite un chemin absolu ou relatif

#!/bin/bash
read -p "Genre musical : " genre
read -p "Chemin absolu ou relatif (par défaut relatif) " chemin
if [ "$chemin" = "absolu" ]
then
    path=$(pwd)
else
    path="."
fi
playlist="playlist-$genre.m3u"
rm -f $playlist
IFS=$'\n'
for fichier in $(find $path type f | grep '/*.ogg\|/*.mp3\|/*.flac')
do
   if ffprobe -loglevel quiet -hide_banner -show_entries format_tags=genre -of default=noprint_wrappers=1:nokey=1 $fichier 2>&1 | grep -i $genre ; then
      echo "Fichier trouvé $fichier"
      echo $fichier>>$playlist
   fi
done;
unset IFS

Pour convertir vos listes de lecture .m3u en M3U étendu ou .xspf qui peuvent être plus portables sur d'autres supports, on pourra simplement utiliser vlc, on charge la liste de lecture au format M3U puis à partir du menu Média->Enregistrer la liste de lecture… on choisira le format de sortie à partir de la liste déroulante.

Titre de l'image

Créer ses listes de lecture manuellement

Pour créer ses listes de lecture manuellement et simplement, on pourra utiliser une application. Personnellement j'utilise clementine qui intègre une gestion des listes de lecture intelligente multi critères basés sur les métadonnées ID3.

Titre de l'image

Titre de l'image

On aura le choix ensuite de sauvegarder sa liste de lecture dans différents formats M3U, XSPF, PLS et ASX comme déjà évoqués ici mais également CUE et WPL.

Je rappelle que même si la page d'accueil de clementine peut laisser penser que le projet est mort, son développement est très actif comme on peut le voir sur sa page github.

Quel que soit le format, clementine va sauvegarder les chemins en absolu, pour les convertir en relatif pour la raison évoquée plus haut, on pourra utiliser ce petit script

#!/bin/bash
read -p "Entrez le nom du fichier : " fichier
read -p "Entrez la chaine à remplacer : " chaine1
read -p "Entrez la chaine de remplacement : " chaine2
echo "Traitement de $fichier ..."
fichiertemp=$(basename "$fichier" | cut -d. -f1)
extension="${fichier##*.}"
sed "s|$chaine1|$chaine2|g" $fichier  > "$fichiertemp-relatif.$extension"

Pour aller plus loin

Je n'ai pas évoqué dans ce journal les lecteurs audio capables de lire les listes de lecture car il y en a une pléthore sur tous les systèmes linux, windows comme android.

Je n'ai pas évoqué également la possibilité de pouvoir écouter des podcasts dans une liste de lecture identifiés par leur URL notamment ceux de radiofrance car à vrai dire j'ai quelque peu buté sur le sujet et j'espère bien que dans les commentaires je trouverais quelques pistes pour y parvenir.

  • # La file d'attente pour gérer sur le moment

    Posté par  . Évalué à 6. Dernière modification le 25 décembre 2023 à 13:50.

    En soirée, j'aime bien utiliser la file d'attente du lecteur de musique pour modeler l'ambiance musicale au feeling. Découvert sur Winamp, ses clones libres ont probablement la fonctionnalité aussi. Perso j'utilise Clementine (oui, moi aussi !).

    On peut programmer la piste qui va jouer juste après, et ensuite après celle là, et ainsi de suite. On peut en programmer plusieurs d'un coup et être tranquille pour quelque temps avant de devoir y revenir. Il est toujours possible d'éditer ensuite la file d'attente avec la fenêtre dédiée. Et si aucun titre n'est programmé, alors l'aléatoire fera le reste.

    Ma liste est éclectique et qui contiennent des titres que certaines personnes aiment, d'autres moins, c'est un peu le bazar aussi, donc pouvoir choisir ce qui va passer après en fonction de l'humeur et des gens présents, c'est pas mal, avec une "dégradation" vers de l'aléatoire simple si j'ai autre chose à faire juste maintenant.

    Cette fonctionnalité de file d'attente manque à trop de lecteurs de musiques, parfois la confonde avec la liste de lecture elle-même et c'est dommage. Mention spéciale aux lecteurs de musique qui confondent "aléatoire" et "mélanger la liste". Ne touchez pas à ma liste, je veux pouvoir naviguer et m'y retrouver dans ma liste par ailleurs. Mention encore plus spéciale quand ce mélange de liste n'est pas accompagné d'une fonction pour filtrer la liste pour faire une petite recherche. C'est souvent le cas des logiciels qui veulent gérer votre médiathèque : on peut rechercher dans la médiathèque, mais pas dans la liste ! Or, je ne veux pas ajouter un titre dans la liste qui y est déjà, je veux juste y accéder pour le programmer ou le lire.

    Le niveau suivant serait de pouvoir indiquer au lecteur en mode aléatoire "ne passe pas cette piste quand X est là", ou "n'hésite pas à passer ce titre quand Y est là", ou encore "en mode calme, ce titre marche bien" ou "en mode calme, ce titre ne passe pas", et donc pouvoir dire au lecteur "X est actuellement là, Y non, on est en mode calme".

    Un jour peut-être si j'ai le temps… sinon volez mon idée.

    J'aimerais aussi pouvoir contrôler la liste d'attente de Clémentine à partir d'un PinePhone, à défaut de jouer la musique depuis le PinePhone lui-même d'ailleurs. On peut lancer Clementine sur le PinePhone mais son interface est inutilisable sur écran de téléphone.

  • # Alternative...

    Posté par  (Mastodon) . Évalué à 3.

    Télécharger des mix tout faits.

    Vu que mes goûts personnels et fichiers locaux sont assez éloignés de la plèbe et que je ne veux pas fâcher madame et monsieurs Michus, au choix je:

    • laisse ma partenaire choisir

    • télécharge des playlists avec un nom que tu sais que ça va plaire au plus grand nombre genre: "reggaeton mix 2023" "best reggaeton mix" "clasicos reggaeton" "best hits 2023"

    • et si ça râle je laisse madame (pas monsieur) Michu utiliser son spotify perso.

    Et mes playlists, je les garde pour moi.

    En 2023 je fais à l'envers, c'était musique et fête jusqu'au bout de la nuit à Noël avec couple d'amis et une dizaine d'autres inconnus, et c'est nouvel an qu'on passe en famille, peinard avec des parents introvertis. Du coup ça va simplifier la playlist, il n'y en aura peut-être même pas.

    • [^] # Re: Alternative...

      Posté par  (Mastodon) . Évalué à 4.

      peinard avec des parents introvertis

      En musique d'ambiance "tout venant" on trouve sur Spotify par exemple des playlist de cover jazzy de tubes commerciaux. Ça passe pas mal, régulièrement quelqu'un va tendre l'oreille et dire "Ah mais c'est Take On Me !".

      Et sans transition en fin de soirée un petit Rage Against the Machine et tu fous tout le monde dehors :)

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: Alternative...

        Posté par  . Évalué à 1.

        Tu peux aussi gagner du temps en faisant une playlist de cover metal ;)

        régulièrement quelqu'un va tendre l'oreille et dire "Ah mais c'est Take On Me !".

      • [^] # Re: Alternative...

        Posté par  . Évalué à 2.

        Pour mettre tout le monde dehors il ne vaut pas mieux un petit combo Death-Indus puis Sardoucore ? Normalement avec ça tu couvres toutes les bases !

        LinuxFr, parfois c'est bien de la MERDE : https://linuxfr.org/users/c2462250/journaux/ecriture-inclusive-feministes-et-wikipedia#comment-1793140

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.