Mp3 - tags

Top  Previous  Next

 

 

// The MPEG Layer 3 ID3 tag structure:

type

  ID3Struct = record

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

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

    Year: array [0..3of Char;

    Comment: array [0..29of Char;

    Genre: Byte;

  end;

 

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

const

  ID3Genre : array [0..126of 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 }