Freigeben über


WAVEFORMATEXTENSIBLE-Struktur (ksmedia.h)

Die WAVEFORMATEXTENSIBLE-Struktur gibt das Format eines Audiowellenstroms an.

Syntax

typedef struct {
  WAVEFORMATEX Format;
  union {
    WORD wValidBitsPerSample;
    WORD wSamplesPerBlock;
    WORD wReserved;
  } Samples;
  DWORD        dwChannelMask;
  GUID         SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;

Angehörige

Format

Gibt das Wellendatenformat des Datenstroms an. Dieses Element ist eine Struktur vom Typ WAVEFORMATEX. Das wFormat- Mitglied von WAVEFORMATEX sollte auf WAVE_FORMAT_EXTENSIBLE festgelegt werden. Das wBitsPerSample Element von WAVEFORMATEX wird eindeutig als Größe des Containers für jedes Beispiel definiert. Beispielcontainer werden immer byte ausgerichtet, und wBitsPerSample- muss ein Vielfaches von acht sein.

Samples

Samples.wValidBitsPerSample

Gibt die Genauigkeit des Beispiels in Bits an. Der Wert dieses Elements sollte kleiner oder gleich der containergröße sein, die im Formatangegeben ist.wBitsPerSample Mitglied. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Samples.wSamplesPerBlock

Gibt die Anzahl der In einem komprimierten Block enthaltenen Beispiele an. Dieser Wert ist nützlich, um Pufferanforderungen für komprimierte Formate zu schätzen, die eine feste Anzahl von Beispielen innerhalb jedes Blocks aufweisen. Legen Sie dieses Element auf Null fest, wenn jeder Block komprimierter Audiodaten eine variable Anzahl von Beispielen enthält. In diesem Fall müssen Pufferschätzungs- und Pufferpositionsinformationen auf andere Weise abgerufen werden.

Samples.wReserved

Reserviert für die interne Verwendung durch das Betriebssystem. Initialisieren sie auf Null.

dwChannelMask

Gibt die Zuweisung von Kanälen im Multichannel-Stream zu Sprecherpositionen an. Die Codierung entspricht der Codierung, die für die ActiveSpeakerPositions Member der KSAUDIO_CHANNEL_CONFIG-Struktur verwendet wird. Weitere Informationen finden Sie im Abschnitt Anmerkungen.

SubFormat

Gibt das Unterformat an. Weitere Informationen finden Sie im Abschnitt Anmerkungen.

Bemerkungen

WAVEFORMATEXTENSIBLE ist eine erweiterte Form der WAVEFORMATEX Struktur. WAVEFORMATEX kann eindeutig nur eine Teilmenge der Formate beschreiben, die von WAVEFORMATEXTENSIBLE beschrieben werden können. WAVEFORMATEXTENSIBLE unterliegt nicht den Einschränkungen von WAVEFORMATEX, die keine eindeutigen Formate mit mehr als zwei Kanälen angeben können oder für die die Anzahl der gültigen Bits pro Beispiel nicht der Größe des Beispielcontainers entspricht. Weitere Informationen finden Sie unter Audiodatenformate und Datenbereiche.

Häufig enthält das wValidBitsPerSample Member, das die Beispielgenauigkeit angibt, denselben Wert wie die Format-.wBitsPerSample Member, das die Größe des Beispielcontainers angibt. Diese Werte können jedoch unterschiedlich sein. Wenn beispielsweise die Wellendaten von einem 20-Bit-A/D-Konverter stammen, sollte wValidBitsPerSample- 20, aber Formatsein.wBitsPerSample- kann 24 oder 32 sein. Wenn wValidBitsPerSample- kleiner als Formatist.wBitsPerSamplewerden die gültigen Bits (die tatsächlichen PCM-Daten) im Container linksbündig ausgerichtet. Die nicht verwendeten Bits im am wenigsten signifikanten Teil des Containers sollten auf Null festgelegt werden.

Beispielcontainer beginnen und enden auf Bytegrenzen und den Wert von Format.wBitsPerSample sollte immer ein Vielfaches von acht sein. Außerdem sollte der Wert von wValidBitsPerSample- die Formatniemals überschreiten.wBitsPerSample. Treiber sollten Wellenformate ablehnen, die gegen diese Regeln verstoßen.

Die dwChannelMask Element der WAVEFORMATEXTENSIBLE-Struktur enthält eine Maske, die angibt, welche Kanäle im Multichannelstream vorhanden sind. Das am wenigsten signifikante Bit stellt den Front-left-Lautsprecher dar, der nächste Bit entspricht dem front-rechten Lautsprecher usw. Die folgenden Flagbits werden in der Headerdatei Ksmedia.hdefiniert.

Lautsprecherposition 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 kanäle, die in dwChannelMask angegeben sind, sollten in der Reihenfolge vorhanden sein, die in der vorherigen Tabelle angezeigt wird, beginnend am oberen Rand.

Wenn z. B. nur front-left und front-center angegeben werden, sollte sich die Front-left- bzw. die Front-Center-Mitte in den Kanälen 0 bzw. 1 des interleavierten Datenstroms befinden.

Wenn nChannels (im Format Member; siehe WAVEFORMATEX-) auf 4 festgelegt ist und dwChannelMask auf 0x00000033 festgelegt ist, sind die Audiokanäle für die Wiedergabe auf die front-left-, front-right-, back-left- und back-right-Lautsprecher vorgesehen. Die Kanaldaten sollten in dieser Reihenfolge innerhalb jedes Blocks interleaviert werden.

Kanalspeicherorte, die über die vordefinierten hinausgehen, gelten als reserviert.

Alternativ kann die Kanalmaske als eine der folgenden Konstanten angegeben werden, die in Ksmedia.h definiert sind und bitweise ORed-Kombinationen der vorherigen Flags sind, die Standardlautsprecherkonfigurationen darstellen:

KSAUDIO_SPEAKER_MONO

KSAUDIO_SPEAKER_STEREO

KSAUDIO_SPEAKER_QUAD

KSAUDIO_SPEAKER_SURROUND

KSAUDIO_SPEAKER_5POINT1

KSAUDIO_SPEAKER_7POINT1

KSAUDIO_SPEAKER_DIRECTOUT

Ein Hardwaregerät kann durch eine KSPROPERTY_AUDIO_CHANNEL_CONFIG Set-Property-Anforderung auf eine dieser Lautsprecherkonfigurationen festgelegt werden. Weitere Informationen zum Festlegen von Lautsprecherkonfigurationen finden Sie unter KSAUDIO_CHANNEL_CONFIG.

In der Regel entspricht die Anzahl in nChannels der Anzahl von Bits, die in dwChannelMaskfestgelegt werden, aber dies ist nicht notwendigerweise so. Wenn nChannels- kleiner als die Anzahl der bits ist, die in dwChannelMaskfestgelegt sind, werden die zusätzlichen (wichtigsten) Bits in dwChannelMask ignoriert. Wenn nChannels die Anzahl der bits überschreitet, die in dwChannelMaskfestgelegt sind, werden den Kanälen, die keine entsprechenden Maskenbits haben, keine physische Lautsprecherposition zugewiesen. In jeder anderen Lautsprecherkonfiguration als KSAUDIO_SPEAKER_DIRECTOUT ignoriert eine Audiospüle wie KMixer (siehe KMixer System Driver) einfach diese überzählige Kanäle und mischt nur die Kanäle mit entsprechenden Maskenbits.

KSAUDIO_SPEAKER_DIRECTOUT stellt eine Konfiguration ohne Lautsprecher dar und wird in Ksmedia.h als Null definiert. In dieser Konfiguration rendert das Audiogerät den ersten Kanal an den ersten Port auf dem Gerät, den zweiten Kanal zum zweiten Port auf dem Gerät usw. Auf diese Weise kann eine Audioerstellungsanwendung Multichanneldaten direkt und ohne Änderung an einem Gerät wie einem digitalen Mixer oder einem digitalen Audiospeichergerät (Festplatte oder ADAT) ausgeben. Kanäle 0 bis 30 können z. B. Drums, Gitarre, Bass, Stimme usw. enthalten. Für diese Art von rohen Audiodaten sind Sprecherpositionen bedeutungslos, und das Zuweisen von Lautsprecherpositionen zu den Eingabe- oder Ausgabedatenströmen könnte dazu führen, dass eine Komponente wie KMixer unangemessen eingreifen kann, indem eine unerwünschte Formatkonvertierung ausgeführt wird. Wenn ein Gerät die rohen Audiodatenströme nicht verarbeiten kann, sollte eine Anforderung zum Ändern der Lautsprecherkonfiguration in KSAUDIO_SPEAKER_DIRECTOUT abgelehnt werden. Weitere Informationen finden Sie unter DSSPEAKER_DIRECTOUT Lautsprecherkonfiguration.

Weitere Informationen zu Mehrkanalkonfigurationen finden Sie im Whitepaper mit dem Titel Multiple Channel Audio Data and WAVE Files auf der website Audiotechnologie.

Das element SubFormat enthält eine GUID, die das allgemeine Datenformat für einen Wellenstrom angibt. Diese GUID kann z. B. angeben, dass der Datenstrom ganzzahlige PCM-Daten enthält. Die anderen Mitglieder enthalten zusätzliche Informationen, z. B. die Beispielgröße und die Anzahl der Kanäle. Die Bedeutung der SubFormat- GUID ähnelt dem des 16-Bit-Formats-Tags im WAVEFORMATEX-wFormatTag Member der Struktur.

Bevor WAVEFORMATEXTENSIBLE in Windows 98 Second Edition eingeführt wurde, war WAVEFORMATEX die bevorzugte Struktur für die Angabe von Wellenformaten. Zu diesem Zeitpunkt mussten Anbieter jedes neue Wellenformat bei Microsoft registrieren, damit dem Format ein offizielles Formattag zugewiesen werden kann. Eine Liste der registrierten Formattags wird in der öffentlichen Headerdatei Mmreg.hangezeigt.

Mit WAVEFORMATEXTENSIBLE ist das Registrieren von Formaten nicht mehr erforderlich. Anbieter können SubFormat- GUIDs nach Bedarf ihren neuen Formaten zuweisen. Microsoft listet jedoch einige der beliebtesten SubFormat- GUIDs in der öffentlichen Headerdatei Ksmedia.hauf. Bevor Sie eine neue SubFormat- GUID definieren, sollten Anbieter die Liste der KSDATAFORMAT_SUBTYPE_Xxx- Konstanten in Ksmedia.h überprüfen, um festzustellen, ob bereits eine entsprechende GUID für ein bestimmtes Format definiert wurde.

Aus Gründen der Abwärtskompatibilität kann jedes Wellenformat, das durch eine eigenständige WAVEFORMATEX-Struktur angegeben werden kann, auch durch eine WAVEFORMATEXTENSIBLE-Struktur definiert werden. Daher verfügt jedes Formattag in Mmreg.h über eine entsprechende SubFormat GUID. Die folgende Tabelle enthält einige typische Formattags und die entsprechenden SubFormat- GUIDs.

Tag formatieren 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

Weitere Informationen finden Sie unter Konvertieren zwischen Formattags und Unterformat-GUIDs.

Da WAVEFORMATEXTENSIBLE eine erweiterte Version von WAVEFORMATEX ist, kann sie 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 Wellenformattags vorhanden sind.

Anforderungen

Anforderung Wert
Header- ksmedia.h (einschließlich Mmreg.h, Ksmedia.h, Mmreg.h)

Siehe auch

KSAUDIO_CHANNEL_CONFIG

WAVEFORMATEX-