File input/output utilities for the MP3 tag editor. Handles reading and writing MP3 tag data.

Source Code

function HaveTag:boolean;

var Hdr:  array [1..TagHdrLen] of char;
    i:	  byte;

begin
     for i:=1 to TagHdrLen do Read(F,Hdr[i]);
     if Hdr=TagHdr then HaveTag:=True else HaveTag:=False;
end;


function ReadTag(Path:string):TStat;

var Fs:   LongInt;
    i:	  byte;

begin
     ReadTag:=Ok;
     {$I-}
     Assign(F,Path);
     Reset(F);
     {$I+}
     if IOResult<>0 then
 begin
      ReadTag:=IOEr;
      Exit;
 end;

     Fs:=FileSize(F);

     if Fs < TagLen then
 begin
      ReadTag:=FEr;
      Exit;
 end
     else Seek(F,FileSize(F)-TagLen);

     if not HaveTag then
 begin
             ReadTag:=TEr;
      Exit;
 end;

     with Tag do
  begin
       for i:=1 to NormRecLen do Read(F,Title[i]);
       for i:=1 to NormRecLen do Read(F,Artist[i]);
       for i:=1 to NormRecLen do Read(F,Album[i]);
       for i:=1 to YearRecLen do Read(F,Year[i]);
       for i:=1 to NormRecLen do Read(F,Comment[i]);
{	      Read(F,Genre[1]);}
  end;
     Close(F);
end;

function WriteTag(Path:string):TStat;

var Fs: LongInt;
    i:	byte;

begin
     WriteTag:=Ok;
     {$I-}
     Assign(F,Path);
     Reset(F);
     {$I+}

     if IOResult<>0 then
 begin
      WriteTag:=IOEr;
      Exit;
 end;

     Fs:=FileSize(F);

     if Fs <= TagLen then
 begin
      Seek(F,Fs);
      WriteTag:=FEr;
 end
     else
 begin
             if not HaveTag then
   begin
        WriteTag:=TEr;
        Seek(F,Fs);
   end
      else Seek(F,FileSize(F)-TagLen);
 end;

     with Tag do
  begin
       for i:=1 to NormRecLen do Write(F,Title[i]);
       for i:=1 to NormRecLen do Write(F,Artist[i]);
       for i:=1 to NormRecLen do Write(F,Album[i]);
       for i:=1 to YearRecLen do Write(F,Year[i]);
       for i:=1 to NormRecLen do Write(F,Comment[i]);
       Write(F,#255);{Genre[1]);}
  end;
              Close(F);

end;
Loading tracks SoundCloud