Mp3 - tags

Top  Previous  Next

 

 

// The MPEG Layer 3 ID3 tag structure:

type

  ID3Struct = record

    Signature: array [0..2] of Char; { Should be: 'TAG' }

    Title, Artist, Album: array [0..29] of Char;

    Year: array [0..3] of Char;

    Comment: array [0..29] of Char;

    Genre: Byte;

  end;

 

// Here's the genre (Max. 256 entries).

const

  ID3Genre : array [0..126] of string = ('Blues', 'Classic Rock',

    'Country', 'Dance', 'Disco', 'Funk', 'Grunge', 'Hip-Hop',

    'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B',

    'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative',

    'Ska', 'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno',

    'Ambient', 'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance',

    'Classical', 'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip',

    'Gospel', 'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk',

    'Space', 'Meditative', 'Instrumental Pop', 'Instrumental Rock',

    'Ethnic', 'Gothic', 'Darkwave', 'Techno-Industrial', 'Electronic',

    'Pop-Folk', 'Eurodance', 'Dream', 'Southern Rock', 'Comedy',

    'Cult', 'Gangsta', 'Top 40', 'Christian Rap', 'Pop/Funk',

    'Jungle', 'Native American', 'Cabaret', 'New Wave', 'Psychadelic',

    'Rave', 'Showtunes', 'Trailer', 'Lo-Fi', 'Tribal', 'Acid Punk',

    'Acid Jazz', 'Polka', 'Retro', 'Musical', 'Rock & Roll',

    'Hard Rock', 'Folk', 'Folk-Rock', 'National Folk', 'Swing',

    'Fast Fusion', 'Bebob', 'Latin', 'Revival', 'Celtic', 'Bluegrass',

    'Avantgarde', 'Gothic Rock', 'Progressive Rock', 'Psychedelic Rock',

    'Symphonic Rock', 'Slow Rock', 'Big Band', 'Chorus', 'Easy Listening',

    'Acoustic', 'Humour', 'Speech', 'Chanson', 'Opera', 'Chamber Music',

    'Sonata', 'Symphony', 'Booty Bass', 'Primus', 'Porn Groove',

    'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba', 'Folklore',

    'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle', 'Duet',

    'Punk Rock', 'Drum Solo', 'Acapella', 'Euro-House', 'Dance Hall' );

 

// This is the ID3 Tag read code:

procedure ReadID3Tag;

var

  fMP3: file of Byte;

  Tag: ID3Struct;

begin { ReadID3Tag }

  try

    (* sFileName - (string) The full file name with path. *)

    AssignFile(fMP3, sFileName);

    Reset(fMP3);

    try

      Seek(fMP3, FileSize(fMP3) - 128);

      BlockRead(fMP3, Tag, SizeOf(Tag))

    finally

 

    end; { try }

 

  finally

    CloseFile(fMP3)

  end; { try }

  if fMP3.Signature<>'TAG' then

  begin

 

    { Doesn't have an ID3 tag }

  end { fMP3.Signature<>'TAG' }

  else

  begin

 

    { do something with the tag }

  end; { not (fMP3.Signature<>'TAG') }

end; { ReadID3Tag }

 

 

(* WriteID3Tag() function

  **

  ** Copyright (c) 2000 Jacob Dybala (m3Rlin)

  ** Freeware.

  **

  ** Created : January 7 2000

  ** Modified: January 7 2000

  ** Please leave this copyright notice.

  *)

procedure WriteID3Tag(id3NewTag: ID3Struct; sFileName: string);

var

  fMP3: file of Byte;

  Tag: ID3Struct;

begin { WriteID3Tag }

  try

    AssignFile(fMP3, sFileName);

    Reset(fMP3);

    try

      Seek(fMP3, FileSize(fMP3) - ID3OffsetFromEnd);

      BlockRead(fMP3, Tag, SizeOf(Tag));

      if fMP3.Signature='TAG' then

        { Replace old tag }

        Seek(fMP3, FileSize(fMP3) - ID3OffsetFromEnd)

      else

        { Append tag to file because it doesn't exist.

          Cannot use Append() function. It's only for text files. }

        Seek(fMP3, FileSize(fMP3));

      BlockWrite(fMP3, id3NewTag, SizeOf(id3NewTag))

    finally

 

    end; { try }

 

  finally

    CloseFile(fMP3)

  end; { try }

end; { WriteID3Tag }