Das WAV Format

Das WAV-Format (eigentlich RIFF WAVE) hält sich an das von Microsoft für das Betriebssystem Windows definierte "Resource Interchange Format" (RIFF).

Das RIFF-Format ist eine Abwandlung des IFF-Formats. Natürlich wurde der Standard nicht befolgt, sondern abgeändert. Anders als bei IFF werden die Daten im "Little Endian" Format der Intel-Prozessoren gespeichert.

Die Aufteilung in Chunks und deren Format entspricht jedoch dem IFF-Format und ist damit identisch zum AIFF (-C) Format.

Der oberste Chunk jeder RIFF-Datei (der Chunk, der die ganze Datei umfaßt) trägt immer die Kennung "RIFF" und die ersten 4 Bytes des Datenbereichs geben den Typ der Datei an. WAV-Dateien tragen die Kennung "WAVE".

Es sind die folgenden Chunks definiert:

Chunk-ID Name Beschreibung
FMT Format-Chunk Die Parameter der Audio-Daten (Samplerate etc.)
FACT Fact-Chunk Angaben zum Aufzeichnungsformat, falls nicht PCM benutzt wird.
DATA Data-Chunk Die Audio-Daten, falls das (unkomprimierte) PCM-Aufzeichnugsformat benutzt wird.
CUE CuePoint-Chunk Eine Liste von Markierungen
PLST PlayList-Chunk Eine Reihenfolge, wie die Markierungen abzuspielen sind.
ADTL AssocDataList-Chunk Eine Liste Anwendungsspezifischer Daten.

Im allgemeinen wird jedoch von einer WAV-Datei erwartet, daß sie unkommentierte Daten im PCM-Format (Microsoft Pulse Code Modulation) enthält. In den meisten WAV-Dateien bleiben also nur die FMT und DATA Chunks übrig.

Der FMT-Chunk

Die möglichen Werte, die der Format-Chunk annehmen kann, geben Auskunft über die Flexibilität des WAV-Formats. Pro WAV Datei muß es genau einen FMT-Chunk geben. Hier sind folgende Angaben gespeichert:

Name Beschreibung
Format-Typ 1: Unkomprimiert (PCM), > 1: Komprimiert
Kanalzahl Theoretisch beliebig viele
Sample-Rate In Samples pro Sekunde (Hertz)
Byte-Rate In Bytes pro Sekunde (hilft bei der Bemessung des Audio-Puffers beim Abspielen)
Bytes pro Sample Die Größe eines Samples (die Summe aller Kanäle)
Bits pro Kanal 1 bis 32 Bit
Es folgen Komprimierungs-spezifische Angaben (Nur für Format-Typ > 1)
Länge Länge der Kompr.-spez. Daten in Bytes
Daten Kompr.-spez. Daten anhänging vom Komprimierungsverfahren

Der FACT-Chunk

Der FACT-Chunk muß existieren wenn als Datenformat nicht PCM benutzt wird, also für alle komprimierten Formate.

Derzeit enthält der FACT-Chunk genau ein Feld:

Name Beschreibung
Länge Länge der unkomprimierten Daten

Der DATA-Chunk

Wie üblich werden die einzelnen Kanäle eines Samples zusammen gespeichert, um direkt von der Festplatte spielen zu können. Ein "Sample Frame" bezeichnet alle Kanäle eines Samples, ein "Sample Point" einen einzelnen Kanal.

Die Größe eines "Sample Point" ist immer ein vielfaches von 8 Bit. Das heißt ein Sample Point ist bei 9 Bit pro Kanal genau so 16 Bit (2 Byte) groß wie ein Sample Point bei 16 Bit pro Kanal. Die "leeren" Bits werden hinten angefügt, also sind die Daten in einem Sample Point immer linksbündig angeordnet.

Die Werte eines Sample Point sind bei 1 bis 8 Bit pro Kanal als vorzeichenlose ganze Zahl gespeichert wohingegen sie bei 9 bis 32 Bit als vorzeichenbehaftete Zahl im Zweierkomplement vorliegen.

Bei mehr als einem Kanal pro Sample wird folgende Anordnung der Kanäle innerhalb eines Sample Frame empfohlen:

Anzahl Kanäle 123456
Stereo linksrechts
3 Kanal linksrechtsmitte
Quardophon vorne
links
vorne
rechts
hinten
links
hinten
rechts
4 Kanal linksmitterechtssurround
6 Kanal mitte
links
linksmitte mitte
rechts
rechtssurround

Weder zwischen Sample Points noch zwischen Sample Frames befinden sich irgendwelche Lücken. Es gibt also kein "Padding", auch wenn ein Sample Point oder Frame eine ungerade Anzahl Byles lang sind.

Der CUE-Chunk

In einer WAV-Datei kann es maximal einen CUE-Chunk geben. In ihm können beliebig viele Sprungmarken und Loops definiert werden. Ein CUE-Chunk ist wie folgt aufgebaut:

Name Beschreibung
Anzahl Anzahl der folgenden Cue Points
Points Die Tabelle der Cue Points

Wobei "Points" einfach "Anzahl" Cue Point Strukturen hintereinander sind. Ein einzelner Cue Point hat folgenden Aufbau:

Name Beschreibung
Identifier Ein eindeutiger Bezeichner zum späteren Zugriff
Position Position innerhalb der Playlist (s.u.)
Chunk ID Art des Daten-Chunks (*)
Chunk Start Start des Daten-Chunks (*)
Block Start Start des Daten-Blocks innerhalb des Chunks (*)
Sample Offset Sample Offset des Cue-Point in Sample Points

(*) Diese Felder sind nur dann relevant, falls das WAV-File keinen Data-Chunk, sondern einen WaveList-Chunk enthalten. WaveList-Chunks sind eine esoterische Erweiterung des WAV-Formats bei der meherere WAV-Files innerhalb eines WAV-Files enthalten sind. WaveList-Chunks sollten nicht verwendet werden, da sie eine unnötige und komplizierte "Erweiterung um der Erweiterung Willen" darstellen.

Daraus läßt sich ablesen, daß ein CUE-Chunk nur gemeinsam mit einem PLST-Chunk Sinn ergibt, da im CUE-Chunk nur die Sprungmarken und Loops definiert sind, jedoch nicht die Art und Weise wie diese abgespielt werden sollen.

Der PLST-Chunk

Ein PLST-Chunk enthält "Segmente" welche auf CUE-Points aus dem CUE-Chunk verweisen:

Name Beschreibung
Anzahl Anzahl der folgenden Segmente
Segmente Die Tabelle der Segmente

Wie bei den CUE-Points sind hier "Segmente" einfach "Anzahl" Segment Strukturen hintereinander. Ein einzelnes Segment hat folgenden Aufbau:

Name Beschreibung
Identifier Ein existierender CUE-Point Identifier
Länge Länge des Segments in Sample Points
Wiederholungen Wie oft das Segment geloopt werden soll

Der ADTL-Chunk

Ein Associated Data List Chunk enthält Texte zu CUE-Points und Segmenten. Texte können Labels und Kommentare sein. Ein ADTL-Chunk ist ein sogenannter LIST-Chunk. Ein LIST-Chunk ist eine Sammlung von "Sub-Chunks". Die ID eines ADTL-Chunks ist also eigentlich "LIST". Das erste Datenfeld nach dem üblichen Chunk-Header ist die Art der Liste, also in diesem Falle "ADTL", anschließend folgen die Sub-Chunks.

Eine ADTL-Liste kann "Label" (LABL), "Note" (NOTE) und "Labeled Text" (LTXT) Sub-Chunks enthalten:

Der LABL-Chunk:

Name Beschreibung
Identifier Ein existierender CUE-Point Identifier
Text Name / Etikett des CUE-Point

Der NOTE-Chunk:

Name Beschreibung
Identifier Ein existierender CUE-Point Identifier
Text Zusätzlicher Kommentar zum CUE-Point

Der LTXT-Chunk:

Name Beschreibung
Identifier Ein existierender CUE-Point Identifier
Länge Anzahl Sample-Points für die der Text gilt
Zweck Zweck des Texts (*)
Land Lokalisierung
Sprache Lokalisierung
Dialekt Lokalisierung
Code Page Lokalisierung
Text Der eigentliche Text

(*) Dieses Feld macht für WAV-Dateien keinen Sinn (ADTL Chunks werden auch für andere Dateiformate benutzt und enthalten daher generische Felder die nicht in jedem spezifischen Format sinnvoll sind).