Un petit article qui arrive, faut que j'arrive vraiment à écrire ce que je fais quand je rencontre un problème, c'est bien comme aide mémoire.
Voici l'intitulé du problème du jour :
J'ai un nabaztag, j'ai un serveur sur lequel je stocke mes mp3. But du jeu : distribuer en streaming mes mp3 sur le lapin. Solution trouvée : squeezeboxserver de logictech qui permet assez facilement de mettre en place un serveur de streaming qui peut être utilisé par le lapin. En plus, avec un téléphone sous Android, tu peux à la fois contrôler quand le lapin doit passer de la musique et ce qu'il doit diffuser depuis le squeezebox server. J'en parlerai si ça intéresse quelques personnes, laissez un commentaire pour me le dire !
Par contre, il subsiste un problème... si les mp3 sont encodés à plus de 96kbps, le son est haché... Donc, il faut trouver un moyen de faire de l'encodage en mode batch de tous les mp3.
3 choses à faire :
- encodage en 96kbps, la solution retenue est lame
- report des tags ID3
- automatisation de tout ça
et en vrac, ça donne :
conversion des mp3 en bitrate constant à 96kbps
Rien de bien particulier à dire dans ce cas là, juste qu'il est important que le bitrate soit constant pour ne pas dépasser les 96kbps qui posent problème au lapin.
lame --alt-preset cbr 96 <infile> <outfile>
L'inconvénient de la méthode est que lame ne reporte pas les tags ID3, et c'est quand même bien pratique de les avoir pour que la squeezebox puisse faire le rangement automatique. J'ai donc choisi d'utiliser un module perl qui sait extraire et réinjecter les tags dans des fichiers MP3. Le script est le suivant :
#!/usr/bin/perl
use strict; use warnings;
use MP3::Info;
my $infile = $ARGV[0];
my $destfile = $ARGV[1] ;
my $tags = get_mp3tag($infile);
set_mp3tag($destfile, $tags);
Et pour finir, on fait tout marcher en une seule ligne :
find . -name *.mp3 | grep -v ".AppleDouble" | while read file ; do destfile=96k/$(echo $file | tr " " "_") ; mkdir -p ${destfile%/*} ; lame --alt-preset cbr 96 "$file" $destfile; perl transfertid3tags.pl "$file" $destfile ; done
ici, le script perl ci dessus est appelé transfertid3tags.pl, il lit les tags du fichier donné dans le 1er argument et écrit dans le fichier donné en deuxième argument. Tout est copié dans un répertoire 96k. Pour s'affranchir des problèmes dû aux espaces dans les noms de fichiers, quand je fais la copie, je les remplace par des "_".
Après, il n'y a qu'à laisser la machine travailler pour vous.
