Ir al contenido


Foto

Etiquetas Id3


  • Por favor identifícate para responder
12 respuestas en este tema

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 febrero 2009 - 01:44

Eso, quisiera saber que utilizan ustedes para la lectura de estas etiquetas.

Se que las JEDI lo traen pero de plano no quiero instalarlas muchos componentes para lo que lo voy a necesitar.

Probe con esta libreria http://www.3delite.h...3v2library.html pero no funciona, sale como si el archivo no tuviese informacion, pero desde el explorador de windows se puede ver que si la tiene.

¿Alguna sugerencia?
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 17 febrero 2009 - 01:49

hola Eduardo,
Tal vez sea que la versión id que lee el reproductor es la 1 o la 2.1.
Desconozco cuales son las diferencias entre una y otra.

Recuerdo que bajé un componente desde torry que hace lo buscas, soportaba desde la 2.1 a la 3. No recuerdo bien el nombre... creo que era IdMp3Tag o algo así. Ahora no lo tengo instalado, lo perdí hace tiempo. :(

Saludos,

  • 0

#3 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 17 febrero 2009 - 01:51

Hay dos tipos de informacion en un archivo multimedia, la que obtienes por medio de calculos para obtener la cantidad de frames, bitrate rate, samples per second, duracion, etc. La otra puede ser ID3 v1 o v2... y talvez el componente que probaste no esta bien configurado o solo puede obtener la informacion de una de las versiones.

Que informacion deseas obtener de dichos archivos? (mp3 asumo)
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 febrero 2009 - 01:54

cHackAll: una información sencilla, Autor, Genero y Titulo

Delphius: buscare por torry a ver que consigo
  • 0

#5 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 17 febrero 2009 - 02:33

Bueno para ID3 1 podemos usar algo como esto:


delphi
  1. type
  2.   TID3Tag = packed record
  3.     Tag: array[1..3] of Char;
  4.     Titulo: array[1..30] of Char;
  5.     Artista: array[1..30] of Char;
  6.     Album: array[1..30] of Char;
  7.     Anho: array[1..4] of Char;
  8.     Comentario: array[1..30] of Char;
  9.     Genero: Byte;
  10.   end;
  11.  
  12. function LeerID3Tag(const Archivo: String; var ID3Tag: TID3Tag): Boolean;
  13. begin
  14.   Result:= FALSE;
  15.   FillChar(ID3Tag,Sizeof(ID3Tag),#0);
  16.   try
  17.     with TFileStream.Create(Archivo,fmOpenRead) do
  18.     try
  19.       Seek(-Sizeof(ID3Tag),soEnd);
  20.       ReadBuffer(ID3Tag,Sizeof(ID3Tag));
  21.       Result:= StrLComp('TAG',PChar(@ID3Tag.Tag),Sizeof(ID3Tag.Tag)) = 0;
  22.     finally
  23.       Free;
  24.     end;
  25.   except
  26.   end;
  27. end;
  28.  
  29.  
  30.  
  31. // Un ejemplo de como usar la funcion anteriror
  32. var
  33.   ID3Tag: TID3Tag;
  34. begin
  35.   if LeerID3Tag('f:\1.mp3',ID3Tag) then
  36.   begin
  37.     ShowMessage(ID3Tag.Titulo);
  38.     ShowMessage(ID3Tag.Artista);
  39.     ShowMessage(ID3Tag.Album);
  40.     ShowMessage(ID3Tag.Anho);
  41.     ShowMessage(ID3Tag.Comentario);
  42.     ShowMessage(IntToStr(ID3Tag.Genero));
  43.   end;
  44. end;



Para el ID3 2 necesitaría un poco mas de tiempo  :p
  • 0

#6 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 febrero 2009 - 02:52

Gracias por el codigo Seoane, para v2 tengo este, pero me da un error en assignfile cuando el archivo esta en un cd, eso mismo hacia que la libreria mencionada anteriormente diera los nombres en blanco.



delphi
  1. Type
  2. TID3Tag = record
  3.   ID:string[3];
  4.   Titel:string[30];
  5.   Artist:string[30];
  6.   Album:string[30];
  7.   Year:string[4];
  8.   Comment:string[30];
  9.   Genre:byte;
  10. end;
  11. var
  12.   ID3Tag:TID3Tag;
  13.  
  14. procedure Lese_ID3Tag(Filename:string);
  15. var
  16.   Buffer:array[1..128] of char;
  17.   F:File;
  18. begin
  19.   AssignFile(F, Filename);
  20.   Reset(F,1);
  21.   Seek(F,FileSize(F)-128);
  22.   BlockRead(F, Buffer, SizeOf(Buffer));
  23.   CloseFile(F);
  24.   with ID3Tag do
  25.   begin
  26.       ID:=copy(Buffer,1,3);
  27.       Titel:=copy(Buffer,4,30);
  28.       Artist:=copy(Buffer,34,30);
  29.       Album:=copy(Buffer,64,30);
  30.       Year:=copy(Buffer,94,4);
  31.       Comment:=copy(Buffer,98,30);
  32.       Genre:=ord(Buffer[128]);
  33.   end;
  34. end;


  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 febrero 2009 - 02:55

Seoane, el codigo funciona bien, pero solo en un medio que permita escribir, al estar en un cd no funciona como deberia.
  • 0

#8 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 17 febrero 2009 - 03:07

Seoane, el codigo funciona bien, pero solo en un medio que permita escribir, al estar en un cd no funciona como deberia.


:^) A mi me funciona bien en un Cd ...

¿Seguro que lo estas copiando tal cual? (fíjate que lo abro como solo lectura)


delphi
  1. with TFileStream.Create(Archivo,fmOpenRead) do



El único problema que se me ocurre es que lo tengas abierto desde otro programa, si es así usa esto otro:


delphi
  1. with TFileStream.Create(Archivo,fmOpenRead or fmShareDenyWrite) do


  • 0

#9 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 febrero 2009 - 03:24

jajaja error de novato

estaba leyendo dos archivos distintos y casualmente uno no tiene info.

Pero bueno ya asi si funciona gracias  (y)
  • 0

#10 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 17 febrero 2009 - 04:02

Pero bueno ya asi si funciona gracias  (y)


Asi si  :D

Solo un pequeño retoque, cuando uses alguno de los registros deberías de usar algo como esto:


delphi
  1. var
  2.   Str: String;
  3. begin
  4.   Str:= Copy(String(PChar(@ID3Tag.Titulo)),1,Sizeof(ID3Tag.Titulo));
  5. end;


De esta forma nos aseguramos de que una etiqueta mal formada (o mal intencionada) nos de un susto.
  • 0

#11 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 febrero 2009 - 04:14

como es eso? como mal intencionado?
  • 0

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 17 febrero 2009 - 04:27

como es eso? como mal intencionado?

La especificación ID3 no obliga a terminar las cadenas de texto con un carácter nulo, así que es mejor asegurarse de que solo leemos hasta el máximo de caracteres en cada campo.
  • 0

#13 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 febrero 2009 - 04:33

ok, entendido... y en proceso de cambio

  • 0




IP.Board spam blocked by CleanTalk.