# Générateur de liste de lecture amélioré 2023-06-19T20:41:49Z L'utlisation d'une liste de lecture me permet d'accéder à toutes mes musiques de n'importe où du moment que j'ai un accès à internet. Chaque ligne contient une URL vers le morceau disponible. Par exemple : ``` https://user:password@si3t.ch/musique/lalala.mp3 https://user:password@si3t.ch/musique/yohoho.mp3 ``` Ce format est supporté par à peu près tous les lecteurs. Pas de latence quand je change de morceau (comme avec mpd), pas de réencodage donc j'ai la même qualité qu'à la maison. J'aime bien :) Puisque l'utilisation d'une liste de lecture me convient bien, j'ai repris mon générateur pour ajouter quelques éléments et obtenir une liste étendue. L'affichage est plus sympa dans un lecteur, on a d'affiché le titre du morceau et l'artiste plutôt que l'URL. Pour cela, j'ai fait appel à `ffprobe`, qui vient avec `ffmpeg` disponible à peu près partout. J'en ai profité pour ajouter une option afin d'insérer au début des chemins une adresse http. Ça pourraît donner : ``` m3ugen.sh -u https://user:password@si3t.ch/musique/ ``` Voici à quoi ressemble le script, si vous souhaitez vous en servir et l'améliorer: ``` #!/bin/sh # generate a m3u playlist of all files in current directory # poor urlescape, most are useless. urlescape() { sed ' s/%/%25/g; s/[[:space:]]/%20/g; s//%3E/g; s/\#/%23/g; s/{/%7B/g; s/}/%7D/g; s/|/%7C/g; s/\\/%5C/g; s/\^/%5E/g; s/~/%7E/g; s/\[/%5B/g; s/\]/%5D/g; s/`/%60/g; s/;/%3B/g; s/?/%3F/g; s/:/%3A/g; s/@/%40/g; s/:/%3D/g; s/&/%26/g; s/\$/%24/g; ' } usage() { printf "usage:\n\t" printf "%s (-h) (-u )\n" "$0" printf "\t-h : print help\n" printf "\t-u : prepend to path for streaming\n" printf "\t\t i.e. -u "http://example.com/audio/"\n" exit } while getopts 'hu:' c do case $c in h) usage ;; u) url="${OPTARG}" ;; esac done printf "#EXTM3U\n\n" find . -type f \ -name '*.flac' -o \ -name '*.FLAC' -o \ -name '*.mp3' -o \ -name '*.MP3' -o \ -name '*.m4a' -o \ -name '*.M4A' -o \ -name '*.ogg' -o \ -name '*.OGG' -o \ -name '*.opus' -o \ -name '*.OPUS' -o \ -name '*.webm' -o \ -name '*.WEBM' | \ sed 's/^\.\///' |\ while read -r line; do duration="$(ffprobe -v 0 -show_entries stream=duration "${line}" |\ awk -F '=' '/duration=/ {sub("\\..*", "", $2); printf $2; exit}')" title="$(ffprobe -v 0 -show_entries 'format_tags=title' "${line}" |\ awk -F '=' '/title=/ {print $2}')" artist="$(ffprobe -v 0 -show_entries 'format_tags=artist' "${line}" |\ awk -F '=' '/artist=/ {print $2}')" test -z "${title}" && title="$(basename "${line}")" printf "#EXTINF:${duration}, %s - %s\n" "${artist}" "${title}" path="$(printf "%s" "${line}" | urlescape)" printf "${url}%s\n\n" "${path}" done ``` --- Une réaction? Envoyez votre commentaire par mail (anonyme): mailto:bla@bla.si3t.ch?subject=generateur-de-liste-de-lecture-ameliore Voici quelques instructions pour utiliser la liste de diffusion et recevoir les réponses à vos messages: https://si3t.ch/log/_commentaires_.txt