WAVEFORMATEXTENSIBLE-Struktur (mmreg.h)
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Die WAVEFORMATEXTENSIBLE-Struktur definiert das Format von Waveform-Audiodaten für Formate mit mehr als zwei Kanälen oder höheren Beispielauflösungen als bei WAVEFORMATEX zulässig. Es kann auch verwendet werden, um jedes Format zu definieren, das von WAVEFORMATEX definiert werden kann.
Syntax
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
} Samples;
DWORD dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
Member
Format
WAVEFORMATEX-Struktur , die das Basisformat angibt. Das wFormatTag-Element muss WAVE_FORMAT_EXTENSIBLE sein. Der cbSize-Member muss mindestens 22 sein.
Samples
Eine Union, die das Beispielformat beschreibt.
Samples.wValidBitsPerSample
Anzahl der Genauigkeitsbits im Signal. In der Regel gleich WAVEFORMATEX.wBitsPerSample. wBitsPerSample ist jedoch die Containergröße und muss ein Vielfaches von 8 sein, während wValidBitsPerSample jeder Wert sein kann, der die Containergröße nicht überschreitet. Wenn das Format beispielsweise 20-Bit-Beispiele verwendet, muss wBitsPerSample mindestens 24, wValidBitsPerSample jedoch 20 sein.
Samples.wSamplesPerBlock
Anzahl von Beispielen, die in einem komprimierten Block von Audiodaten enthalten sind. Dieser Wert wird in der Pufferschätzung verwendet. Dieser Wert wird für komprimierte Formate verwendet, die eine feste Anzahl von Beispielen in jedem Block aufweisen. Dieser Wert kann auf 0 festgelegt werden, wenn in jedem Block komprimierter Audiodaten eine variable Anzahl von Beispielen enthalten ist. In diesem Fall müssen Pufferschätzungs- und Positionsinformationen auf andere Weise abgerufen werden.
Samples.wReserved
Reserviert für die interne Verwendung durch das Betriebssystem. Auf 0 festlegen.
dwChannelMask
Bitmaske, die die Zuweisung von Kanälen im Stream zu Sprecherpositionen angibt.
SubFormat
Unterformat der Daten, z. B. KSDATAFORMAT_SUBTYPE_PCM. Die Unterformatinformationen ähneln denen des Tags im wFormatTag-Element der WAVEFORMATEX-Struktur.
Bemerkungen
WAVEFORMATEXTENSIBLE kann jedes Format beschreiben, das durch WAVEFORMATEX beschrieben werden kann, bietet aber zusätzliche Unterstützung für mehr als zwei Kanäle, für eine höhere Genauigkeit bei der Anzahl der Bits pro Beispiel und für neue Komprimierungsschemas.
WAVEFORMATEXTENSIBLE kann sicher in WAVEFORMATEX umgewandelt werden, da es einfach die zusätzlichen Bytes konfiguriert, die von WAVEFORMATEX.cbSize angegeben werden.
Das dwChannelMask-Element gibt an, welche Kanäle im Mehrkanalstream vorhanden sind. Das am wenigsten signifikante Bit entspricht dem linken vorderen Lautsprecher, das nächste wenig signifikante Bit entspricht dem vorderen rechten Lautsprecher usw. Die Bits werden in der Reihenfolge der Signifikanz wie folgt definiert.
Sprecherposition | Flagbit |
---|---|
SPEAKER_FRONT_LEFT | 0x1 |
SPEAKER_FRONT_RIGHT | 0x2 |
SPEAKER_FRONT_CENTER | 0x4 |
SPEAKER_LOW_FREQUENCY | 0x8 |
SPEAKER_BACK_LEFT | 0x10 |
SPEAKER_BACK_RIGHT | 0x20 |
SPEAKER_FRONT_LEFT_OF_CENTER | 0x40 |
SPEAKER_FRONT_RIGHT_OF_CENTER | 0x80 |
SPEAKER_BACK_CENTER | 0x100 |
SPEAKER_SIDE_LEFT | 0x200 |
SPEAKER_SIDE_RIGHT | 0x400 |
SPEAKER_TOP_CENTER | 0x800 |
SPEAKER_TOP_FRONT_LEFT | 0x1000 |
SPEAKER_TOP_FRONT_CENTER | 0x2000 |
SPEAKER_TOP_FRONT_RIGHT | 0x4000 |
SPEAKER_TOP_BACK_LEFT | 0x8000 |
SPEAKER_TOP_BACK_CENTER | 0x10000 |
SPEAKER_TOP_BACK_RIGHT | 0x20000 |
Die in dwChannelMask angegebenen Kanäle müssen in der vorgeschriebenen Reihenfolge vorhanden sein (ab dem geringsten signifikanten Bit nach oben). Wenn beispielsweise nur SPEAKER_FRONT_LEFT und SPEAKER_FRONT_RIGHT angegeben werden, müssen die Beispiele für den linken Frontlautsprecher im verschachtelten Stream an erster Stelle stehen. Die Anzahl der in dwChannelMask festgelegten Bits sollte mit der in WAVEFORMATEX.nChannels angegebenen Anzahl von Kanälen identisch sein.
Aus Gründen der Abwärtskompatibilität kann jedes Wellenformat, das von einer eigenständigen WAVEFORMATEX-Struktur angegeben werden kann, auch durch eine WAVEFORMATEXTENSIBLE-Struktur definiert werden. Daher verfügt jedes Wellenformattag in mmreg.h über eine entsprechende SubFormat-GUID . Die folgende Tabelle enthält einige typische Wellenformattags und die entsprechenden SubFormat-GUIDs . Diese GUIDs werden in Ksmedia.h definiert.
Wave-Format Tag | SubFormat GUID |
---|---|
WAVE_FORMAT_PCM | KSDATAFORMAT_SUBTYPE_PCM |
WAVE_FORMAT_IEEE_FLOAT | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVE_FORMAT_DRM | KSDATAFORMAT_SUBTYPE_DRM |
WAVE_FORMAT_ALAW | KSDATAFORMAT_SUBTYPE_ALAW |
WAVE_FORMAT_MULAW | KSDATAFORMAT_SUBTYPE_MULAW |
WAVE_FORMAT_ADPCM | KSDATAFORMAT_SUBTYPE_ADPCM |
Da WAVEFORMATEXTENSIBLE eine erweiterte Version von WAVEFORMATEX ist, kann es zusätzliche Formate beschreiben, die nicht allein von WAVEFORMATEX beschrieben werden können. Anbieter können ihre eigenen SubFormat-GUIDs definieren, um proprietäre Formate zu identifizieren, für die keine Waveformattags vorhanden sind.
Die folgenden Strukturen werden für bestimmte erweiterte Formate als WAVEFORMATEXTENSIBLE definiert.
Definition | Wert von SubFormat |
---|---|
WAVEFORMATIEEEFLOATEX | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVEFORMATPCMEX | KSDATAFORMAT_SUBTYPE_PCM |
Anforderungen
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Kopfzeile | mmreg.h |