Asignar el número de pista (track number) a un MP3

 

Pues eso… que no sé si a ti te pasará, pero yo tengo "algunos" ficheros de música en formato MP3 que a pesar de haberlo convertido a partir de un CD original (ejem) no siempre se guarda la información completa en la cabecera del susodicho fichero MP3.

Y como la mayoría de los reproductores de MP3 suelen clasificar las canciones por el número de pista, si dicho valor no está asignado, pues… imagínate qué follón…

En vista que los dos (o tres) últimos smartphone que he tenido se empeñan en ordenar por el número de pista y harto de ir asignando manualmente dicho número, me he fabricado una pequeña utilidad (muy simple, ya verás) usando WPF (Windows Presentation Foundation) o lo que es lo mismo: utilizando un proyecto en XAML.

Este programa te permite seleccionar (o procesar) todos los ficheros .mp3 de una carpeta (o directorio) y asignar el número de pista según exista en el nombre del fichero la siguiente secuencia:
guión, cifra, guión
Por ejemplo si tenemos este fichero: Slade-02-Coz I Love You.mp3:
El número de pista es el número 2 y el título de la canción es "Coz I Love You".

Además, también te permite asignar el nombre del álbum y del autor/cantante.
Estos dos últimos datos se obtienen automáticamente de la canción elegida para indicar el directorio (ya que tienes que seleccionar un fichero .mp3 y así se sabe qué directorio quieres procesar). De todas formas, si ese fichero no tuviese los datos de la cabecera asignados puedes indicarlos de forma manual, ya que la aplicación asignará esos datos si las respectivas cajas de texto no están vacías.
En cuanto al nombre o título de la canción sólo lo asignará si marcamos la opción correspondiente.

Después te pongo los enlaces al código fuente (por ahora sólo para Visual Basic .NET).

 

La información del MP3 está en lo que se conoce como la cabecera del fichero MP3 (MP3 header) y en su día busqué en la web ejemplos de cómo obtener esa información y di con un fichero ZIP que contenía una clase de Visual Basic .NET precisamente para acceder a dicha cabecera.
Esa clase se llama MP3Info.vb y estaba contenida en un ZIP con el nombre vbmp3header_src.zip y la verdad es que no recuerdo de dónde la descargué. El autor supongo que es alemán ya que en el fichero AssemblyInfo.vb que se incluía también en el zip estaba en alemán, pero sin datos personales.

Nota:/Actualización
Haciendo una nueva búsqueda he dado con el artículo en Code Project en el que está ese fichero ZIP y como internamente coinciden las fechas, pues… debe ser de donde lo bajé o al menos ese debe ser el autor "de verdad".
Dicho artículo (enlace incluido) es: Read MP3 header information and read/write the ID3v1 tag

(By Thommy Mewes, 1 Mar 2005)

El fichero (MP3Info.vb) que yo he usado está modificado con respecto al original, así que, ese será el que te muestre con el código y que publicaré en pastebin.

 

 

Aquí tienes una captura del "formulario" en modo de diseño y el código (para Visual Basic) te lo dejo inicialmente en mi cuenta de pastebin, después si decido dejar el proyecto completo en algún otro sitio (por ejemplo en mi sitio de descargas) ya te informaré o mejor aún, ya pondré los enlaces correspondientes.

 

Asignar MP3 Track MainWindows
El formulario en modo de diseño

 

Como ves, no te muestro (código con los) detalles de lo que hace el programa… pero de todas formas la parte importante es (o debería ser) el código para acceder a la cabecera de los ficheros MP3.
De todas formas no sé si te pasará lo mismo que a mí con los ficheros MP3, pero si te pasa y quieres el ejecutable… me lo dices en los comentarios y ya te lo dejo por ahí en mi sitio de descargas.

Sea como sea, te pongo el código completo en pastebin y ya lo vas compilando y esas cosas…

Aquí tienes los enlaces individuales para que puedas usar el código creando un proyecto nuevo del tipo WPF:

 

¡Que asignes los números de pista bien! 😉

 

Nos vemos.
Guillermo

Esta entrada fue publicada en cosas técnicas, mis cosas y etiquetada , , , . Guarda el enlace permanente.