Home | Kontakt | Sitemap

Start

Über mich

Kontakt

Sitemap

Lizenz

Anleitungen

DVD, miniDVD

SVCD

Audio, Audio-CD (CD-DA)

AVI

Software

Von Freunden und Bekannten

Eigene Programme

Programmierung

Delphi

Lazarus

Delphi/Lazarus

Projekte

MPEG-1/2 Video

Optische Laufwerke

Audio-CD (CDDA)

Raspberry Pi Dashcam

Verschiedenes

MPEG 2 Schnitt

Project X

VCD Easy

Hardlinks

Windows

Links

Software

Projekte | Audio-CD - Id3-Tags - Version 1

Id3v2.3

  • Beschreibung
  • Versionen
  • ID3v2 Struktur
  • Header
  • Extended Header
  • Frames
  • Zeichenketten
  • Speicherort
  • Synchsafe Integer
  • Auswahl der Frames
  • Text Informations Frames
  • User Defined Text Information Frame (ab v2.3)
  • Attached picture
  • Beschreibung

    Wenn man eine Datenbank abfragt, könnte man die Informationen auch in der Datei speichern. Dafür bietet sich der informelle Standard ID3 an. Dieser Standard ist nicht Bestandteil des Standards für das MP3-Dateiformat, jedoch sehr verbreitet.

    Versionen

    Die Id-Tags liegen in verschiedenen Versionen vor, welche sich im Umfang unterscheiden. Es gibt die Versionen 1, 1.1, 2, 2.2, 2.3 und 2.4. Die Versionen bis 2.2 gelten als veraltet. Version 2.3 ist verbreitet, weshalb hier diese verwendet werden soll.

    ID3v2 Struktur

    10 ByteHeader
    xx ByteExtended Header (optional)
    xx ByteFrames

    Header

    ID3ID3v2 Identifier
    $03 00ID3v2 Version
    %abcd0000ID3v2 Flags
    4 * %0xxxxxxxID3v2 Size

    ID3v2 Identifier: Identifiziert einen IDv2-Tag.

    ID3v2 Version: Die erste Zahl gibt die Hauptversion, hier 3, und die zweite die Revision an.

    ID3v2 Flags: Die unteren vier Bit müssen den Wert "0" besitzen. Die anderen bedeuten:

    ID3v2 Size: Die Länge der ID3v2 Struktur ohne Header und Footer. Sie wird als 32bit Synchsafe Integer angegeben.

    Extended Header

    4 * %0xxxxxxxExtended Header Size
    $01Anzahl der Flagbytes
    $xxExtended Flags

    Extended Header Size: Die Länge des gesamten erweiterten Headers, welcher nie kürzer als sechs Byte ist. Sie sind als 32bit Synchsafe Integer angegeben.

    Extended Flags: Sie sind mit %0bcd0000 definiert. Die Daten werden in der Reihenfolge der Flags angegeben. Jeder Datenbereich beginnt mit einem Byte im Wertebereich von $00 (0) bis $7F (128), welches die Länge des Bereiches angibt. Enthält ein Bereich keine Daten wird der Wert $00 als Längenangabe benutzt. Die Flags bedeuten:

    In Version 2.3 sieht der Extended Header so aus:

    4 * %0xxxxxxxExtended Header Size
    $xx xxExtended Flags
    $xx xx xx xxSize of Padding

    Es gibt nur ein Extended Flags %x0000000 00000000, welches angibt, ob CRC-Daten vorhanden sind.

    Frames

    Ein Tag beinhaltet mindestens einen Frame, welcher mindestens ein Byte (ohne Header) groß ist. Eine festgelegte Reihenfolge für die Angabe der Frames gibt es nicht.

    Alle Frames enthalten einen Header sowie ein oder mehrere Felder mit den aktuellen Informationen. Der Header ist zehn Byte lang:

    Frame ID$xx xx xx xx (Vier Zeichen)
    Size4 * %0xxxxxxx
    Flags$xx xx

    Frame ID: Sie besteht aus den Großbuchstaben A bis Z und den Ziffern 0 bis 9. IDs, welche mit "X", "Y" oder "Z" beginnen sind für experimentelle Frames und können von jedem genutzt werden ohne dass das Experimentalflag (c) im Tag Header gesetzt werden muss.

    Size: Die Größe gibt die Datengröße des auf den Header folgenden Frames an. Die Angabe erfolgt als 32bit Synchsafe Integer

    Flags: Sie werden in zwei Bytes dargestellt und folgen dem Muster:

    %0abc0000 %0h00kmnp

    Das erste enthält Statusnachrichten und das zweite die Formatbeschreibung. Einige Formatflags geben an, dass das Frame zusätzliche Informationen enthält. Diese Informationen stehen zwischen dem Frameheader und den Framedaten in der gleichen Reihenfolge wie die Flags. Das bedeutet, der Größenangabe folgt das Byte mit der Verschlüsselungsmethode. Die Ergänzungen betreffem das Frame Size Feld, sind aber nicht Gegenstand der Verschlüsselung oder der Komprimierung.

    In Version 2.3 sind die Flags %abc00000 ijk0000. Die Entsprechungen der Flags sind: a = a, b = b, c = c, i = k, j = m und k = h.

    Voreinstellung für die Flags ist 0. Für die Frames AENC, ETCO, EQUA, MLLT, POSS, SYLT, SYTC, RVAD, TENC, TLEN und TSIZ ist das Flag b = 1.

    Zeichenketten

    Wenn nichts anderes angegeben ist, werden Zeichenketten, einschließlich numerischer und URLs, als ISO-8859-1 Zeichen im Bereich von $20 bis $FF dargestellt. Solche Zeichenketten werden in Framebeschreibungen als <text string> oder wenn Zeichenumbrüche erlaubt sind als <full text string> dargestellt. Wenn nichts anderes erwähnt wird, sind Zeilenumbrüche nicht erlaubt. Sind sie erlaubt, werden sie in der ISO-8859-1 nur mit $0A angegeben.

    Frames, welche verschiedene Typen der Textkodierung erlauben, enthalten ein Encoding Description Byte, also ein Byte mit der Kodierungsbeschreibung. Mögliche Kodierungen sind:

    Zeichenketten werden abhängig von der Kodierung in Framebeschreibungen als <text string according to encoding> oder wenn Zeilenumbrüche erlaubt sind als <full text string according to encoding> dargestellt. Alle leeren Zeichenketten vom Type $01, welche nullabgeschlossen sind besitzen einen Unicode BOM gefolgt von einer Unicode Null ($FF FE 00 00 oder $FE FF 00 00).

    Zeitangaben basieren auf einer Teilmenge der ISO 8601. Sie können sehr genau angegeben werden als "yyyy-MM-ddTHH:mm:ss" (year (Jahr), "-", month (Monat), "-", day (Tag), "T", hour (Stunde - 24), ":", minutes (Minuten), ":", seconds (Sekunden)), aber auch durch Entfernen von Indikatoren verkürzt werden. Gültige Zeitangaben sind yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddTHH, yyyy-MM-ddTHH:mm und yyyy-MM-ddTHH:mm:ss. Alle Zeitangaben erfolgen in UTC. Für Zeitspannen wird das Slash-Zeichen verwendet. Für mehrere nicht zusammenhängende Daten werden mehrere Zeichenketten verwendet, wenn dies die Framedefinition zuläßt.

    Das Feld Language mit drei Byte Länge, welches in mehreren Frames verwendet wird, gibt die Sprache gemäß ISO-639-2 für den Frameinhalt an. Die Angabe sollte in Kleinbuchstaben erfolgen. Ist die Sprache nicht bekannt sollte die Zeichenfolge "xxx" verwendet werden.

    Alle URL werden relativ angegeben.

    Speicherort

    Tags werden den Audiodaten bis Version 2.3 der Audiodatei vorangestellt.

    Synchsafe Integer

    In einigen Teilen des Tags ist es unpraktisch, das Unsychronisation Schema anzuverwenden. Besonders problematisch sind dabei Größenangaben. Die Lösung ist die Verwendung von ID3v2 Synchsafe Integer. Synchsafe Integer sind ganze Zahlen, deren höchstes Bit (Bit 7) immer den Wert Null behält, so dass nur sieben von acht Bits zur Verfügung stehen. Ein 32-Bit Synchsafe Integer enthält so 28 Bit Informationen.

    Beispiel:

    255 (%11111111) hat als 16bit Synchsafe Integer den Wert 383 (%00000001 01111111).

    Auswahl der Frames

    Bei der Abfrage der Eigenschaften wurden im Beispiel folgende Informationen ermittelt:

    Man kann natürlich noch weitere Informationen aus der MusicBrainz-XML-Datei extrahieren.

    Für Zuordnung für der ermittelten Eigenschaften zu dem Frames stellt MusicBrainz eine Mapping Tabelle zur Verfügung.

    NameMusicBrainz NameID3v2 Frame
    MusicBrainz Disc IdMusicBrainz Disc IdTXXX:MusicBrainz Disc Id
    CD TitelRelease TitleTALB
    MusicBrainz Release IDMusicBrainz Release IDTXXX:MusicBrainz Album Id
    CD KünstlerRelease ArtistTPE2
    MusicBrainz Künstler IDMusicBrainz Artist IDTXXX:MusicBrainz Artist Id
    ErscheinungsdatumRelease DateTYER + TDAT
    Tracknummer / TrackanzahlTrack Number / Total TracksTRCK
    Track TitelTrack TitleTIT2
    Track KünstlerArtistTPE1
    EANBarcodeTXXX:BARCODE
    ASINASINTXXX:ASIN

    Für FreeDB kämen hinzu:

    NameID3v2 Frame
    FreeDB Disc IdTXXX:FreeDB Disc Id
    KategorieTCON
    GenreTCON

    Die Framebezeichnungen beginnen alle mit "T", das bedeutet, es sind Text Informations Frames.

    Text Informations Frames

    Die Textinformationsframes sind die wichtigsten Frames, sie enthalten Informationen wie Interpret, Album usw. Alle IDs beginnen mit "T". Die Frames haben das Format:

    <Header for 'Text information frame', ID: "T000" - "TZZZ" ausser "TXXX">
    Text encoding $00
    Information <text string according to encoding>
    

    Zum Beispiel:

    TALB
    Album/Movie/Show - Titel der Aufnahme
    TCON
    Content type - Der Inhaltstyp als numerische Zeichenkette. Kann mehrere Genres, welche in Klammern - "(", ")" - gesetzt sind enthalten. Verfeinerungen können mit doppelten Klammern - "((", "))" - angegeben werden. Ausserdem gibt es die Typen RX - Remix und CR - Cover
    TDAT
    Date - Das Datum besteht aus einer numerischen Zeichenkette im Format DDMM mit dem Datum der Aufnahme und ist vier Zeichen lang.
    TIME
    Time - Die Zeit besteht aus einer numerischen Zeichenkette im Format HHMM mit der Zeit der Aufnahme und ist vier Zeichen lang.
    TIT2
    Title/songname/content description - Der Name des Stückes (z.B. "Adagio").
    TPE1
    Lead performer(s)/Soloist(s) - Der Künstler, der Interpret, der Solist oder die Gruppe werden als Hauptkünstler verwendet. Sie werden durch "/" getrennt.
    TPE2
    Band/orchestra/accompaniment - Die Band, das Orchester oder die Begleitung als zusätzliche Information über die Interpreten der Aufnahme.
    TRCK
    Track number/Position in set - Die numerische Zeichenkette enthält die Ordnungsnummer der Audiodatei in der Originalaufnahme. Diese kann durch Hinzufügen des Trennzeichens "/" mit der Gesamtanzahl der Tracks der Originalaufnahme erweitert werden. Z.B. "4/9".
    TYER
    Year - Enthält als numerischer Zeichenkette das Jahr der Aufnahme. Der Frame ist immer vier Byte lang.

    User Defined Text Information Frame (ab v2.3)

    Der Frame enthält eine Beschreibung der Zeichenkette sowie die Zeichenkette. Der Tag kann mehrere Frames enthalten, jedoch nicht mit dem selben Inhalt. Das Format:

    <Header for 'User defined text information frame', ID: "TXXX">
    Text encoding $xx
    Description <text string according to encoding> $00 (00)
    Value <text string according to encoding>
    

    Interessant wären zum Beispiel:

    TENC
    Encoded by - Der Frame enthält den Namen der Person oder der Organisation, welche die Audiodatei kodiert hat. Das Feld kann eine Copyright-Meldung enthalten, wenn die Audiodatei durch den Encoder geschützt wird.
    TFLT
    File type - Der Frame gibt den Type der Audiodatei an:
    • MPG - MPEG Audio
      • /1 - MPEG 1/2 Layer I
      • /2 - MPEG 1/2 Layer II
      • /3 - MPEG 1/2 Layer III
      • /2.5 - MPEG 2.5
      • /AAC - Advanced Audio Compression
    • VQF - Transform-domain Weighted Interleave Vector Quantization
    • PCM - Pulse Code Modulated audio
    Er kann auch für andere Typen genutzt werden. Die Verwendung erfolgt in ähnlicher Weise wie im Frame TMED, jedoch ohne Klammern. Ist der Frame nicht vorhanden, wird der Type MPG angenommen.
    TLAN
    Language(s) - Der Sprachenframe sollte die Sprache des Textes bzw. der Texte angeben, in welche gesprochen oder gesungen wird. Die Darstellung erfolgt mit drei Zeichen nach ISO-639-2. Werden mehrere Sprachen verwendet, sollte eine Angabe entsprechend der Nutzung erfolgen.
    TLEN
    Length - Der Frame enthält die Spieldauer der Datei in Millisekunden und wird als numerische Zeichenfolge dargestellt.
    TMED
    Media type - Der Mediatyp gibt an, woraus die Audiodatei entstand. Dies kann ein Text oder ein Verweis entsprechend vordefinierter Medientypen sein. Referenzen werden in Klammern - "(" und ")" - gesetzt und können mit einer Verfeinerung ergänzt werden, z.B. (MC) mit vier Kanälen. Beginnt ein Text mit einer Verfeinerung sollte diese in eine doppelte Klammer - "((" und "))" - gesetzt werden. Vordefinierte Verfeinerungen werden dem Medientyp angehängt, z.B. (CD / A).
    • CD - Compact Disc
      • /A Analoge Übertragung vom Medium
      • /DD - DDD
      • /AD - ADD
      • /AA - AAD
    • ...

    Attached picture

    Dieser Frame enthält ein Bild welches im Zusammenhang mit dem Song steht. Das Bildformat ist der MIME- und der Picturetype des Bildes. Wenn Interoperabilität gewünscht wird, sollte das Bildformat "image/png" oder "image/jpeg" verwendet werden. Die Beschreibung ist eine kurze Beschreibung des Bildes, sie darf 64 Zeichen lang sein, kann aber auch leer sein. Es können mehrere Bilder, jeweils in einem eigenen Frame, angehängt werden. Jedoch nur jeweils eines mit der gleichen Inhaltsbeschreibung. Es besteht die Möglichkeit, einen Link zu der Bilddatei mit dem MIME-Typ "->" zu setzen und eine vollständige URL anstelle von Bilddaten einzutragen. Die Verwendung von verknüpften Dateien sollte jedoch sparsam verwendet werden, da das Risiko einer Trennung der Dateien besteht.

    <Header for 'Attached picture', ID: "APIC">
    Text encoding   $xx
    MIME type       <text string> $00
    Picture type    $xx
    Description     <text string according to encoding> $00 (00)
    Picture data    <binary data>
    

    Picturetypen:

    Id3v1 > Id3v2.3 > Id-Tags