Projekte > Audio-CD (CDDA) > ID3-Tags

Id3v1

  • Beschreibung
  • Struktur
  • Liste der ID3v1-Genres
  • Erweiterung WinAmp
  • Erweiterung ab Winamp 1.91
  • Erweiterung ab Winamp 5.6
  • Kodierung
  • Deklarationen
  • Tags einfügen
  • Ergebnis
  • Demo
  • Beschreibung

    Die erste Version von Eric Kemp aus dem Jahre 1996.

    Struktur

    Der Id3-Tag ist ein 128 Byte großer Block, welcher das Ende der Datei bildet.

    OffsetLängeBeschreibung
    03Signatur "TAG"
    330Titel
    3330Interpret
    6330Album
    934Erscheinungsjahr
    9730Kommentar
    1271Genre

    Liste der ID3v1-Genres

    NummerGenre NummerGenre
    00Blues 01Classic Rock
    02Country 03Dance
    04Disco 05Funk
    06Grunge 07Hip-Hop
    08Jazz 09Metal
    10New Age 11Oldies
    12Other 13Pop
    14Rhythm and Blues 15Rap
    16Reggae 17Rock
    18Techno 19Industrial
    20Alternative 21Ska
    22Death Metal 23Pranks
    24Soundtrack 25Euro-Techno
    26Ambient 27Trip-Hop
    28Vocal 29Jazz & Funk
    30Fusion 31Trance
    32Classical 33Instrumental
    34Acid 35House
    36Game 37Sound Clip
    38Gospel 39Noise
    40Alternative Rock 41Bass
    42Soul 43Punk
    44Space 45Meditative
    46Instrumental Pop 47Instrumental Rock
    48Ethnic 49Gothic
    50Darkwave 51Techno-Industrial
    52Electronic 53Pop-Folk
    54Eurodance 55Dream
    56Southern Rock 57Comedy
    58Cult 59Gangsta
    60Top 40 61Christian Rap
    62Pop/Funk 63Jungle
    64Native US 65Cabaret
    66New Wave 67Psychedelic
    68Rave 69Showtunes
    70Trailer 71Lo-Fi
    72Tribal 73Acid Punk
    74Acid Jazz 75Polka
    76Retro 77Musical
    78Rock 'n' Roll 79Hard Rock

    Erweiterung WinAmp

    NummerGenre NummerGenre
    80Folk 81Folk-Rock
    82National Folk 83Swing
    84Fast Fusion 85Bebop
    86Latin 87Revival
    88Celtic 89Bluegrass
    90Avantgarde 91Gothic Rock
    92Progressive Rock 93Psychedelic Rock
    94Symphonic Rock 95Slow Rock
    96Big Band 97Chorus
    98Easy Listening 99Acoustic
    100Humour 101Speech
    102Chanson 103Opera
    104Chamber Music 105Sonata
    106Symphony 107Booty Bass
    108Primus 109Porn Groove
    110Satire 111Slow Jam
    112Club 113Tango
    114Samba 115Folklore
    116Ballad 117Power Ballad
    118Rhythmic Soul 119Freestyle
    120Duet 121Punk Rock
    122Drum Solo 123A cappella
    124Euro-House 125Dance Hall
    126Goa 127Drum & Bass
    128Club-House 129Hardcore Techno
    130Terror 131Indie
    132BritPop 133Negerpunk
    134Polsk Punk 135Beat
    136Christian Gangsta Rap 137Heavy Metal
    138Black Metal 139Crossover
    140Contemporary Christian 141Christian Rock

    Erweiterung ab Winamp 1.91

    NummerGenre NummerGenre
    142Merengue 143Salsa
    144Thrash Metal 145Anime
    146Jpop 147Synthpop

    Erweiterung ab Winamp 5.6

    NummerGenre NummerGenre
    148Abstract 149Art Rock
    150Baroque 151Bhangra
    152Big Beat 153Breakbeat
    154Chillout 155Downtempo
    156Dub 157EBM
    158Eclectic 159Electro
    160Electroclash 161Emo
    162Experimental 163Garage
    164Global 165IDM
    166Illbient 167Industro-Goth
    168Jam Band 169Krautrock
    170Leftfield 171Lounge
    172Math Rock 173New Romantic
    174Nu-Breakz 175Post-Punk
    176Post-Rock 177Psytrance
    178Shoegaze 179Space Rock
    180Trop Rock 181World Music
    182Neoclassical 183Audiobook
    184Audio Theatre 185Neue Deutsche Welle
    186Podcast 187Indie-Rock
    188G-Funk 189Dubstep
    190Garage Rock 191Psybient

    Kodierung

    Die Enkodierung ist nicht vorgeschrieben. Gespeichert wird als UTF-8.

    Deklarationen

    Die Id-Tags v1:

    type
      TId3v1 = record
        sSignatur : array[1..3] of Char;
        sTitle    : array[1..30] of Char;
        sArtist   : array[1..30] of Char;
        sAlbum    : array[1..30] of Char;
        sYear     : array[1..4] of Char;
        sComment  : array[1..30] of Char;
        bGenre    : Byte;
      end;
    

    alternativ auch:

    type
      CharArray03 = array[1..3] of Char;
      CharArray04 = array[1..4] of Char;
      CharArray30 = array[1..30] of Char;
    
    type
      TId3v1 = record
        Signatur : CharArray03;
        Title    : CharArray30;
        Artist   : CharArray30;
        Album    : CharArray30;
        Year     : CharArray04;
        Comment  : CharArray30;
        Genre    : Byte;
      end;
    

    Dann die Liste der ID3v1-Genres. Hier etwas abgekürzt.

    const
      csID3v1Genres : array[0..191] of String = ('Blues', ... 'Psybient');
    

    Tags einfügen

    Das Einfügen der Id3v1-Tags ist relativ einfach, da sie hinter dem Ende der MP3-Datei stehen.

    Das Array für den zu rippenden Track wurde um ein Array für den Id3-Tag erweitert:

    type
      CharArray128 = Array[1..128] of Char;
     
      TRipTrack = record
        nNumber    : Cardinal;
        dwOffset   : Cardinal;
        dwLength   : Cardinal;
        stFilename : String;
        id3v1Line  : CharArray128;
      end;
      TRipTraclList = Array of TRipTrack;
    

    Hier wird die TId3v1-Struktur gefüllt und dann in das Array im RipTrack verschoben. Das ist mit Sicherheit noch nicht optimal, aber damit funktioniert die Demo unten.

    ZeroMemory(@Id3Tag, SizeOf(TId3v1));
    Id3Tag.Signatur := 'TAG';
    StrLCopy(@Id3Tag.Title,   PChar(TRACK_Name[i]),          High(Id3Tag.Title));
    StrLCopy(@Id3Tag.Artist,  PChar(TRACK_Performer[i]),     High(Id3Tag.Artist));
    StrLCopy(@Id3Tag.Album,   PChar(ALBUM_Name[i]),          High(Id3Tag.Album));
    StrLCopy(@Id3Tag.Comment, PChar(Format('TRACK%d', [i])), High(Id3Tag.Comment));
    Id3Tag.Year  := #0#0#0#0;
    Id3Tag.Genre := 12;
    Move(Id3Tag, aTrack.id3v1Line, SizeOf(TId3v1));
    

    Der Routine zum Encoden wird direkt vor dem Befehl zum Schliessen des Streams noch ein Befehl zum Schreiben des ID3v1-Tags eingefügt:

    aFileStream.Write(fRipTrackList[i].id3v1Line, 128);
    

    Ergebnis

    Am Ende der Datei steht der TAG.

    Und der Windows Explorer kann etwas zu dem Dateien sagen:

    Demo

    Demo, welche die Informationen aus dem CD Text holt.
    Encode MP3 mit Id3v1-Tags CD Text (pcddaId3v1CDText.7z - 460 kb) inklusive Lame_enc.DLL MD5 (1 kb).
    Compiler: Delphi 7 Personal
    Stand: 29. Juli 2017