viernes, 28 de mayo de 2010

Generando listas de reproducción M3U

El formato de archivo M3U surgió como una forma fácil de guardar listas de reproducción de archivos MP3 en el famoso reproductor de audio Winamp. Realmente se trata de un fichero de texto donde se indican la ubicación y el nombre de los distintos archivos multimedia que forman parte de la lista de reproducción. Posteriormente se extendió el formato (Extended M3U) con líneas de comentario que indican la duración en segundos de cada canción, así como su título (y opcionalmente, su autor). Por el camino se propagó su uso a distintos reproductores y sistemas operativos, convirtiendose en un estándar de facto. Además de rutas relativas o absolutas a archivos de audio locales también puede usar el estándar URL para referenciar archivos o streams de audio remotos.

Aunque pueden crearse estas listas M3U desde muchos de los reproductores multimedia disponibles (o desde otras utilidades como EasyTAG), en ocasiones puede ser más útil e inmediato invocar a un programa de línea de comandos que genere la lista a partir de un conjunto de archivos especificados mediante un sencillo *.mp3. Como, dejando a un lado herramientas como FAPG --más apropiadas para generar listas de reproducción a partir de extensas colecciones de carpetas llenas de archivos musicales-- no parecía haber nada sencillo que encajara completamente con mi uso habitual, me dispuse a programar un shell script.

Su función es generar una lista de reproducción (según la sintaxis de M3U, claro) que incluya referencias a los archivos MP3 y/o Vorbis pasados como parámetros. Por defecto escribe los datos a pantalla (la salida estándar), por lo que para guardar la lista deberemos usar el redireccionamiento de salida (>) indicando el nombre del archivo con extensión .m3u a crear. Así podemos previsualizar en pantalla la lista antes de guardarla y el script se mantiene simple y efectivo. Lo ideal para que la lista generada funcione en cualquier sistema operativo será invocarlo desde el directorio donde estén las canciones (usando comodines que abrevien el asunto) para que no se incluyan rutas en las referencias a estas. Obviamente, el archivo M3U deberá situarse en la misma ubicación para funcionar correctamente. Otra restricción para hacerlo compatible con Windows y sus reproductores (sobre todo con WMP ;) es codificar el texto usando el estándar Latin-1 (de ello se encarga la herramienta iconv) en lugar del más moderno UTF-8. Esto hará que en pantalla las eñes y vocales acentuadas se vean sustituidas por un símbolo de interrogación, ya que las consolas modernas de Linux usan UTF-8, pero el archivo generado será más estándar. Si quisieramos ceñirnos a UTF-8 y los reproductores que lo soportan, podríamos quitar del script la llamada a iconv y usar en el archivo de salida la extensión .m3u8 para "hacerlo oficial" ;-)

Aquí puede descargarse el script, llamado m3u a falta de un nombre mejor. Sólo comentar que la extracción de información de los archivos MP3 y OGG la manejo con las utilidades eyeD3 (la mejor para manejar metadatos de MP3) y ogginfo (que forma parte de las vorbis-tools). Espero que sea de alguna utilidad a alguien. Cualquier corrección y/o sugerencia será bienvenida ;-)

miércoles, 19 de mayo de 2010

Uniendo archivos desde Nautilus

En el último post presentaba na-split, una extensión para Nautilus que permite partir archivos grandes en trozos de 100 MB (por ejemplo para poder compartirlos usando RapidShare). Unos días después le toca el turno a na-join, la extensión que permite unir de nuevo esos trozos (o los generados con otros programas como los que comentaba en este post anterior).

Para entender cómo crear nuestras propias acciones de Nautilus remito al citado post sobre na-split. De na-join, simplemente comentar que la opción Unir del menú contextual estará disponible sólo para archivos con una extensión numérica como .01 o .000 (o dicho de otro modo, sólo para el primer trozo empezando a contar desde cero o uno y con uno o dos ceros a la izquierda). Se comprobará si hay más trozos para poder unirlos y también si ya existe el archivo de destino. El trabajo sucio de ensamblaje de los trozos lo hace el comando estándar cat, experto en concatenar archivos, tanto de texto como binarios. Espero que este sucedáneo sea de utilidad ;-)

viernes, 14 de mayo de 2010

Dividiendo archivos desde Nautilus

En el último post hablaba del gestor de archivos Nautilus; de sus principales características y de cómo extender su funcionalidad usando nautilus-actions, un paquete disponible para Ubuntu. Para ilustrar este último asunto explicaba los pasos necesarios para añadir una opción al menú contextual que permita al usuario abrir una consola de comandos en el directorio elegido. A pesar de la sencillez del ejemplo (sin menospreciar su utilidad, simplemente invocaba a gnome-terminal con los argumentos adecuados) quedaba de manifiesto el potencial de estas acciones de Nautilus.

Hoy voy a intentar ampliar mi introducción presentando una nueva extensión que he programado recientemente. Se trata de añadir al menú contextual una opción que permita trocear cualquier archivo grande. En un post anterior repasaba varias utilidades que podemos usar tanto en Windows como en Linux para estos menesteres, pero ahora buscaremos la forma de hacerlo sin salir de Nautilus.

El procedimiento es el mismo que el visto en el anterior post sobre las Acciones de Nautilus: crear una nueva acción llamada Dividir y editarla para definir el nombre y descripción de la opción de menú asociada, así como el programa se debe ejecutar al elegirla y con qué parámetros. El programa que realizará el trabajo es split, utilidad estándar de GNU/Linux que permite trocear archivos desde la consola, pero como los argumentos a pasarle son algo retorcidos y además nos interesa comprobar ciertos asuntos antes de invocarlo, la solución pasará por programar un sencillo shell script que haga de "envoltorio", al que llamaremos na-split. Los detalles de la acción esta vez serán los siguientes:



En la solapa Condiciones marcaremos la opción Sólo archivos. Por lo demás solo nos quedará colocar el archivo na-split en un directorio de programas como /usr/local/bin y darle permisos de ejecución. El código que contiene es básicamente el siguiente:

#!/bin/bash

# Tamaño del trozo tal como lo entiende split (100*1024*1024 bytes)
trozo="100M"

# El 1er argumento recibido debe ser el directorio y el 2º el archivo
dir=$1
file=$2

# Se configura la herramienta a utilizar, split (de GNU coreutils)
tool=$(which split)

# Si no está disponible se muestra mensaje de error
if [ -z "$tool" ]; then
zenity --error --title "Dividir" \
--text "No se encontró el comando 'split'"
exit 1
fi

# Se comprueba si el tamaño del archivo es mayor de 100MB
sizeinbytes=$(ls -l $dir/$file | cut -d' ' -f5)

# Si no es así se muestra mensaje de error
if [ "$sizeinbytes" -le 104857600 ]; then
zenity --error --title "Dividir" \
--text "El tamaño del archivo debe ser mayor de 100 MB"
exit 1
fi

# Si todo ha ido bien nos vamos al directorio y dividimos el archivo
cd $dir
$tool --numeric-suffixes --suffix-length=3 \
--bytes=$trozo "$file" "$file."

Como puede observarse en el código y sus comentarios adjuntos, antes de invocar al comando split compruebo que está instalado y que el archivo a partir tiene un tamaño adecuado. Lo único que quizá merezca un comentario extra es el hecho de que los mensajes de error en este tipo de scripts hechos para nautilus-actions no se pueden mostrar con echo o printf ya que no hay consola, por lo que utilizo Zenity, un proyecto vinculado a GNOME que permite interactuar con el usuario usando cuadros de diálogo.

La combinación de los tres elementos: nautilus-actions, scripts en bash y Zenity permiten extender de forma relativamente sencilla las capacidades de Nautilus para hacerlo más potente y mejor adaptado a nuestras necesidades cotidianas. Y si una vez creadas nuestras extensiones, vemos la forma de compartirlas de manera más fácil (¿recuerdas ese botón Importar/Exportar en la utilidad de configuración?) pues mejor, ya que todos saldremos ganando ;-)

viernes, 7 de mayo de 2010

Nautilus en acción

Nautilus es el explorador y gestor de archivos del escritorio GNOME. A pesar de su sencilla interfaz, que roza el minimalismo, cuenta con abundantes e interesantes funcionalidades:
  • Uso de un panel lateral para mostrar los Lugares del Equipo (carpetas virtuales, unidades de disco y otras ubicaciones de datos), el Árbol de directorios u otros tipos de información útil a la hora de navegar por el sistema de archivos.
  • Posibilidad de abrir múltiples solapas para trabajar simultaneamente con archivos de varias ubicaciones.
  • Posibilidad de mostrar una barra de direcciones donde introducir manualmente rutas locales o remotas.
  • Soporte de sistemas de archivos virtuales mediante el uso de GVFS, incluyendo por ejemplo ubicaciones remotas en servidores FTP usando direcciones del tipo ftp://servidor/directorio o carpetas compartidas de Windows mediante direcciones del tipo smb://equipo/carpeta.
  • Posibilidad de adjuntar nuestros comentarios a cualquier archivo o directorio desde la solapa Notas de su ventana de propiedades (menú contextual - Propiedades.)
  • Posibilidad de personalizar el aspecto de un archivo o carpeta añadiendo un emblema a su icono (solapa Emblemas de su ventana de propiedades.)
  • Soporte de atajos de teclado para la mayoría de operaciones habituales y otras especiales como mostrar los archivos y carpetas ocultas pulsando Ctrl-H (amplia referencia de los atajos de teclado aquí)
Además, una posibilidad especialmente interesante de Nautilus es la de ampliarle su funcionalidad con una serie de extensiones, algunas de las cuales podemos descargar desde los repositorios oficiales de Ubuntu. Para obtener una lista de estas desde consola podemos usar la siguiente línea de comandos:

apt-cache -n search ^nautilus-

Tenemos extensiones útiles para ciertas tareas específicas como convertir archivos de audio, manipular imágenes, compartir carpetas en la red usando Samba o abrir una consola en el directorio elegido. Pero lo verdaderamente interesante es que si instalamos la extensión nautilus-actions, podremos crear nuestras propias extensiones para Nautilus...

Como ejemplo vamos a crear una extensión que nos permita abrir una terminal en cualquier directorio. Sí, ya sé que hay un paquete que nos instala una extensión que hace precisamente eso, pero vamos a hacerlo por nuestra cuenta para ver lo fácil que puede ser crear otras extensiones que aun no existan y que puedan sernos de utilidad:
  • El primer paso consiste en asegurarnos de que tenemos instalado el paquete correspondiente tecleando desde consola: sudo apt-get install nautilus-actions
  • Ahora ya podemos ejecutar la utilidad que incluye ese paquete para configurar las Acciones de Nautilus: nautilus-actions-config, por ejemplo desde el diálogo de Ejecutar aplicación que aparece al pulsar Alt-F2.
  • Pulsamos el botón Añadir y rellenamos los campos de la siguiente forma:
  • El campo Etiqueta se refiere a la opción que aparecerá en el menú contextual, mientras que el llamado Consejo nos sirve para una explicación más extensa que aparecerá en la barra de estado de Nautilus. El campo Icono no lo usaremos, aunque podría estar bien para ciertas extensiones. Los campos realmente importantes son los del apartado Acción, que definen la acción a realizar cuando se elija la opción del menú contextual. El primero, llamado Ruta se refiere al programa a ejecutar, en nuestro caso el emulador de terminal de GNOME, gnome-terminal. El campo Parámetros permite definir qué parámetros se le pasan al programa especificado en el campo anterior, y en nuestro caso se trata de pasarle el directorio elegido. Esto lo hacemos usando la opción --working-directory= del programa gnome-terminal (averiguada tras consultar su manual electrónico) y a continuación las variables especiales que, tras informarnos pulsando el botón Leyenda, deducimos que nos servirán para especificar la ruta completa hasta el directorio seleccionado.
  • Un último detalle que configuraremos en la solapa Condiciones, nos permitirá limitar que nuestra nueva opción de menú sólo se muestre para los directorios, marcando la opción Sólo carpetas.
Nuestra nueva opción del menú contextual de Nautilus ya estará lista para funcionar. Desde la utilidad de configuración Acciones de Nautilus también podremos exportar nuestras acciones a otros usuarios (de nuestro sistema o de otro externo) o importarlas usando el archivo de configuración generado. Eso lo probaremos en una próxima entrega para compartir con los demás una nueva acción creada para extender la funcionalidad de Nautilus: poder partir archivos grandes en trozos ;-)

martes, 4 de mayo de 2010

After Rock

¿Hay vida después del rock? El revolucionario estilo musical surgido a mediados de los 50 tuvo un par de décadas de auge en que evolucionó mezclándose con otros subestilos de la música popular como el blues, el jazz, el country, o el pop, lo que dejó por el camino una abundante y variopinta descendencia. Incluso hubo flirteos con los sonidos de oriente y la música clásica en un intento de trascendencia que acabaría por extraviarlo hasta que el punk lo devolvió de nuevo a sus coordenadas iniciales: simplicidad, espontaneidad y crudeza. La siguiente década lo volvió a llevar a las masas en forma de producto de consumo y en los 90 fue supuestamente rescatado por el grunge y el indie-rock, que trataron de resucitarlo con un aspecto rejuvenecido y salvaje dándole una mano de pintura setentera...

Pero no todo el mundo quería devolverlo a los viejos caminos polvorientos de Norteamérica o a sucios sótanos londinenses. Algunos estaban más interesados en volver a utilizarlo como punto de partida para volver a explorar viejas fronteras y conquistar nuevos territorios sonoros. En lugar de buscar inspiración en revalorizados vinilos de Neil Young, les interesaban más los inquietantes himnos de decadencia urbana de The Velvet Underground y las aplicaciones prácticas del minimalismo y la música ambiental tal y como algunos pioneros como Brian Eno habían venido documentando desde tiempo atrás. Como ocurre a menudo, a estas iniciativas musicales se las acabaría agrupando bajo una etiqueta demasiado vaga para ser útil: Post-rock. Diversas corrientes, demasiados grupos que van por libre, numerosas y a veces dispares influencias, pero quizá un denominador común: instrumentos típicos del rock usados de forma poco convencional para producir nuevas texturas y paisajes sonoros, a menudo instrumentales.

Una selección personal de canciones salidas de esos territorios o de otros vecinos como el rock progresivo y algún guiño a sus influencias originales:
  • "Neighborhood #1", Arcade fire
  • "Starlings", Elbow
  • "I'm Jim Morrison I'm dead", Mogwai
  • "Moonchild (The dream)", King Crimson
  • "Trains", Porcupine tree
  • "Snowfall", God is an astronaut
  • "Koyaanisqatsi", Philip Glass
  • "Ostinato", Eluvium
  • "Significant other", Steven Wilson
  • "Burial at sea", MONO
  • "In dark trees", Brian Eno
  • "Godan daginn", Sigur Rós
  • "Remember me as a time of day", Explosions in the sky
  • "Grey scale", Fennesz
  • "Sleepless", The decemberists
Aquí se puede descargar la versión en formato MP3 de la mezcla y mediante este otro enlace una versión en formato Vorbis con una calidad algo mejor y que además facilita una reproducción sin saltos. Aunque no faltan momentos de tensión y energía melódica, en la mezcla predominan largas partes instrumentales cuyas texturas y patrones repetitivos pueden inducir a la ensoñación e incluso al sueño, por lo que se desaconseja su escucha mientras se conduce ;-)