|
Página 1 de 1
|
Recuperar Información De Los Tags ID3 (ID3 E ID3v2)
Autor |
Mensaje |
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
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.
|
#1 Domingo, 09 Octobre 2011, 15:33 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
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:
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
|
#2 Lunes, 10 Octobre 2011, 01:14 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
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.
|
#3 Martes, 11 Octobre 2011, 19:00 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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"
|
#4 Sabado, 05 Noviembre 2011, 12:56 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
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
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".
|
#5 Domingo, 04 Diciembre 2011, 17:16 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
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!
|
#6 Domingo, 30 Diciembre 2012, 02:12 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|