Linux et tux dessinés dans une console

playlist aléatoire en ligne de commande

Vu le blog que je tiens, si je dis que j’ai beaucoup de musique sur mon disque dur, ce n’est pas quelque chose de très surprenant.
Que ce soit avec ma collection complète sur l’ordi, ou une partie copié sur mon ordiphone (j’aime bien ce mot qui représente bien comment j’use de ces appareils), j’utilise le plus souvent le mode lecture aléatoire.
Le problème est que cet aléatoire rejoue trop souvent les même morceaux. Deux explications. Déjà c’est par définition un pseudo-aléatoire qui existe en informatique. Et al semblerait que les algorithmes tiennent compte des pistes déjà écoutées.

Avec mes connaissances de débutanx en informatique, et une envie de geeker, tentons un petit script en ligne de commande pour cela.
Et comme j’aime la péda, la démarche expérimentale et de projet, tentons de formaliser le processus.

Script idéal voulu

C’est ce que l’on appel un cahier des charges :

  • écrire tous les morceaux de musique dans un fichier
  • chercher de façon aléatoire 100 morceaux et les mettre dans un fichier playlist
  • ouvrir cette playlist

Lister la musique du répertoire

Toutes les commandes se font évidement dans un terminal ou console.

avec les commandes

  • cd ./Musique
    je me place dans mon fichier Musique*
  • ls -R
    j’affiche la liste du répertoire de façon récurrente donc avec les sous-dossiers et leur fichiers
  • ls -R > MaZic.txt
    Idem et l’écrit dans un ficher. S’il n’existe pas ça le crée, sinon ça efface et remplace

Cela fait pour moi plusieurs dizaines de milliers lignes ! Dont celle pour les dossiers, les fichiers zip, images des pochettes, des lignes vides…
Un tri sera nécessaire à faire. On verra plus tard.

Tirage au sort de la play list

  • Une recherche rapide sur internet me propose d’utiliser la ligne de code suivante : shuf -n N input > output
  • Ce qui donne ici  shuf -n 10 MaZic.txt > selectionaleatoire.txt
  • Mais comme une play liste est au format m3u faisons plutôt shuf -n 10 MaZic.txt > selectionaleatoire.m3u
  • Ouvrons cette playlist. Ca ne marche pas !
  • En effet la liste généré est constitué uniquement du titre de la piste. Il manque toute une partie de l’adresse relative de la piste entre ~/Musique et /nomdelapiste.mp3
  • Recherche internet.
  • Essayons avec la commande find. Cela donne :
    find > MaZic2.txt
    shuf -n 10 MaZic2.txt > selectionaleatoire.m3u
  • et là on a une liste musicale qui fonctionne. Sauf quand elle essaie de lire les pdf, images et autres fichier non-musicaux.

Tirage amélioré

  • find –help + quelques recherches pour retrouver comment utiliser l’opérateur logique ou
  • Regarder dans MaZic.txt les formats musicaux présent.
  • Ca donne la longue commande
    find . -type f \( -name « *.mp3 » -o -name « *.MP3 » -o -name « *.ogg » -o -name « *.wav » -o -name « *.flac » -o -name « *.wma » -o -name « *.mp4 » -o -name « *.m4a » \) > MaZic2.txt
  • Cela supprimer environs dix milles lignes dans le fichier correspondant aux images, fichier info, zip, vidéo musicale, Thumbs.db, lignes vides…

Lancer la liste musicale en ligne de commande

  • En faisant quelques essaie avec rhytmhbox, je ne trouve  pas, pas grave.
  • Avec VLC ça marche en faisant vlc selectionaleatoire.m3u

Résumé

Faire successivement les 3 commandes.

  • find . -type f \( -name « *.mp3 » -o -name « *.MP3 » -o -name « *.ogg » -o -name « *.wav » -o -name « *.flac » -o -name « *.wma » -o -name « *.mp4 » -o -name « *.m4a » \) > TouteMaMusique.txt
  • shuf -n 20 TouteMaMusique.txt > 20ChansonAleatoire.m3u
  • vlc 20ChansonAleatoire.m3u

Une fois le fichier texte contenant toutes les pistes du répertoire créé, tant qu’il n’y a pas d’ajout, retrait, modification, pas besoin de refaire la première ligne.

Le transformer en script

Et donc avoir moins à écrire. C’est bien l’objectif !
Il suffit de suivre le tuto de l’ex site du zéro. On obtient

fairemaliste.sh
find . -type f \( -name « *.mp3 » -o -name « *.MP3 » -o -name « *.ogg » -o -name « *.wav » -o -name « *.flac » -o -name « *.wma » -o -name « *.mp4 » -o -name « *.m4a » \) > TouteMaMusique.txt
shuf -n 20 TouteMaMusique.txt > 20ChansonAleatoire.m3u
vlc 20ChansonAleatoire.m3u

Mais pourquoi 20 chansons ? On peut avoir envie de changer à chaque fois.

Cela donne avec un paramètre d’entrée

fairemaliste2.sh
find . -type f \( -name « *.mp3 » -o -name « *.MP3 » -o -name « *.ogg » -o -name « *.wav » -o -name « *.flac » -o -name « *.wma » -o -name « *.mp4 » -o -name « *.m4a » \) > TouteMaMusique.txt
shuf -n $1 TouteMaMusique.txt > PlusieursChansonAleatoire.m3u
vlc PlusieursChansonAleatoire.m3u

Ne pas oublier de donner les droits exécution : chmod +x nomdufichier

Et ça se lance en étant dans le fichier ~/Musique en écrivant ./fairemaliste2.sh 20

Script fini

fairemaliste2.sh
#script de Gabriel-le ; le 14/12/2020
#nécessite un nombre comme paramètre d’entrée pour déterminer le nombre de chanson à écouter
# fait la liste de tous les morceaux de musique de ~/Musique
cd ~/Musique
find . -type f \( -name « *.mp3 » -o -name « *.MP3 » -o -name « *.ogg » -o -name « *.wav » -o -name « *.flac » -o -name « *.wma » -o -name « *.mp4 » -o -name « *.m4a » \) > TouteMaMusique.txt
# création d’une liste musicale aléatoire
shuf -n $1 TouteMaMusique.txt > PlusieursChansonAleatoire.m3u
#ouverture de la liste dans vlc
vlc PlusieursChansonAleatoire.m3u

ressources utilisées

Image issue de wikipédia

Terminal start linux on darkmoon

Author: melomane-en-revolte

1 thought on “playlist aléatoire en ligne de commande

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.