WAVEFORMATEX-Struktur (mmreg.h)

Die WAVEFORMATEX-Struktur gibt das Datenformat eines Wellenaudiodatenstroms an.

Syntax

typedef struct tWAVEFORMATEX {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;

Members

wFormatTag

Gibt den Wellenform-Audioformattyp an. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

nChannels

Gibt die Anzahl der Kanäle von Audiodaten an. Legen Sie für monophone Audiodaten diesen Member auf 1 fest. Legen Sie für Stereo diesen Member auf 2 fest.

nSamplesPerSec

Gibt die Beispielhäufigkeit an, mit der jeder Kanal wiedergegeben oder aufgezeichnet werden soll. Wenn wFormatTag = WAVE_FORMAT_PCM, sind die allgemeinen Werte für nSamplesPerSec 8,0 kHz, 11,025 kHz, 22,05 kHz und 44,1 kHz. Um beispielsweise eine Abtastfrequenz von 11,025 kHz anzugeben, legen Sie nSamplesPerSec auf 11025 fest. Bei Nicht-PCM-Formaten sollte dieser Member gemäß der Herstellerspezifikation des Formattags berechnet werden.

nAvgBytesPerSec

Gibt die erforderliche durchschnittliche Datenübertragungsrate in Bytes pro Sekunde an. Dieser Wert ist nützlich, um die Puffergröße zu schätzen.

nBlockAlign

Gibt die Blockausrichtung in Bytes an. Die Blockausrichtung ist die Größe der kleinsten atomaren Dateneinheit für den wFormatTag-Formattyp . Wenn wFormatTag = WAVE_FORMAT_PCM oder wFormatTag = WAVE_FORMAT_IEEE_FLOAT, legen Sie nBlockAlign auf (nChannels*wBitsPerSample)/8fest. Dies entspricht der Größe eines einzelnen Audioframes. Bei Nicht-PCM-Formaten sollte dieser Member gemäß der Herstellerspezifikation für das Formattag berechnet werden.

Wiedergabe- und Aufzeichnungssoftware sollte ein Vielfaches von nBlockAlign-Daten gleichzeitig verarbeiten. Daten, die auf ein Gerät geschrieben und von diesem gelesen werden, sollten immer am Anfang eines Blocks beginnen.

wBitsPerSample

Gibt die Anzahl der Bits pro Beispiel für den von wFormatTag angegebenen Formattyp an. Wenn wFormatTag = WAVE_FORMAT_PCM, sollte wBitsPerSample entweder auf 8 oder 16 festgelegt werden. Wenn wFormatTag = WAVE_FORMAT_IEEE_FLOAT, sollte wBitsPerSample auf 32 festgelegt werden. Legen Sie für Nicht-PCM-Formate den Wert dieses Elements gemäß der Herstellerspezifikation für das Formattag fest. Einige Komprimierungsschemas können keinen Wert für wBitsPerSample definieren. Legen Sie in diesem Fall wBitsPerSample auf 0 (null) fest.

cbSize

Gibt die Größe der zusätzlichen Formatinformationen in Bytes an, die am Ende der WAVEFORMATEX-Struktur angefügt werden. Diese Informationen können von Nicht-PCM-Formaten verwendet werden, um zusätzliche Attribute für das wFormatTag zu speichern. Wenn für das wFormatTag keine zusätzlichen Informationen erforderlich sind, legen Sie diesen Member auf 0 (null) fest. Bei WAVE_FORMAT_PCM Formaten sollten Clients diesen Member ignorieren (sein Wert ist implizit 0). Da diese Regel möglicherweise nicht für alle Clients befolgt wird, wird empfohlen, cbSize für WAVE_FORMAT_PCM Formate auf Null zu initialisieren.

Hinweise

Die WAVEFORMATEX-Struktur kann nur eine Teilmenge der Formate beschreiben, die durch die WAVEFORMATEXTENSIBLE-Struktur beschrieben werden können. Beispielsweise kann WAVEFORMATEX mono- oder (zweikanalige) stereo pulse-code modulierte (PCM)-Streams mit 8-Bit- oder 16-Bit-Ganzzahl-Beispielwerten oder mit 32-Bit-Gleitkomma-Beispielwerten beschreiben. Darüber hinaus kann WAVEFORMATEX gängige Nicht-PCM-Formate wie AC-3 und WMA Pro beschreiben.

WAVEFORMATEX kann Mono- oder Stereo-PCM-Formate eindeutig beschreiben, für die die Anzahl der gültigen Bits pro Stichprobe mit der Größe des Beispielcontainers übereinstimmt. Um ein PCM-Format mit mehr als zwei Kanälen zu beschreiben, ist WAVEFORMATEXTENSIBLE erforderlich, das über eine Kanalmaske verfügt, um die Sprecherkonfiguration (d. a. die Zuordnung von Kanälen zu physischen Sprecherpositionen) anzugeben. Um ein PCM-Format zu beschreiben, für das die Anzahl gültiger Bits pro Stichprobe kleiner als die Stichprobencontainergröße ist (z. B. ein 20-Bit-Beispiel, das in einem Drei-Byte-Container gespeichert ist), ist WAVEFORMATEXTENSIBLE erforderlich, das sowohl die Anzahl der gültigen Beispielbits als auch die Größe des Beispielcontainers angibt.

WAVEFORMATEX kann Nicht-PCM-Formate beschreiben, für die 16-Bit-Formattags in der Headerdatei Mmreg.h definiert sind (z. B. WAVE_FORMAT_MPEG). Das wFormatTag-Element von WAVEFORMATEX enthält das Formattag. Geben Sie ein Nicht-PCM-Format an, für das in Mmreg.h kein Formattag durch eine WAVEFORMATEXTENSIBLE-Struktur definiert ist, die eine GUID enthält, die das Format identifiziert. Bei Bedarf kann ein Hardwarehersteller unabhängig einen GUID-Wert generieren, um ein neues Format zu identifizieren. Das Registrieren der GUID bei Microsoft ist nicht erforderlich.

Weitere Informationen zu den Unterschieden zwischen WAVEFORMATEX und WAVEFORMATEXTENSIBLE finden Sie unter Erweiterbare Wave-Format Deskriptoren.

Das wFormatTag-Element ist auf eines der Wellenformattags festgelegt, die in Mmreg.h definiert sind. Tags für einige der gängigeren nichtproprietären Formate sind in der folgenden Tabelle aufgeführt.

wFormatTag-Wert Bedeutung
WAVE_FORMAT_PCM PCM-Daten (pulse-code modulated) im Ganzzahlformat.
WAVE_FORMAT_IEEE_FLOAT PCM-Daten im IEEE-Gleitkommaformat.
WAVE_FORMAT_DRM DRM-codiertes Format (für digitale Audioinhalte, die durch Microsoft Digital Rights Management geschützt sind).
WAVE_FORMAT_EXTENSIBLE Erweiterbare WAVEFORMATEX-Struktur (siehe WAVEFORMATEXTENSIBLE).
WAVE_FORMAT_ALAW A-Gesetz-codiertes Format.
WAVE_FORMAT_MULAW Mu-Law-codiertes Format.
WAVE_FORMAT_ADPCM ADPCM-Daten (adaptive differential pulse-modulated)
WAVE_FORMAT_MPEG MPEG-1-Datenformat (Stream entspricht iso 11172-3 Audio-Spezifikation).
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (auch bekannt als Dolby Digital) über S/PDIF.
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro über S/PDIF.
 

Eine vollständige Liste der WAVE_FORMAT_Xxx-Formate finden Sie unter Mmreg.h.

WAVEFORMATEX ist nahezu identisch mit der PCMWAVEFORMAT-Struktur, bei der es sich um eine veraltete Struktur handelt, die zum Angeben von PCM-Formaten verwendet wird. Der einzige Unterschied besteht darin, dass WAVEFORMATEX ein cbSize-Element enthält und PCMWAVEFORMAT nicht. Gemäß konvention sollte cbSize ignoriert werden, wenn wFormatTag = WAVE_FORMAT_PCM (da cbSize implizit null ist). Diese Konvention ermöglicht es Treibersoftware, die WAVEFORMATEX- und PCMWAVEFORMAT-Strukturen im Fall eines PCM-Formats identisch zu behandeln. Weitere Informationen zu PCMWAVEFORMAT finden Sie in der Dokumentation zu Microsoft Windows SDK.

Wenn wFormatTag = WAVE_FORMAT_PCM oder wFormatTag = WAVE_FORMAT_IEEE_FLOAT, legen Sie cbSize auf null fest. Für alle anderen Werte von wFormatTag gibt cbSize an, wie viele Bytes zusätzlicher Formatdaten an die WAVEFORMATEX-Struktur angefügt werden.

Wenn wFormatTag = WAVE_FORMAT_EXTENSIBLE, legen Sie cbSize auf sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) plus die Größe aller formatspezifischen Daten fest, die an die WAVEFORMATEXTENSIBLE-Struktur angefügt werden.

Requirements (Anforderungen)

   
Kopfzeile mmreg.h (include Mmsystem.h, Mmreg.h, Mmsystem.h)

Weitere Informationen

WAVEFORMATEXTENSIBLE