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 | 1 | 2 | 3 | 4 | 5 | 6 |
Stereo | links | rechts | ||||
3 Kanal | links | rechts | mitte | |||
Quardophon | vorne links | vorne rechts |
hinten links | hinten rechts |
||
4 Kanal | links | mitte | rechts | surround | ||
6 Kanal | mitte links | links | mitte | mitte rechts | rechts | surround |
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).