#1 Le 21/09/2009, à 10:24
- Guido
Transfert d'une liste de lecture exaile lecteur mp3 bas de gamme.
Bonjour,
Il y a quelques temps, j'ai acheté (pour presque rien) un lecteur .mp3 émetteur pour ma vieille voiture et son antique poste radio. J'avais d'abord été enthousiasmé par le fait qu'Exaile le reconnait immédiatement comme un lecteur mp3 et me propose une gestion avec une interface qui semble digne d'un matériel à pomme. Malheuresement il s'est avéré à l'usage que si Exaile est confortable, l'interface du lecteur est misérable et qu'il perd les listes ordonnées pour ne garder qu'un classement suivant les dossiers créés dans son arborescence (type /Artiste/Titre) et qui plus est il se perd s'il y a plus de 10 dossier (Artiste) et qu'il les lis par ordre alphabétique (bêtiquement quoi).
J'ai changé de stratégie et j'ai essayé la fonction fichier>exporter la liste de exaile.
On obtient un fichier avec une jolie icône de note de musique. Je l'ai ouvert avec 'éditeur de texte' et voici la forme :
#EXTM3U
#EXTINF:372,titre.mp3
/home/guido/Musique/Artiste inconnu/Album inconnu/titre.mp3
#EXTINF:315,chanson.mp3
/home/guido/Musique/Artiste inconnu/Album inconnu/chanson.mp3
#EXTINF:335,instrumental.mp3
/home/guido/Musique/Artiste inconnu/Album inconnu/instrumental.mp3
...
Il me fallait un truc pour copier les fichiers listés dans un dossier, en les renommant suivant un ordre qui serait alphabétique ou qui serait lu dans l'ordre. Le lecteur.mp3 se débrouillant avec les tags pour donner les titres et Aritiste sur son maigre affichage.
Après quelques tatonnements et pas mal d'aide de particiapnt au forum 'programmation', j'ai finalement trouvé un ligne de code unique qui fait correctement le travail. Je vous la donne avec ses limitations et des commentaires pour expliquer les différentes étapes (tel que je comprend).
Préparation :
Faites votre liste de lecture.
Exportez la sous le nom 'liste' dans le dossier où seront rangé les fichiers renommés.
ouvrez un terminal.
Dans le terminal, placez vous dans le dossier où vous avez mis 'liste'.
cd /home/chemin/vers/le/dossier
note : le plus simple est de taper cd puis de glisser le dossier dans la fenêtre du terminal, le chemin sera automatiquement généré sans faute de tape.
on exécute. (J'ai menti, il faut donc deux ligne de code )
L'opération :
exécutez ensuite la commande suivant (dans le même terminal)
grep -v ^'#EXT' 'liste' | sed "s/.*/'&'/g" | grep -n '.*' | sed 's/^[0-9]:/0&/' | awk 'BEGIN {FS=":"} {print $2" "$1".mp3"}' | xargs -n2 cp
vous obeindrez une serie de fichiers :
01.mp3
02.mp3
03.mp3
...
Il ne reste plus qu'à supprimer le fichier 'liste' (il ne sert plus à rien) et à copier le dossier dans le lecteur bas de gamme en passant par l'interface graphique (pas par exaile). Chaque dossier deviens une liste de lecture (au même titre que les dossier 'Artisite' et les fichiers sont lu dans l'ordre puisqu'il choisit l'ordre alpha bêtique.
Limitation :
On ne peut pas placer plus de 99 fichiers .mp3 (sinon les numéros 100, 101... seront lus avant le 20)
Je me suis limité aux .mp3 (c'était mon besoin)
Tous cela en précisant que je suis débutant en code, et pour vous dire de ne pas avoir peur d'essayer. Il y a plein de tuto et d'exemples, et vous trouverez ici toute l'aide nécessaire.
Pour aller plus loin :
Explications :
grep -v ^'#EXT' 'liste'
j'utilise grep pour selectionner toutes les lignes qui ne contiennent pas (option -v) '#EXT' dans le fichier 'liste'
sed "s/.*/'&'/g"
sed me permet de mettre les lignes trouvés par grep entre guillemet ('toute la ligne'). C'est nécessaire car j'ai des espace dans les chemin vers les fichiers .mp3.
grep -n '.*'
J'utilise grep pour renuméroter (-n) toutes les lignes (il trouve forcément '.*')
sed 's/^[0-9]:/0&/'
Je reformate les premiers numérot de ligne de '1', '2'... en '01', '02'... Sinon, mon lecteur va lire 10 avant 2, 20 avant 3...
si on s'arrête là on otient :
01:'/home/chemin vers/fichier1.mp3'
02:'/home/chemin/vers le/suivant.mp3'
etc
awk 'BEGIN {FS=":"} {print $2" "$1".mp3"}' | xargs -n2 cp
C'est la partie qui m'a le plus posé de problèmes. En fait, il m'a fallu poser une question sur le forum programmation, et j'ai obtenue de l'aide en moins d'une heure. MERCI.
awk me permet de 'lire' la mise en forme des précédentes commandes avec un séparateur ':' (FS=':') $2 prend '/home/chemin...' et $1 le numéro. xargs effectue la commande cp avec deux arguments (-n2) qui sont mis en forme par print $2" "$1".mp3"
et voilà.
Encore un peu :
Voici un script qui reprend la commande. Il faut copier cela dans un fichier vierge et l'exécuter. ici un tuto
#!/bin/bash
# Version 0.1
# Ce script sert à transformer une liste 'liste' de lecture exporté depuis eXaile.
# Il copie la liste des fichiers origine en les renommants suivant leur numéro d'ordre dans la liste de lecture dans le dossier courant.
# Le but est l'exportation sur un lecteur .mp3 bas de gamme 'mauvaise interface de navigation'
#
#Utilisation :
#Exporter à l'aide d'exaile la liste en la nommant 'liste'
#Placer le script dans le dossier où est 'liste'
#Exécuter le script
#Limitations :
#Seul les .mp3 sont prévus.
#Liste limité à 99 titres
#Guido
grep -v ^'#EXT' 'liste' | sed "s/.*/'&'/g" | grep -n '.*' | sed 's/^[0-9]:/0&/' | awk 'BEGIN {FS=":"} {print $2" "$1".mp3"}' | xargs -n2 cp
exit 0;
Il rend la manipulation encore plus simple puisque un simple double clic lance le script.
Dernière modification par Guido (Le 21/09/2009, à 10:25)
Hors ligne