Voici une unité pour lire et ecire les TAG MP3
dans le zip il y a un exemple d'utilisation:
unit TagMp3_unit;
{ TagMP3 v 1.0 par DelphiCool
09/03/2002
www.ProgZed.com
}
interface
uses
SysUtils, Classes ;
Type
TagMP3 = record
Titre : String[30];
Artiste : String[30];
Album : String[30];
Annee : String[4];
Commentaire : String[30];
Genre : Byte;
end;
Function Lire_Tag(Fichier :string): TagMP3;
Procedure Ecrire_Tag(Fichier :string; VotreTag : TagMP3);
implementation
{-=-=-=-=-=-= LECTURE DU TAG =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
Function Lire_Tag(Fichier :string): TagMP3;
var Fs : TFileStream;
Tag : Array[1..128] of Char;
i :integer;
s :string;
T : TagMP3;
begin
Fs := TFileStream.Create(Fichier,fmOpenRead);
i := Fs.Size -128;
Fs.Seek( i,soFromBeginning);
Fs.Read(Tag,128);
Fs.Free;
s := Copy(Tag,1,3);
if s <> 'TAG' then ErangeError.Create('Il n''y as pas de Tag actuellement');
{ titre } T.Titre := Copy(Tag,4,33);
{ Artiste } T.Artiste := Copy(Tag,34,63);
{ Album } T.Album := Copy(Tag,64,93);
{ Année } T.Annee := Copy(Tag,94,97);
{ Commentaire } T.Commentaire := Copy(Tag,98,127);
{ Genre } T.Genre := Ord(Tag[128]);
Result := T;
end;
{-=-=-=-=-=-= LECTURE DU TAG =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
Procedure Ecrire_Tag(Fichier :string; VotreTag : TagMP3);
const TypeTag : array[1..3] of Byte = ($54,$41,$47);
var Fs : TFileStream;
i, j :integer;
b : byte;
begin
j := 1;
Fs := TFileStream.Create(Fichier,fmOpenWrite);
{ on se positionne au bon endroit }
i := Fs.Size -128;
Fs.Seek( i,soFromBeginning);
{ on ecrit TAG }
Fs.Write(TypeTag,3);
{ TiTre }
For i := 1 to Length(VotreTag.Titre) do
begin
b := Ord(VotreTag.Titre[i]);
Fs.Write(b,1);
j := i;
end;
b := 0; for i := j to 29 do Fs.Write(b,1);
{ Artiste }
For i := 1 to Length(VotreTag.Artiste) do
begin
b := Ord(VotreTag.Artiste[i]);
Fs.Write(b,1);
j := i;
end;
b := 0; for i := j to 29 do Fs.Write(b,1);
{ Album }
For i := 1 to Length(VotreTag.Album) do
begin
b := Ord(VotreTag.Album[i]);
Fs.Write(b,1);
j := i;
end;
b := 0; for i := j to 29 do Fs.Write(b,1);
{ Année }
For i := 1 to Length(VotreTag.Annee) do
begin
b := Ord(VotreTag.Annee[i]);
Fs.Write(b,1);
j := i;
end;
b := 0; for i := j to 3 do Fs.Write(b,1);
{ Commentaire }
For i := 1 to Length(VotreTag.Commentaire) do
begin
b := Ord(VotreTag.Commentaire[i]);
Fs.Write(b,1);
j := i;
end;
b := 0; for i := j to 29 do Fs.Write(b,1);
{ Genre }
b := VotreTag.Genre;
Fs.Write(b,1);
Fs.Free;
end;
{-=-=-=-=-=-= =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
end.
|