RIFF WAVE




























Waveform Audio File Format (WAVE)

Dateiendung:

.wav

MIME-Type:

audio/vnd.wave audio/wav  audio/wave audio/x-wav
Entwickelt von:

Microsoft & IBM
Art:

Audiodatei
Erweitert von:

RIFF








Das WAVE-Dateiformat ist ein Containerformat zur digitalen Speicherung von Audiodaten, das auf dem von Microsoft für Windows definierten Resource Interchange File Format (RIFF) aufsetzt. Eine WAVE-Datei enthält vor den Audiodaten zumindest Informationen über deren Format.


Enthalten sind meist sogenannte PCM-Rohdaten, also eine zeit- und wertdiskrete Darstellung des zeitlichen Verlaufs eines Signals. Die Qualität des aufgezeichneten Klangs hängt dann von zwei Werten ab, der Abtastrate (Anzahl der Abtastungen pro Zeiteinheit) und der Auflösung (Bit-Tiefe); im Fall von komprimierten Daten auch vom Verfahren, z. B. ADPCM oder MP3.


Im Gegensatz zum ähnlichen AIFF-Format lassen sich bei WAV keine ID3-Tags speichern.




Inhaltsverzeichnis






  • 1 Dateistruktur


    • 1.1 RIFF-Abschnitt (auch „RIFF-WAVE“-Abschnitt)


    • 1.2 „Format“-Abschnitt


    • 1.3 „Data“-Abschnitt




  • 2 Beispiel eines allgemein lesbaren WAVE-PCM-Formats


  • 3 Datenformate (Format-Tag)


  • 4 Weiterentwicklung


  • 5 Literatur


  • 6 Weblinks


  • 7 Einzelnachweise





Dateistruktur |




WAV-Dateistruktur


Das RIFF-Format besteht aus mehreren Abschnitten (englisch chunks)[1], die wie beim IFF aufgebaut sind, bis auf die Byte-Reihenfolge: niederwertiges Byte (LSB) voran. Die WAVE-Spezifikation definiert drei Abschnitte als verpflichtend:
Der RIFF-Abschnitt identifiziert die Datei als .wav-Datei und enthält als Container die anderen Abschnitte. Der FORMAT-Abschnitt enthält Parameter wie z. B. die Abtastrate. Der DATA-Abschnitt enthält den Signalverlauf.


Im Laufe der unkoordinierten Entwicklung entstand eine unüberschaubare Anzahl weiterer Abschnittstypen mit teils redundanten Inhalten. Ein Beispiel ist der „Label“-Abschnitt und „Note“-Abschnitt, die beide Cuepoint-Einträge im „Cue“-Abschnitt mit einer Beschriftung versehen. Dabei bezeichnet ein „Label“ den Titel eines Cuepoints, „Note“ einen Kommentar. Sie sind als Unterabschnitte (englisch subchunks) im übergeordneten Associated-Data-List-Abschnitt gespeichert. Weiterhin gibt es eine Vielzahl von komprimierten Formaten, für die ein „Fact“-Abschnitt 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-Abschnitt (auch „RIFF-WAVE“-Abschnitt) |


Er enthält als Container die anderen Abschnitte, sein Header besteht lediglich aus




  • chunkID (char[4], "RIFF")


  • ChunkSize (uint32_t, = Dateilänge in Bytes − 8)


  • riffType (char[4], "WAVE")



„Format“-Abschnitt |


Er beginnt mit der Kennung "fmt " und muss in der Datei genau einmal enthalten sein – und zwar als erster Unterabschnitt, worauf man sich aber genauso wenig verlassen kann wie darauf, dass der Daten-Chunk der letzte ist. Auf seine ChunkSize folgt der Inhalt, der aus einem Satz allgemeiner Parameter und einem nachfolgenden formatspezifischen Teil besteht. Der allgemeine Teil:




  • wFormatTag Identifizierung für das verwendete Format, z. B. steht 0x0001 für PCM, das kanonische, unkomprimierte Format


  • wChannels (uint16_t)


  • dwSamplesPerSec (uint32_t, Abtastrate in Hz, z. B. steht 0x0000AC44 für 44100)


  • dwAvgBytesPerSec (uint32_t, nötige Übertragungsbandbreite)


  • wBlockAlign (uint16_t, Größe der Frames in Bytes)


Für PCM-Daten hat der Format-Abschnitt nur noch dieses eine Feld:



  • wBitsPerSample (uint16_t, 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-Abschnitt als Ganzzahl ("integer") zu kodieren sind mit einer gerade ausreichenden Größe in Byte (eventuell nötige Füllbits stehen am niederwertigen Ende mit dem Wert 0, Zero-Padding). 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. Bei zwei Kanälen (Stereo) wird erst der linke, dann der rechte Kanal gespeichert.



„Data“-Abschnitt |


Er hat die Kennung "data". Seine chunkSize enthält (wie bei allen Abschnitten) weder die 8 Bytes von Kennung und Größe noch eventuell ein am Ende zur vorgeschriebenen Ausrichtung auf Wortgrenzen nötiges Null-Byte. Sein Inhalt ist eine Folge von Frames.


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).


Die Größe des „Data“-Abschnitts im Datenformat PCM berechnet sich wie folgt: Pro Sekunde fallen dwSamplesPerSec Frames zu je wChannels Abtastwerten zu je ein oder zwei Bytes an. Für CD-Qualität (16 Bit stereo = 4 Bytes pro Sample (2 Byte pro Kanal), 44.100 Hertz) z. B. also etwa 10 Megabytes pro Minute (60 s · 44.100 Hz · 4 byte).



Beispiel eines allgemein lesbaren WAVE-PCM-Formats |


RIFF-Header (12 Byte):



























Offset
Typ
Länge (in Bytes)
Inhalt
0 (0x00)
char
4
'RIFF'
4 (0x04)
unsigned
4
<Dateigröße> − 8
8 (0x08)
char
4
'WAVE'

Der fmt-Abschnitt (24 Byte) beschreibt das Format der einzelnen Abtastwerte:

























































Offset
Länge
Inhalt
Beschreibung
12 (0x0C)
4
'fmt '
Header-Signatur (folgendes Leerzeichen beachten)
16 (0x10)
4
<fmt length>
Länge des restlichen fmt-Headers (16 Bytes)
20 (0x14)
2
<format tag>
Datenformat der Abtastwerte (siehe separate Tabelle weiter unten)
22 (0x16)
2
<channels>
Anzahl der Kanäle: 1 = mono, 2 = stereo; mittlerweile sind auch mehr als 2 Kanäle (z. B. für Raumklang) möglich.[2]
24 (0x18)
4
<sample rate>
Samples pro Sekunde je Kanal (z. B. 44100)
28 (0x1C)
4
<bytes/second>
Abtastrate · Frame-Größe
32 (0x20)
2
<block align>
Frame-Größe = <Anzahl der Kanäle> · ((<Bits/Sample (eines Kanals)> + 7) / 8)   (Division ohne Rest)
34 (0x22)
2
<bits/sample>
Anzahl der Datenbits pro Samplewert je Kanal (z. B. 12)

Der Daten-Abschnitt enthält die Abtastwerte:




































Offset
Länge
Inhalt
Beschreibung
36 (0x24)
4
'data'
Header-Signatur
40 (0x28)
4
<length>
Länge des Datenblocks, max. <Dateigröße> − 44
44 (0x2C)
<block align>
der/die erste(n) Abtastwert(e)

<block align>
der/die zweite(n) Abtastwert(e)





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


























































































ID
Bezeichnung
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



Weiterentwicklung |


Aufgrund der im Dateiformat benutzten 32-Bit-Felder ergibt sich eine Größenbeschränkung von 4 GiB, was einer Spieldauer von etwa 6,75 Stunden bei zwei Kanälen à 16 Bit und 44100 Abtastwerten je Sekunde (CD-Qualität) entspricht. Bei höherer Amplituden- oder Zeitauflösung bzw. mehr Kanälen sinkt die erreichbare Spieldauer jeweils entsprechend. Um diese Einschränkung zu umgehen, hat Sonic Foundry eine Erweiterung des Formats vorgestellt, welche die Dateigrößenbeschränkung umgeht. Seit der Bereich Desktop Software von Sonic Foundry zu Sony Pictures Digital überging, wird das Format Sony Pictures Digital Wave 64, kurz Wave64, genannt; es wird ohne Lizenzkosten zur Verfügung gestellt. Als Dateinamenserweiterung wird .w64 vorgeschlagen. Der interne Aufbau ist bewusst an das herkömmliche WAVE angelehnt, um die Software-Implementierung zu vereinfachen.[3] Durch die Verwendung von 64-Bit-Feldern wird unter den oben gemachten Annahmen eine maximale Spieldauer von über 3 Millionen Jahren erreicht.



Literatur |



  • Born, Günter: Referenzhandbuch Dateiformate. 1990, Addison Wesley Longman, in diversen überarbeiteten Auflagen

  • Born, Gunter: File Formats Handbook. 1995, ITP Boston



Weblinks |




  • WAV-Audio-Format (Memento vom 7. Dezember 2010 im Internet Archive) (Ausführliche Beschreibung im Rahmen der Zusammenfassung eines Seminars zur Vorlesung Multimedia an der Hochschule Esslingen.)


  • „Das *.wav Soundformat.“ Header, Datenfeld und Beispiel einer PCM-WAV-Datei für Windows. (Knapp und übersichtlich. Aus einer Diplomarbeit von Thomas Becker und Dirk Manthey an der Fachhochschule Gießen-Friedberg)


  • WAVE File Format (englisch, ausführlicher)


  • WAVE Audio File Format – Spezifikationen (englisch)


  • Version 1.0 der Spezifikation (englisch)

  • Timothy John Weber: The WAVE File Format. Answers to Common Questions. (englisch)



Einzelnachweise |




  1. Resource Interchange File Format Services Spezifikation von Microsoft auf msdn.microsoft.com (englisch)


  2. Thomas Höss und Tobias Rieck: WAV-Audio-Format, fmt-chunk auf it.fht-esslingen.de


  3. VCS Engineering: Sony Wave64. (PDF) Information about Sony Wave64 abgerufen am 2. Mai 2012.




Popular posts from this blog

Statuo de Libereco

Tanganjiko

Liste der Baudenkmäler in Enneberg