
Etiquetas Id3
#1
Escrito 17 febrero 2009 - 01:44
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?
#2
Escrito 17 febrero 2009 - 01:49
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,
#3
Escrito 17 febrero 2009 - 01:51
Que informacion deseas obtener de dichos archivos? (mp3 asumo)
#4
Escrito 17 febrero 2009 - 01:54
Delphius: buscare por torry a ver que consigo
#5
Escrito 17 febrero 2009 - 02:33
type TID3Tag = packed record Tag: array[1..3] of Char; Titulo: array[1..30] of Char; Artista: array[1..30] of Char; Album: array[1..30] of Char; Anho: array[1..4] of Char; Comentario: array[1..30] of Char; Genero: Byte; end; function LeerID3Tag(const Archivo: String; var ID3Tag: TID3Tag): Boolean; begin Result:= FALSE; FillChar(ID3Tag,Sizeof(ID3Tag),#0); try with TFileStream.Create(Archivo,fmOpenRead) do try Seek(-Sizeof(ID3Tag),soEnd); ReadBuffer(ID3Tag,Sizeof(ID3Tag)); Result:= StrLComp('TAG',PChar(@ID3Tag.Tag),Sizeof(ID3Tag.Tag)) = 0; finally Free; end; except end; end; // Un ejemplo de como usar la funcion anteriror var ID3Tag: TID3Tag; begin if LeerID3Tag('f:\1.mp3',ID3Tag) then begin ShowMessage(ID3Tag.Titulo); ShowMessage(ID3Tag.Artista); ShowMessage(ID3Tag.Album); ShowMessage(ID3Tag.Anho); ShowMessage(ID3Tag.Comentario); ShowMessage(IntToStr(ID3Tag.Genero)); end; end;
Para el ID3 2 necesitaría un poco mas de tiempo

#6
Escrito 17 febrero 2009 - 02:52
Type TID3Tag = record ID:string[3]; Titel:string[30]; Artist:string[30]; Album:string[30]; Year:string[4]; Comment:string[30]; Genre:byte; end; var ID3Tag:TID3Tag; procedure Lese_ID3Tag(Filename:string); var Buffer:array[1..128] of char; F:File; begin AssignFile(F, Filename); Reset(F,1); Seek(F,FileSize(F)-128); BlockRead(F, Buffer, SizeOf(Buffer)); CloseFile(F); with ID3Tag do begin ID:=copy(Buffer,1,3); Titel:=copy(Buffer,4,30); Artist:=copy(Buffer,34,30); Album:=copy(Buffer,64,30); Year:=copy(Buffer,94,4); Comment:=copy(Buffer,98,30); Genre:=ord(Buffer[128]); end; end;
#7
Escrito 17 febrero 2009 - 02:55
#8
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)
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:
with TFileStream.Create(Archivo,fmOpenRead or fmShareDenyWrite) do
#9
Escrito 17 febrero 2009 - 03:24
estaba leyendo dos archivos distintos y casualmente uno no tiene info.
Pero bueno ya asi si funciona gracias

#10
Escrito 17 febrero 2009 - 04:02
Pero bueno ya asi si funciona gracias
Asi si

Solo un pequeño retoque, cuando uses alguno de los registros deberías de usar algo como esto:
var Str: String; begin Str:= Copy(String(PChar(@ID3Tag.Titulo)),1,Sizeof(ID3Tag.Titulo)); end;
De esta forma nos aseguramos de que una etiqueta mal formada (o mal intencionada) nos de un susto.
#11
Escrito 17 febrero 2009 - 04:14
#12
Escrito 17 febrero 2009 - 04:27
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.como es eso? como mal intencionado?
#13
Escrito 17 febrero 2009 - 04:33