Privacy Policy Cookie Policy Terms and Conditions WAV (Format) - Wikipedia

WAV (Format)

aus Wikipedia, der freien Enzyklopädie

Das WAV-Dateiformat ist ein Containerformat zur digitalen Speicherung von Audiodaten, das neben den meist enthaltenen unkomprimierten sog. PCM-Rohdaten (eigentlich nur Bytes, die den digitalen Wert des Audiosignals darstellen) auch komprimierte Audiodaten (z. B. ADPCM- oder auch MP3-komprimierte Signale) enthalten kann. Im Falle von PCM unterstützt es variable Quantisierungsbitraten, Abtastraten und Kanäle. Es stellt heute einen De-Facto-Standard für die Speicherung von digitalen Audiodaten auf MS Windows-basierten PC-Systemen dar.

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

Inhaltsverzeichnis

[Bearbeiten] Einleitung

Audiodateien enthalten die digitalisierte Form eines akustischen Signals, also eine diskrete Darstellung des zeitlichen Verlaufs einer Schwingung. Es wird zu bestimmten Zeitpunkten die Auslenkung (Elongation) einer Schwingung festgehalten.

Die Qualität des aufgezeichneten Klangs hängt vor allem von zwei Werten ab:

[Bearbeiten] Samples & Frames

Beispiel der Bitanordnung eines 12-Bit-Samples
vergrößern
Beispiel der Bitanordnung eines 12-Bit-Samples

"Sample" ist die englische Bezeichnung für einen Abtastwert, der im Zuge einer Analog-Digital-Wandlung ermittelt wird. Bei Multikanaldaten gibt es pro Kanal einen entsprechenden Abtastwert. Jeder Abtastwert pro Zeiteinheit ist in einem Frame zusammengefasst. Die Amplitude wird als Serie von aufeinanderfolgenden Blöcken zu je 8 Bit im Zweierkomplement abgebildet, da sie so von der CPU schneller verarbeitet und auch aus dem bzw. in den Speicher schneller gelesen bzw. geschrieben werden können. Bei Quantisierungsraten, die nicht durch 8 teilbar sind, werden die restlichen Bits bis zum nächsten durch 8 ganzzahlig teilbaren Wert mit Nullen aufgefüllt (Zero-Padding). Die Datenbits sollten linksbündig angeordnet sein, d. h. beispielsweise bei einem 12-Bit-Signal sind die Bits 0-3 "0" und 4-15 für die eigentlichen Sampledaten reserviert. Das WAV-Format verwendet die Little-Endian-Anordnung als Standard, wo das Least Significant Bit (LSB) an der ersten Stelle steht.

8-Bit-Daten sind als unsigned char definiert (Wertebereich 0 bis 255), 16-Bit-Daten als signed short (Wertebereich -32768 bis 32767). Diese Inkonsistenz zwischen signed und unsigned ist ein Nachteil des WAV-Formats.

Samples werden ineinander (engl. "interleaved") gespeichert. Das bedeutet, dass für jeden Kanal pro Zeiteinheit das entsprechende Sample aufeinanderfolgend positioniert wird. Dies ist sinnvoll, weil eine Wiedergabe von non-interleaved-Daten (zuerst Kanal 0 von allen Frames, dann Kanal 1, usw.) in Echtzeit sonst erschwert wäre.

Darstellung eines Stereosignals im WAV-Format. Die beiden Samples ch0 und ch1 repräsentieren zusammen jeweils ein Frame. Bei Monodaten ist einem Frame genau ein Sample zugeordnet.
vergrößern
Darstellung eines Stereosignals im WAV-Format. Die beiden Samples ch0 und ch1 repräsentieren zusammen jeweils ein Frame. Bei Monodaten ist einem Frame genau ein Sample zugeordnet.

[Bearbeiten] Dateistruktur

Die Struktur des WAV-Formats besteht aus einer Sequenz von Datenpaketen (Chunks), die größtenteils optional sind. Im Laufe der Entwicklung kam es zu einer unüberschaubaren Anzahl von Chunks mit teils redundanten und überschneidenden Inhalten. Die unkoordinierte Arbeitsweise von Programmierern aus aller Welt führte zu einem "unsauberen" Dateiformat. 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 Kompressionsarten, die jeweils ihren eigenen Chunk definieren.

WAV-Dateistruktur
vergrößern
WAV-Dateistruktur

Die WAV-Spezifikation definiert drei Chunks als verpflichtend:

  • Der RIFF-Chunk identifiziert die Datei als WAV-Datei.
  • Der FORMAT-Chunk hat einige Parameter wie z. B. die Sample-Rate gespeichert.
  • Der DATA-Chunk enthält die tatsächlichen Audiodaten.

Die Datei muss mit dem "RIFF WAVE"-Chunk beginnen, bestehend aus der groupID "RIFF" und der riffType "WAVE". Unmittelbar darauf muss der Format-Chunk folgen. Er muss und darf in der Datei nur einmal vorkommen. In diesem Chunk befinden sich die wichtigsten Parameter, die das WAV-Signal charakterisieren. Der Format-Chunk setzt sich aus folgenden Elementen zusammen:

  • chunkID (int)
  • chunkSize (long)
  • wFormatTag (short)
  • wChannels (unsigned short)
  • dwSamplesPerSec (unsigned long)
  • dwAvgBytesPerSec (unsigned long)
  • wBlockAlign (unsigned short)
  • wBitsPerSample (unsigned short)

Die chunkID ist immer "fmt ", gefolgt von der Größe des Chunks chunkSize. Die Variable wFormatTag beschreibt, falls vorhanden, die Kompressionsart der Daten mit einem Wert ungleich 1. In diesem Fall werden weitere Felder im Format-Chunk eingefügt, beginnend nach wFormatTag mit einer Größenangabe der zusätzlichen Bytes als unsigned short. Danach folgt ein Fact-Chunk, der in einem unsigned long Auskunft über die Größe der unkomprimierten Daten gibt. Die Audiodaten können auf mehrere Arten komprimiert werden, was eine vollständige Unterstützung des WAV-Formats für Entwickler noch schwieriger macht. Wird keine Kompression verwendet, hat wFormatTag den Wert 1. wChannels beschreibt die Anzahl der Kanäle. Bei Monosignalen ist dieser Wert gleich 1, Stereosignalen gleich 2, usw. Es kann eine beliebige Anzahl von Kanälen verwendet werden. Für Multikanaldaten wird jedes Sample pro Kanal zusammen in einem Sample-Frame zusammengefasst. dwSamplesPerSec steht für die Anzahl der Samples pro Sekunde, also der Abtastrate in Hertz (Hz). dwAvgBytesPerSec bezeichnet die durchschnittliche Anzahl von Datenbytes pro Sekunde. Sie entspricht dem Produkt aus Abtastrate und Framegröße:

\texttt{dwAvgBytesPerSec} = \texttt{dwSamplesPerSec} \cdot \texttt{wBlockAlign}

Die Framegröße wBlockAlign setzt sich wie folgt zusammen, wobei wBitsPerSample die Quantisierungsrate in Bit ist:

\texttt{wBlockAlign} = \texttt{wChannels} \cdot (\texttt{wBitsPerSample} \div 8)

Der Data-Chunk beinhaltet die eigentlichen Audiodaten:

  • chunkID (int)
  • chunkSize (long)
  • waveformData (unsigned char*)

Die chunkID ist immer "data", gefolgt von der Größe des Chunks chunkSize. Die Bytes jedes Sampleframes sind anschließend als 8-Bit-Blöcke im Array waveformData gespeichert. Audiodaten können auch ohne Header-Information gespeichert werden, sodass die Abtastrate, Bittiefe, etc. nicht definiert sind. Diese Daten müssen beim Öffnen der Datei bekannt sein und angegeben werden. Ebenso ist die Bitanordnung anzugeben, da sie im Unterschied zu WAV auch dem Big-Endian-Prinzip unterliegen kann. Die Datei (üblicherweise mit der Endung RAW) beinhaltet die rohen Audiodaten bestehend aus PCM-Samples.

[Bearbeiten] 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)

(44{.}100\;\textrm{Hz} \cdot 2\;\textrm{Byte} \cdot 2) \cdot 300\;\textrm{s} = 52{.}920{.}000\;\textrm{Byte} = 51{.}679{,}69\;\textrm{KiB} = 50{,}5\;\textrm{MiB}

[Bearbeiten] Beispiel eines allgemein lesbaren WAVE-Dateiformates

Die hier beschriebenen Einträge sind in der Little-Endian Byte-Reihenfolge.

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 Tabelle weitere Formate)
22 2 <channels> Anzahl der Kanäle: 1 = mono, 2 = stereo
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 oder 16

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
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
0x0040 G721 ADPCM
0x0050 MPEG
0x0200 CREATIVE ADPCM
0x0202 CREATIVE FASTSPEECH8
0x0203 CREATIVE FASTSPEECH10
0x0300 FM TOWNS SND
0x1000 OLIGSM
0x1001 OLIADPCM
0x1002 OLICELP
0x1003 OLISBC
0x1004 OLIOPR

[Bearbeiten] Literatur

  • Born, Günter, Referenzhandbuch Dateiformate. 1990, Addison Wesley Longman, in div. Überarbeiteten Auflagen
  • Born, Gunter: File Formats Handbook. 1995, ITP Boston

[Bearbeiten] Links

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu