# Diffuser de la musique vraiment facilement
2023-06-18T14:42:39Z

Je suis depuis pu l'heureux possesseur d'écouteurs à conduction
osseuse.
Cela me faisait envie depuis un moment déjà, et après avoir
testé, j'apprécie énormément écouter des podcasts en courant
sans m'isoler des bruits alentours.

J'ai alors souhaité accéder à ma musique de partout à partir du
moment où j'ai un accès à internet.
Me voilà alors en train de bricoler mpd (https://www.musicpd.org/)
avec son serveur http intégré.
Ça fonctionne, mais pour bien faire il faudrait un mot de passe. Le
client est séparé du lecteur. Je bricole alors un VPN, mais c'est
des couches sur des couches, ça m'agace, c'est compliqué pour
finalement peu de choses.

Je vous passe les tests de trucs à base de docker ou node.js.
Franchement les gens, il faut arrêter avec ça!

Je découvre alors un script PHP qui génère des playlists
(https://github.com/lrkrol/Noctifer-Music). Pas mal du tout, mais ça
ne fonctionne pas exactement comme je veux.

Vous le sentez venir non? Voici le script de la mort qui tue qui va
répondre à mon problème : m3ugen.sh

L'idée est la suivante :

- Hébergement de mes musiques sur mon serveur web http.
- "Protection" de l'espace où les musiques sont stockées par mot de
 passe (htpasswd)
- Génération d'un fichier m3u qui contient la liste de toutes les
 chansons.
- Ouverture du fichier m3u avec VLC, et hop !

Voici le script en question :

```
#!/bin/sh
# generate a m3u playlist of all files in directory $1

usage()
{
       printf "%s <directory> > file.m3u\n", $0
       exit 1
}
#https://rosettacode.org/wiki/URL_encoding#AWK
urlencode()
{
       awk '
       BEGIN {
               for (i = 0; i <= 255; i++)
                       ord[sprintf("%c", i)] = i
       }

       # Encode string with application/x-www-form-urlencoded escapes.
       function escape(str, c, len, res) {
               len = length(str)
               res = ""
               for (i = 1; i <= len; i++) {
                       c = substr(str, i, 1);
                       if (c ~ /[-._*0-9A-Za-z]/)
                               res = res c
                       else if (c == " ")
                               res = res "+"
                       else
                               res = res "%" sprintf("%02X", ord[c])
               }
               return res
       }

       # Escape every line of input.
       { print escape($0) }
       '
}

test -d "$1" || usage

find "$1" -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' |\
       cut -c 3- |\
       urlencode
```

Reste à créer des fichiers m3u pour chaque dossier. Pour l'instant,
je laisse en aléatoire, et ça me va :)

Petit détail, j'ai légèrement modifié ce script pour intégrer
les identifiants puisque je protège l'accès au dossier contenant les
musiques par mot de passe, histoire de ne pas être accusé de
diffuser du contenu illégalement. J'ai donc ajouté à la fin:

```
cut -c 3- |\
urlencode |\
xargs printf "https://user:[email protected]/dossier-inexistant-de-musique/%s\n"
```

---
Une réaction?

Envoyez votre commentaire par mail (anonyme):

       mailto:[email protected]?subject=Diffuser-de-la-musique-vraiment-facilement

Voici quelques instructions pour utiliser la liste de diffusion et
recevoir les réponses à vos messages:

       https://si3t.ch/log/_commentaires_.txt