ID3 Header
0x494433
in den ersten 3 Bytes steht.
Diese Bytes zeigen uns auch gleich den Start der ID3 Tags, welche z.B. den Interpreten und das Bild einer MP3 enthalten.
Die Länge der ID3 Tags wird als ein Syncsafe 32 Bit Integer, bei dem jedes 7te bit gelöscht wird, angegeben.
In unserem Fall ist der Ausgangswert 0x4812(hex) = 18450(dez) = 0100 1000 0001 0010(bin)
.
Nun löschen wir jedes siebente Bit (rechts nach links) und wir erhalten den Binärwert 100 1000 001 0010 = 9234(dez)
.
Dieser entspricht der ID3 Tags Länge ab dem Ende des Headers.
Vorher 0x4812(hex) = 0100 1000 0001 0010(bin) = 18450(dec)
.
Danach 0x2412(hex) = 100 1000 001 0010(bin) = 9234(dec)
.
ID3 Frames
Die Frames der ID3 Tags enthalten nun die gesuchten Informationen.
Jedes Frame besitzt einen Header, welcher den Typ, die Länge und diverse Flags des Frames beinhaltet.
Der Typ ist immer ein vier Bytes langer String und die Länge wird als 32 Bit Integer angegeben.
Bei den Flags haben wir zwar 2 Bytes zur verfügung, von denen aber jeweils nur die ersten 3 Bits genutzt werden.
Jedes Frame der ID3 Tags, welches einen Text darstellen möchte hat beim Typ als ersten Buchstaben ein T
.
An dieser Stelle werde ich nur auf das Text Frame für das Album (TALB) und auf das Frame für das angehangene Bild weiter eingehen.
Wer weitere Informationen zu den Frames oder über die ID3 Tags allgemein haben will, der sollte auf id3.org
- Frame Header (10 Bytes)
- 54 41 4C 42 4 bytes Der Name des Frames. Hier "TALB"
- 00 00 00 0F 4 bytes Die Länge des Frameinhaltes. Hier 15
- 0 3 bits Flags des Frames
- 0 7 bits Werden nicht benutzt
- 0 3 bits Flags des Frames
- 0 7 bits Werden nicht benutzt
- Frame Content (15 bytes)
- 03 1 byte Text Encoding
- Der Inhalt (Framelänge - 1 Byte da das Encodingbyte zum Inhalt des Frames gehört)
- 53 74 61 67 65 54 77 6F 20 41 6C 62 75 6D StageTwo Album
Alle Frames der ID3 Tags haben den gleichen Aufbau des Headers aber der Inhalt ist von Frametyp zu Frametyp unterschiedlich.
Das APIC Frame, welches das Bild einer MP3 enthält, besitzt zusätzlich den Mimetyp, die Beschreibung und den Bytestream des Bildes.
In den ID3 Tags werden die Zeichenketten, sofern keine Längenangabe voran steht, mit einem 0x00 Byte terminiert.
Der Bytestream kann meines Wissens nach jedes gängige Bildformat beinhalten, wobei aber auf der Webseite der ID3 Tags die Formate jpeg und png bevorzugt werden.
Welchen Bildtyp man am Ende vor sich hat, kann man anhand des Mimetypen oder des Headers im Bytestreams erkennen.
- Header (28 Bytes)
- 41 50 49 43 4 bytes Der Name des Frames. Hier "APIC"
- 00 00 46 1D 4 bytes Die Länge des Frameinhaltes. Hier 17949
- 0 1 bit
- 0 1 bit
- 0 1 bit
- 0 7 bits Werden nicht benutzt
- 0 1 bit
- 0 1 bit
- 0 1 bit
- 0 7 bits Werden nicht benutzt
- Content
- 03 1 byte Text Encoding
- 69 6D 61 67 65 2F 6A 70 65 67 n bytes Der Mimetyp des Bildes
- 00 1 byte Der Mimetyp String wird durch 0x00 terminiert also beendet
- 00 1 byte Der Bildtyp
- 73 74 61 67 65 74 77 6F 2D 6C 6F 67 6F 2E 6A 70 67 n bytes Die Beschreibung des Bildes
- 00 1 byte Die Beschreibung wird durch 0x00 terminiert also beendet
- Hier beginnt der Bytestream des Bildes. 0xFF 0xD8 Ist der Indikator für den Start eines jpeg Bildes.
- FF D8 FF E0 00 10 4A 46 49 46 00 01 02 00 00 01 00 01 00 00
- FF FE 00 04 2A 00 FF E2 02 1C 49 43 43 5F 50 52 4F 46 49 4C
- 45 00 01 01 00 00 02 0C 6C 63 6D 73 02 10 00 00 6D 6E ...
Ich hoffe, das Ihr hier hilfreiche Informationen über die ID3 Tags finden konntet und sie euch weiter helfen
Sollte ich einen Fehler in dem Artikel gemacht haben, ihr Fragen oder Wünsche habt, schreibt mich einfach an
Zum Abschluss gibt es hier noch meine Testdatei.
Kommentare