Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Recuperar Información De Los Tags ID3 (ID3 E ID3v2)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Recuperar Información De Los Tags ID3 (ID3 E ID3v2) 
 
Hola amigos. Abro este tema nuevo para dos cosas:

La primera es compartir algo de código que estuve elaborando para poder obtener los tags ID3 de archivos MP3 y la segunda es tratar de ver como se hace para obtener el ID3v2 (que es bastante más complejo.)

En cuanto al ID3 (version 1), es bastante sencillo obtener la info. Según las especificaciones, el tag ID3v1 se almacena al final del archivo en los últimos 128 bits. He aquí el código que hice para obtenerlo:

PUBLIC V_Resultado AS NEW String[]

PUBLIC PROCEDURE Aniadir(V_Archivo AS String)
  DIM V_TAG AS String
  DIM V_Nombre AS String
  DIM V_Interprete AS String
  DIM V_Album AS String
  DIM V_Ano AS Integer
  DIM V_Comentario AS String
  DIM V_ZeroByte AS Byte
  DIM V_Pista AS Byte
  DIM V_Genero AS Byte

  DIM V_f AS File
  
  V_Resultado.Clear()

    V_f = OPEN V_Archivo FOR INPUT
    SEEK #V_f, -128
    READ #V_f, V_TAG, -3
    READ #V_f, V_Nombre, -30
    READ #V_f, V_Interprete, -30
    READ #V_f, V_Album, -30
    READ #V_f, V_Ano, -4
    READ #V_f, V_Comentario, -28
    READ #V_f, V_ZeroByte, -1
    READ #V_f, V_Pista, -1
    READ #V_f, V_Genero, -1
  
  V_Resultado.Add(Conv$(RTrim$(LTrim$(V_Nombre)), "ISO-8859-1", "UTF-8"), 0)
  V_Resultado.Add(Conv$(RTrim$(LTrim$(V_Interprete)), "ISO-8859-1", "UTF-8"), 1)
  V_Resultado.Add(Conv$(RTrim$(LTrim$(V_Album)), "ISO-8859-1", "UTF-8"), 2)
  V_Resultado.Add(Conv$(RTrim$(LTrim$(V_Comentario)), "ISO-8859-1", "UTF-8"), 3)
  V_Resultado.Add(V_Pista, 4)
  
END


Bueno, voy a explicarlo para aquel que viene más verde que yo:

Uso:

Aniadir(archivo.mp3)

Almacena todo en la variable V_Resultado:
0 Nombre
1 Interprete
2 Album
3 Comentario

Noté que cuando lo cargaba en una tabla u otro control los acentos se veían como "cuadraditos inválidos." Entonces le aplicé la conversión de caracteres a las variables que almacenan strings:

 V_Resultado.Add(Conv$(RTrim$(LTrim$(V_Nombre)), "ISO-8859-1", "UTF-8"), 0)

de ISO-8859-1 a UTF-8 con la función Conv$.

Ahora bien, los ID3v2 son bastante distintos:

- Los campos no tienen una longitud específica
- Están todos al principio del archivo
- Se almacenan en "frames". Por ejemplo TIT2 es el frame para el título de la pista.

¿Porqué tanto interés en el ID3v2? Porque el ID3v1 tiene una limitación de 30 caracteres para el Nombre, Intérprete y Álbum. Entonces, algunos archivos procesados muestran esos campos cortados cuando los pretendo cargar en una base de datos, por ejemplo.

Estuve viendo algo en la especificación oficial del ID3 (www.id3.org) pero la verdad es que me resulta bastante complejo "procesar" a la hora de tratar de generar un código. El principal problema que veo es que los campos del ID3v2 no tienen una longitud definida y no sé francamente como hacer algo con gambas para que sepa cuando terminar de asignar un valor. Los códigos de ejemplo que busqué me parecen muy complejos para mi entendimiento y no son para gambas. Sería de mucho interés si alguien ha resuelto esto y quisiera compartirlo con nosotros. Saludos a todos.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recuperar Información De Los Tags ID3 (ID3 E ID3v2) 
 
Yo hace tiempo estuve con este tema, pero como dices es un tanto complejo y en ese entonces me fustré jajajaja.
Pude hacer algunas pruebas un tanto chafas y mal resueltas, que había dejado al olvido. Ahorita que vi tu hilo quise darle una mirada a lo que había hecho y así de la nada se me prendió el foco, jajaja. Aún no tengo nada concreto pero más o menos ya vi como hacerle:

1. Recorrer a lo largo del binario hasta encontrar la cadena con la TAG (como TIT2).
2. Después de la TAG se encuentran 7 bytes, los 4 primeros (B3, B2, B1, B0) son para tener la longitud del valor de la TAG, los otros tres bytes no se para que son.
3. Para tener la longitud del valor de la TAG aplicamos la sig. formula:

Size = (B3 << 21 OR B2 << 14 OR B1 << 7 OR B0) - 1


Que codificado en gambas sería algo como:

size = Shl(CInt(b0), 21) OR Shl(CInt(b1), 14) OR Shl(CInt(b2), 7) OR CInt(b3)
size = size - 1
 


4. Así que para tener el valor de la TAG lo tomamos desde donde encontramos la TAG más 7 (por los 7 bytes que le siguen), tomando size datos.

Esa formula que te paso creo recordar que viene en la documentación de id3.org aunque a mi me costó un leve entenderla y hasta tuve que aplicar ingeniería inversa jajaja (abrí varios mp3 con un editor hexadecimal -GHex-).

Ahorita ando entretenido con otras cosas, pero ya que vi como hacerle así que espero sacar algo de código pronto. Si lo hago pss aquí lo comparto.

Saludos!

EDITO:

.......... ya vi en la documentación, una TAG está formada de la sig manera

TAG B3  B2 B1 B0 F V V

Donde TAG es el nombre de la TAG, por ejemplo ID3 (cuyo valor hexadecimal-ascii es 0x49 0x44 0x33).

B3 B2 B1 B0 son los cuatro bytes que te sirven para tener el tamaño del valor de la TAG.

F es un byte con banderas (a - Unsynchronisation, b - Extended header, c - Experimental indicator) las cuales no he visto como usar.

V V es para indicar la versión de ID3, creo que la más común es la v3.00 (0x03 0x00).
 



 
última edición por razaAztk el Lunes, 10 Octobre 2011, 01:34; editado 1 vez 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recuperar Información De Los Tags ID3 (ID3 E ID3v2) 
 
Interesante. Justamente, estoy terminando la aplicación para gestionar mi colección de MP3. Cuando esté lista será compartida aqui.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recuperar Información De Los Tags ID3 (ID3 E ID3v2) 
 
Hola

El otro día encontré esto que te puede servir. Hay varias utilidades para manejar las ID3, ya que implementarlas en gambas es un gran trabajo y existiendo ya en C/C++ no hay ninguna necesidad.

Si instalas el paquete libid3-tools tendrás disponibles cuatro utilidades desde la linea de comandos, entre ellas "id3info" que provee todos los resultados disponibles que tenga el archivo mp3. Por ejemplo si hacemos id3info "micancion.mp3" nos devuelve varias lineas con información:

jesus@jesus-desktop ~/Música $ id3info "186 Walking In The Rain.mp3"

*** Tag information for 186 Walking In The Rain.mp3
=== TT2 (Title/songname/content description): Walking In The Rain
=== TP1 (Lead performer(s)/Soloist(s)): Flash And The Pan
=== TEN (Encoded by): iTunes v4.9
=== COM (Comments): (iTunNORM)[eng]:  000007AC 00000682 0000A045 0000843A 00013F97 000082D0 000083C3 00008424 0000FFEB 00008092
=== COM (Comments): (iTunes_CDDB_IDs)[eng]: 14+A21E711E83BAC50F7800F47EEA406D41+5723907
=== TAL (Album/Movie/Show title): Keyboard Masher
=== TCO (Content type): Keyboard Masher
=== TRK (Track number/Position in set): 186
*** mp3 info
MPEG1/layer III
Bitrate: 192KBps
Frequency: 44KHz
jesus@jesus-desktop ~/Música $ id3tag "186 Walking In The Rain.mp3"
Tagging 186 Walking In The Rain.mp3: attempting v1 and v2, tagged v1 and v2


Las utilidades que trae el paquete son id3cp, id3tag, id3convert y id3info. Para mas información de cada comando usa comando --help

Conclusión: Lo más sencillo es usar Shell para hacer llamadas a estas utilidades y procesar la salida de texto a nuestro gusto.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recuperar Información De Los Tags ID3 (ID3 E ID3v2) 
 
jguardon escribió: [Ver mensaje]
Hola

El otro día encontré esto que te puede servir. Hay varias utilidades para manejar las ID3, ya que implementarlas en gambas es un gran trabajo y existiendo ya en C/C++ no hay ninguna necesidad.

Si instalas el paquete libid3-tools tendrás disponibles cuatro utilidades desde la linea de comandos, entre ellas "id3info" que provee todos los resultados disponibles que tenga el archivo mp3. Por ejemplo si hacemos id3info "micancion.mp3" nos devuelve varias lineas con información:

jesus@jesus-desktop ~/Música $ id3info "186 Walking In The Rain.mp3"

*** Tag information for 186 Walking In The Rain.mp3
=== TT2 (Title/songname/content description): Walking In The Rain
=== TP1 (Lead performer(s)/Soloist(s)): Flash And The Pan
=== TEN (Encoded by): iTunes v4.9
=== COM (Comments): (iTunNORM)[eng]:  000007AC 00000682 0000A045 0000843A 00013F97 000082D0 000083C3 00008424 0000FFEB 00008092
=== COM (Comments): (iTunes_CDDB_IDs)[eng]: 14+A21E711E83BAC50F7800F47EEA406D41+5723907
=== TAL (Album/Movie/Show title): Keyboard Masher
=== TCO (Content type): Keyboard Masher
=== TRK (Track number/Position in set): 186
*** mp3 info
MPEG1/layer III
Bitrate: 192KBps
Frequency: 44KHz
jesus@jesus-desktop ~/Música $ id3tag "186 Walking In The Rain.mp3"
Tagging 186 Walking In The Rain.mp3: attempting v1 and v2, tagged v1 and v2


Las utilidades que trae el paquete son id3cp, id3tag, id3convert y id3info. Para mas información de cada comando usa comando --help

Conclusión: Lo más sencillo es usar Shell para hacer llamadas a estas utilidades y procesar la salida de texto a nuestro gusto.

Saludos


Excelente, ¡que gran ayuda! Justamente acabo de entrar al foro para publicar mi programita que maneja mi colección de MP3. He logrado código para leer los id3 tags, así que estará por aquí pronto para que lo vean (cuestión de minutos.) La herramienta se ve muy útil, ya veré como usarla en el "CatalogadorMP3".
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recuperar Información De Los Tags ID3 (ID3 E ID3v2) 
 
A más de un año de este post, jajaja..........

En gambas3 existe la clase MediaPlayer (se necesita habilitar el componente gb.media) http://gambasdoc.org/help/comp/gb.media/mediaplayer?v3 donde tiene el evento Tag para gestionar justamente dichas Tags. También está el ejemplo MediaPlayer (en el IDE de gambas3) donde se puede ver como se usa.

Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Objetos: Guardar Y Recuperar Referencia jsbsan General 4 Viernes, 08 Junio 2012, 16:31 Ver último mensaje
jsbsan
No hay nuevos mensajes Recuperar La Salida De La Consola De Gambas shordi General 0 Viernes, 22 Febrero 2013, 10:50 Ver último mensaje
shordi
No hay nuevos mensajes Extraer Los TAG ID3v1 Y ID3v2 De Archivos ... vuott Aplicaciones/Fragmentos de Código 6 Lunes, 29 Julio 2019, 19:35 Ver último mensaje
vuott
No hay nuevos mensajes Pop3 Recuperar Body calcena General 3 Domingo, 20 Octobre 2019, 16:44 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron