Weblog de Javier Arias

Obtener la carátula de un álbum de Amarok usando DCOP

Posted by javi en 6 \06\UTC mayo 06UTC 2008

Toda mi música la tengo organizada con Amarok y creando un programa para realizar un listado de mi colección musical me encontré con el problema de cómo conseguir la carátula de un álbum. Obtener la carátula del disco que está sonando es trivial a través de la función coverImage, que puede ser llamada desde DCOP y nos devuelve la ruta al fichero de la carátula:

[javi@cydonia ~]$ dcop amarok player coverImage

/home/javi/.kde/share/apps/amarok/albumcovers/cache/130@9b9d5ef76774f4a3e13cf02f4cb90865

El problema está cuando el disco no está sonando: no hay ninguna función disponible para pedir una carátula de un disco que esté en la colección, y tampoco hay un campo en la base de datos que indique cuál carátula corresponde a cuál álbum.

Amarok maneja las carátulas de la siguiente manera: las guarda en la carpeta ~/.kde/share/apps/amarok/albumcovers/large/ en formato PNG, asignándole como nombre el md5sum de la concatenación en minúsculas del nombre del artista y del título del álbum. Así, al disco Around The Fur de Deftones le corresponde el siguiente nombre de fichero:

[javi@cydonia ~]$ echo -n "deftonesaround the fur"|md5sum

e5f8534f07e607aad36b9c6f19a47187 –

Su carátula, por tanto, estará ubicada en ~/.kde/share/apps/amarok/albumcovers/large/e5f8534f07e607aad36b9c6f19a47187

Volviendo al problema inicial de obtener las carátulas de los discos que estén en la colección de Amarok, con DCOP podemos ejecutar consultas SQL sobre la base de datos y, por lo tanto, es posible obtener todos los nombres de artistas y de álbumes. Y si tenemos esos datos podemos saber cuál es la carátula de cada álbum. Con la siguiente consulta SQL obtendremos todas las parejas artista+disco y carátula.

SELECT DISTINCT CONCAT(artist.name, '-', album.name), CONCAT('~/.kde/share/apps/amarok/albumcovers/large/', MD5(LOWER(CONCAT(artist.name,album.name)))) FROM album, artist, tags WHERE album.id=tags.album AND artist.id=tags.artist

Para ejecutar esa consulta usamos la función query mediante DCOP:

[javi@cydonia ~]$ dcop amarok collection query "SELECT DISTINCT CONCAT(artist.name, '-', album.name), CONCAT('~/.kde/share/apps/amarok/albumcovers/large/', MD5(LOWER(CONCAT(artist.name,album.name)))) FROM album, artist, tags WHERE album.id=tags.album AND artist.id=tags.artist"

Serj Tankian-Elect The Dead Bonus CD
~/.kde/share/apps/amarok/albumcovers/large/591398f2dc2aff74627f577fd53da4e3
Linkin Park-Minutes To Midnight (Tour Edition)
~/.kde/share/apps/amarok/albumcovers/large/6d3dbccad0c4d9ceddd818d29e0ac7f7
Nirvana-Nevermind
~/.kde/share/apps/amarok/albumcovers/large/e2555e3a3bcd47ecf9d84fdacb1462a0
Linkin Park-Shadow Of The Day
~/.kde/share/apps/amarok/albumcovers/large/fe8780583e43f9f5cdf473a8fc4daf84
Linkin Park-Reanimation
~/.kde/share/apps/amarok/albumcovers/large/0717ba640841ff84c52cf846397b1b1c

Sencillo, ¿verdad? ;-)

Fuente: Amarok Forum, Amarok Wiki, Ubuntu Forums

3 comentarios to “Obtener la carátula de un álbum de Amarok usando DCOP”

  1. Rolando said

    Amigo, me parece interesante tu post. Y ya que has tocado el tema de las carátulas me gustaría hacerte una pregunta: Dado el nombre del artista y el álbum o título de la canción, ¿cómo es que puedo obtener la carátula?. Te hago la pregunta puesto que estoy trabajando en un reproductor y esa función sería muy interesante de agregarla. De antemano un saludo y reiterarte mis felicitaciones por el post.

  2. Rolando said

    Gracias amigo, es justo lo que quería saber. Es que, ¿sabes?, estoy haciendo mi reproductor, pero lo estoy escribiendo todo en java; por eso necesito saber como obtener las carátulas.

    Ahora me voy a poner a buscar un poco acerca de esa API que mencionas. Si tuvieras algo más de información te lo agradecería. De todas maneras gracias por tu tiempo, amigo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: