…esto no es un subtítulo…
2014-12-29
Llega otra entrega de *nix en casos prácticos, la serie de artículos sobre usos y técnicas de sistemas *nix en general y de la potente línea de órdenes en particular. Hoy vamos a ver una manera de copiar un disco de música a un ordenador.
Si el reloj no falla, este artículo está escrito a punto de acabar el año 2014. La práctica ancestral de comprar discos físicos de música es apenas un vestigio de lo que fue. Más raro todavía es que uno de los escasos compradores de discos compactos se dedique a organizar su biblioteca de música con herramientas de línea de órdenes para sistemas de tipo *nix (¿quién sabe si GNU/Linux o FreeBSD?). Alguna rara avis podría haber en el mundo que encuentre la técnica descrita en este artículo interesante.
Digamos que tenemos un disco compacto de música cuyo contenido queremos pasar a un ordenador. Podríamos hacerlo de muchas maneras distintas, pero tenemos un viejo ritual que nos agrada practicar de vez en cuando.
cdparanoia -B
flac --best *.wav
Ya tenemos todos nuestros ficheros de audio con compresión sin pérdida. Ahora queremos añadir metadatos: el grupo, el nombre del disco… Hay bases de datos en Internet con información sobre muchísimos discos y no estaría de más usarlas. Ahora bien, estamos practicando un ritual lleno de cariño y esmero; tenemos que poner un poquito de esfuerzo por nuestra parte para disfrutar más del producto final. Lo que haremos será rellenar los datos a mano en unos ficheritos de texto y luego programaremos la máquina para que use esos datos para anotar bien la música. Digamoso que nuestro disco es del grupo Grupo de rock, que por supuesto hace música rock. El disco se llama Todavía comprando cedés, es del año 2014 y tiene dos canciones: Primera canción y Última canción. Rellenaremos los siguientes ficheros con estos datos:
Todavía comprando cedés
Grupo de rock
rock
2014
Primera canción
Última% canción
Ahora usaremos esta información con un pequeño script. En
primer lugar, cargamos la información fija:
ALBUM=`cat album`
ARTIST=`cat artist`
GENRE=`cat genre`
TRACKTOTAL=`awk 'END{print NR}' < titles`
YEAR=`cat year`
La única parte que no es trivial es la asignación del valor
de TRACKTOTAL, que es el número de pistas que tiene el
disco; lo hacemos con esa sencilla instrucción de awk
porque es probablemente la forma más sencilla de hacerlo sin importar
si hay o no un carácter de fin de línea tras el título de la última
canción. Después, iteramos sobre los títulos de canción:
awk 'nl -w2 -nrz titles | while read TRACKNUMBER TITLE; do
Esto empieza un bucle sobre las líneas del
fichero titles. La invocación de nl sirve para
volcar el contenido de titles con el número de línea (el
número de canción) antepuesto; la opción -w2
sirve para
fijar el número de caracteres del número de línea a 2
y -nrz
sirve para que estos números aparezcan con ceros
iniciales, igual que como aparecen en lo que
generó cdparanoia. La orden read TRACKNUMBER
TITLE
asigna la primera palabra de cada línea de la salida
de nl (el número de canción) a la
variable TRACKNUMBER y el resto (el título de la canción)
a la variable TITLE. Dentro del bucle, hacemos las
siguientes operaciones:
NAME="${TRACKNUMBER}_-_${TITLE}.flac"
mv "track${TRACKNUMBER}.cdda.flac" "$NAME"
metaflac --set-tag="TITLE=$TITLE" "$NAME"
metaflac --set-tag="ARTIST=$ARTIST" "$NAME"
metaflac --set-tag="TRACKNUMBER=$TRACKNUMBER" "$NAME"
metaflac --set-tag="TRACKTOTAL=$TRACKTOTAL" "$NAME"
metaflac --set-tag="ALBUM=$ALBUM" "$NAME"
metaflac --set-tag="DATE=$YEAR" "$NAME"
metaflac --set-tag="GENRE=$GENRE" "$NAME"
Finalmente, terminamos el bucle:
done
Esto queda todo junto en un script así:
#!/bin/sh
ALBUM=`cat album`
ARTIST=`cat artist`
GENRE=`cat genre`
TRACKTOTAL=`awk 'END{print NR}' < titles`
YEAR=`cat year`
awk 'nl -w2 -nrz titles | while
read TRACKNUMBER TITLE; do
NAME="${TRACKNUMBER}_-_${TITLE}.flac"
mv "track${TRACKNUMBER}.cdda.flac" "$NAME"
metaflac --set-tag="TITLE=$TITLE" "$NAME"
metaflac --set-tag="ARTIST=$ARTIST" "$NAME"
metaflac --set-tag="TRACKNUMBER=$TRACKNUMBER" "$NAME"
metaflac --set-tag="TRACKTOTAL=$TRACKTOTAL" "$NAME"
metaflac --set-tag="ALBUM=$ALBUM" "$NAME"
metaflac --set-tag="DATE=$YEAR" "$NAME"
metaflac --set-tag="GENRE=$GENRE" "$NAME"
done
Categorías: Informática
Permalink: https://sgcg.es/articulos/2014/12/29/unix-en-casos-practicos-organizar-musica-con-amor-y-esmero-1/