- Wav
-
Waveform Dateiendung .wav
MIME-Type audio/wav
audio/wave
audio/x-wavEntwickelt von Microsoft & IBM Art Audiodatei Erweitert von RIFF Das WAVE-Dateiformat ist ein Containerformat zur digitalen Speicherung von Audiodaten, das auf dem Resource Interchange File Format (RIFF) aufsetzt, das von Microsoft für das Betriebssystem Windows definiert wurde.
Enthalten sind meist sog. PCM-Rohdaten, die Abtastwerte des Audiosignals unkomprimiert digital darstellen, oder komprimierte Audiodaten, z. B. ADPCM oder MP3. Im Falle von PCM unterstützt es verschiedene Quantisierungsauflösungen, Abtastraten und Kanalzahlen. Es stellt heute einen De-facto-Standard für die Speicherung von Audiodaten unter Windows dar.
Inhaltsverzeichnis
Einleitung
Audiodateien enthalten die digitalisierte Form eines akustischen Signals, also eine zeit- und wertdiskrete Darstellung des zeitlichen Verlaufs einer Schwingung. Bei der Analog-Digital-Umsetzung wird zu bestimmten Zeitpunkten die Auslenkung (Elongation) einer Schwingung festgehalten.
Die Qualität des aufgezeichneten Klangs hängt vor allem von zwei Werten ab:
- Abtastrate (Anzahl der Abtastungen pro Zeiteinheit),
- Quantisierungsrate (auch „Bittiefe“ genannt).
Samples & Frames
„Sample“ ist die englische Bezeichnung für einen charakterisierenden Teil einer Gesamtheit. Hier geht es um einzelne Abtastwerte, die durch Analog-Digital-Wandlung ermittelt werden. Bei Multikanaldaten gibt es pro Zeitpunkt mehrere „Sample Points“, die zu einem „Sample Frame“ zusammengefasst sind, zuerst Kanal 0 (mono oder linker Stereokanal), dann Kanal 1 usw.
Dateistruktur
Das RIFF-Format besteht aus Datenpaketen (Chunks), die wie beim IFF aufgebaut sind, bis auf die Byte-Reihenfolge: niederwertiges Byte (LSB) voran. Die WAVE-Spezifikation definiert drei Chunks als verpflichtend: Der RIFF-Chunk identifiziert die Datei als .wav-Datei und enthält als Container die anderen Chunks. Der FORMAT-Chunk enthält Parameter wie z. B. die Abtastrate. Der DATA-Chunk enthält den Signalverlauf.
Im Laufe der unkoordinierten Entwicklung kam es zu einer unüberschaubaren Anzahl weiterer Chunk-Typen mit teils redundanten Inhalten. Ein Beispiel ist der Label-Chunk und Note-Chunk, die beide Cuepoint-Einträge im Cue-Chunk mit einer Beschriftung versehen. Dabei bezeichnet ein „Label“ den Titel eines Cuepoints, „Note“ einen Kommentar. Sie sind als Sub-Chunks im übergeordneten Associated-Data-List-Chunk gespeichert. Des weiteren gibt es eine Vielzahl von komprimierten Formaten, für die ein Fact-Chunk mit der dekomprimierten Größe verbindlich ist, die aber ansonsten unterschiedlichste Parameter definieren, was eine vollständige Unterstützung des WAV-Formats für Entwickler noch schwieriger macht.
RIFF-Chunk (auch „RIFF WAVE“-Chunk)
Er enthält als Container die anderen Chunks, sein Header besteht lediglich aus
chunkID
(Char[4]
, "RIFF")ChunkSize
(unsigned long
, = Dateilänge in Bytes - 8)riffType
(Char[4]
, "WAVE")
Format-ChunkEr beginnt mit der Kennung "fmt " und muss in der Datei genau einmal enthalten sein und zwar als erster Sub-Chunk. Auf seine
ChunkSize
folgt der Inhalt, der aus einem Satz allgemeiner Parameter und einem nachfolgenden formatspezifischen Teil besteht. Der allgemeine Teil:wFormatTag
(0x0001 steht für PCM, das kanonische, unkomprimierte Format)wChannels
(unsigned short
, 1 für Mono, 2 für Stereo, mehr ist möglich)dwSamplesPerSec
(unsigned long
, Abtastrate in Hz)dwAvgBytesPerSec
(unsigned long
, nötige Übertragungsbandbreite)wBlockAlign
(unsigned short
, Größe der Frames in Bytes)
Für PCM-Daten hat der Format-Chunk nur noch dieses eine Feld:
wBitsPerSample
(unsigned short
, Quantisierungsauflösung, identisch für alle Kanäle)
Wird keine Kompression verwendet, ist
dwAvgBytesPerSec
das Produkt aus Abtastrate und Framegröße. Die Framegröße ergibt sich aus der Vorgabe, dass alle Werte im Daten-Chunk als Integer zu kodieren sind mit einer gerade ausreichenden Größe in Byte (evtl nötige Pad-Bits stehen am niederwertigen Ende mit dem Wert 0). Für das PCM-Format gilt-
wBlockAlign = wChannels * ((wBitsPerSample + 7) / 8)
(Integer-Division ohne Rest),
sodass die Framegröße für 12-Bit-Stereo nicht drei sondern vier Byte beträgt.
Data-Chunk
Er hat die Kennung "data". Seine
chunkSize
enthält (wie bei allen Chunks) weder die 8 Bytes von Kennung und Größe noch das am Ende zur vorgeschriebenen Ausrichtung auf Wortgrenzen evtl. nötige Null-Byte. Sein Inhalt ist eine Folge von Frames, deren Aufbau im Folgenden lediglich für das PCM-Format angegeben wird.Sample-Werte sind für Bittiefen bis 8 als
unsigned char
kodiert, sonstsigned int
. Bei Bit-Tiefen, die nicht durch 8 teilbar sind, wird das erste Byte (LSB) rechts mit Nullen aufgefüllt (Zero-Padding). Das ergibt beispielsweise für den größten positiven 12-Bit-Wert die Bytefolge „0xF0 0x7F“. Bei zwei Kanälen (Stereo) wird erst der linke, dann der rechte Kanal gespeichert.Dieses Format, ohne Header gespeichert, hat üblicherweise die Endung *.raw und setzt bei der Wiedergabe die Kenntnis von Abtastrate, Bittiefe und Byte-Reihenfolge voraus (letztere ist nur unter RIFF festgelegt, nicht für rohes PCM).
Berechnung der Größe einer Audiodatei im Datenformat PCM
Pro Sekunde fallen Abtastrate · Bytes pro Sample · Anzahl der Kanäle (mono = 1, stereo = 2) an Bytes an.
Beispiel: 5 Minuten = 300 Sekunden, CD-Qualität (16 Bit = 2 Byte, 44.100 Hertz, stereo)
Beispiel eines allgemein lesbaren WAVE-Dateiformates
- übernommen von http://www.lightlink.com/tjweber/StripWav/Canon.html
RIFF-Header:
Offset Länge (in bytes) Inhalt 0 4 'RIFF' 4 4 <Dateigröße - 8> 8 4 'WAVE' Der fmt-chunk beschreibt das Sample-Format:
Offset Länge (in bytes) Inhalt Beschreibung 12 4 'fmt ' Header Signatur 16 4 <fmt length> Länge des restlichen fmt-Headers (16 Byte) 20 2 <format tag> sample Datenformat (siehe separate Tabelle weiter unten) 22 2 <channels> Anzahl der Kanäle: 1 = mono, 2 = stereo; Mittlerweile sind auch mehr als 2 Kanäle, für surround sound, möglich. ergänzt von [1] 24 4 <sample rate> Abtastrate pro Sekunde (z.B. 44100) 28 4 <bytes/second> Sample-Rate * Block-Align 32 2 <block align> Kanäle * bits/sample / 8 34 2 <bits/sample> 8, 16 oder 24 Der Daten-Chunk enthält die Sample-Daten:
Offset Länge (in bytes) Inhalt Beschreibung 36 4 'data' Header Signatur 40 4 <length> Länge des Datenblocks 44 <bits/sample>/8 Sample Data Sample Datenformate (Format Tag)
ID Bezeichnung 0x0001 PCM 0x0002 MS ADPCM 0x0003 IEEE FLOAT 0x0005 IBM CVSD 0x0006 ALAW 0x0007 MULAW 0x0010 OKI ADPCM 0x0011 DVI/IMA ADPCM 0x0012 MEDIASPACE ADPCM 0x0013 SIERRA ADPCM 0x0014 G723 ADPCM 0x0015 DIGISTD 0x0016 DIGIFIX 0x0017 DIALOGIC OKI ADPCM 0x0020 YAMAHA ADPCM 0x0021 SONARC 0x0022 DSPGROUP TRUESPEECH 0x0023 ECHOSC1 0x0024 AUDIOFILE AF36 0x0025 APTX 0x0026 AUDIOFILE AF10 0x0030 DOLBY AC2 0x0031 GSM610 0x0033 ANTEX ADPCME 0x0034 CONTROL RES VQLPC 0x0035 CONTROL RES VQLPC 0x0036 DIGIADPCM 0x0037 CONTROL RES CR10 0x0038 NMS VBXADPCM 0x0039 CS IMAADPCM (Roland RDAC) 0x0040 G721 ADPCM 0x0050 MPEG-1 Layer I, II 0x0055 MPEG-1 Layer III (MP3) 0x0069 Xbox ADPCM 0x0200 CREATIVE ADPCM 0x0202 CREATIVE FASTSPEECH8 0x0203 CREATIVE FASTSPEECH10 0x0300 FM TOWNS SND 0x1000 OLIGSM 0x1001 OLIADPCM 0x1002 OLICELP 0x1003 OLISBC 0x1004 OLIOPR Literatur
- Born, Günter, Referenzhandbuch Dateiformate. 1990, Addison Wesley Longman, in diversen überarbeiteten Auflagen
- Born, Gunter: File Formats Handbook. 1995, ITP Boston
Weblinks
- http://www.it.fht-esslingen.de/~schmidt/vorlesungen/mm/seminar/ss00/HTML/node107.html (ausführliche Beschreibung)
- http://www.piclist.com/techref/io/serial/midi/wave.html (ausführlicher, engl.)
- http://www.saettler.com/RIFFMCI/riffmci.html (Version 1.0 der Spezifikation, engl.)
- http://www.fh-friedberg.de/fachbereiche/e2/telekom-labor/zinke/nw/vp/doku/dito41.htm (knapp, übersichtlich)
- The WAVE File Format von tjw
- ausführliche Beschreibungen vieler Dateiformate
- WAVE PCM soundfile format
Wikimedia Foundation.