Metadaten bei Audiofiles mit der Erweiterung FLAC

Alle wichtigen Informationen zum verlustfreien FLAC-Format findet man bei: https://xiph.org/flac/index.html

Am Anfang der FLAC-Datei steht die Kennnung "fLaC" und dann folgen eventuell Metadatenblöcke zur Beschreibung des Dateiinhaltes.
Welche Blöcke (oder ob überhaupt ein Block) verwendet werden ist nicht vorgeschrieben; die Reihenfolge ist dann auch beliebig

Der allgemeine Aufbau eines Metadatenblocks:

METADATA_BLOCK
        HEADER
        BLOCK_DATA
            mögliche Arten für BLOCK_DATA:
                STREAMINFO
                PADDING
                APPLICATION
                SEEKTABLE
                VORBIS_COMMENT
                CUESHEET
                PICTURE



Die ersten 4 Bytes eines FLAC-Files sind immer gleich!     102  076  097  067  ... die Codes für "fLaC"

Danach folgen ggf. Metadatenblöcke - in beliebiger Reihenfolge.
Jeder Block besitzt am Anfang einen 4 Bytes großen Header (Aufbau s.u.)

Beispiel aus einem FLAC-File:
Adresse     Bytes
    000     102 076 097 067 000 000 000 034 016 000 ... 34 Bytes für den Inhalt von Block 1
    010     016 000 000 000 014 000 029 007 010 196
    020     066 240 000 109 140 216 146 175 002 137
    030     189 140 244 218 061 178 151 168 152 117
    040     159 025 003 000 001 050 000 000 000 000 ... 1·256 + 50 Bytes für den Inhalt von Block 2
    050     000 000 000 000 000 000 000 000 000 000
    060     000 000 016 000 000 000 000 000 000 006
    070     176 000 000 000 000 000 000 007 218 218
    080     016 000 000 000 000 000 000 013 112 000
    090     000 000 000 000 000 016 081 029 016 000
    100     000 000 000 000 000 020 048 000 000 000
    110     000 000 000 024 254 124 016 000 000 000
    ...
    ...
    340     240 000 000 000 000 000 000 138 127 034
    350     016 000 132 000 001 167 032 000 000 000
    360     114 101 102 101 114 101 110 099 101 032
    370     108 105 098 070 076 065 067 032 049 046


Jede Blockart hat ihren eigenen Aufbau!
Für allgemeine Informationen zur FLAC-Datei verwende ich hier nur die Blockarten STREAMINFO und VORBIS_COMMENT.

Aufbau eines Blockheaders

Jeder Block-Header besteht aus 4 Bytes ( A B C D ), wobei das erste Byte A die Information zu der Blockart enthält und das höherwertigste Bit die Information enthält, ob es weitere Metadatenblöcke (Bit = 0) gibt oder nicht (Bit = 1). Die 7 niederwertigen Bits ergeben zusammen eine Zahl von 0 bis 127 und kennzeichnen die Art des Blockes:

0 : STREAMINFO
1 : PADDING
2 : APPLICATION
3 : SEEKTABLE
4 : VORBIS_COMMENT
5 : CUESHEET
6 : PICTURE
7-126 : reserved
127 : nicht erlaubt

In obigem Beispiel hat das erste Byte (A) des ersten Blockes den Wert 0. Das heißt, dass das höherwertigste Bit den Wert 0 besitzt und damit mind. ein weiterer Block nachfolgt. Die restichen Bits sind ebenfalls alle 0, d.h. die Zahl aus Bit6 bis Bit0 ist 0 und damit handelt es sich einen Metadatenblock der Art STREAMINFO.

In obigem Beispiel hat das erste Byte (A) des 2. Blockes den Wert 3. Das heißt, dass das höherwertigste Bit7 den Wert 0 besitzt und damit mind. ein weiterer Block nachfolgt. Die restichen Bits (.000 0011) ergeben 3 und damit handelt es sich einen Metadatenblock der Art SEEKTABLE. Dieser Block ist 306 Zeichen lang.

Die 3 folgenden Bytes eines Blockheaders bestimmen die Inhaltgröße des Blocks in Bytes:
          G = B·256*256 + C·256 + D.
Die Anfangsadresse des nächsten Blocks ist also:     Anfangsadresse des aktuellen Blocks + 4 (Header) + G

Hangeln wir uns durch das obige Beispiel hindurch:
fLaC ... 4 Bytes: Byte 0 bis Byte 3 je einschl.

Block 1: Start bei Byte 4 --> STREAMINFO; es folgt ein Block
          G = 34 --> nächster Block startet bei 4 + 4 + 34 = 42

Block 2: Start bei Byte 42 --> SEEKTABLE; es folgt ein Block
          G = 306 --> nächster Block startet bei 42 + 4 + 306 = 352

Block 3: Start bei Byte 352 --> aus 132 = dual 1000 0100 folgt --> 1: KEIN weiterer Block; dual .000 0100 = dez. 4 --> Typ: VORBIS_COMMENT
          G = 0·256*256 + 1·256 + 167 = 423



Nun zu den beiden (für uns wichtigen) Metadaten-Blockarten:

            STREAMINFO

            VORBIS_COMMENT


zurück zur Startseite