KBATEXTENSIBLE 結構 (ksmedia.h)
WAVEATEXTENSIBLE 結構會指定音訊波串流的格式。
語法
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
} Samples;
DWORD dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
成員
Format
指定數據流的波浪數據格式。 這個成員是 一種類型為 WAVEFORMATEX 的結構。 其 WFormat 成員應設定為WAVE_FORMAT_EXTENSIBLE。 其 WBitsPerSample 成員已明確定義為每個樣本的容器大小。 範例容器一律會對齊位元組, 而 wBitsPerSample 必須是八個的倍數。
Samples
Samples.wValidBitsPerSample
指定位中樣本的有效位數。 這個成員的值應該小於或等於 Format 中指定的容器大小。wBitsPerSample 成員。 如需詳細資訊,請參閱接下來的<備註>一節。
Samples.wSamplesPerBlock
指定一個壓縮區塊中包含的樣本數目。 此值適用於估計每個區塊內具有固定樣本數目之壓縮格式的緩衝區需求。 如果壓縮音訊數據的每個區塊包含可變數目的樣本,請將這個成員設定為零。 在此情況下,必須以其他方式取得緩衝區估計和緩衝區位置資訊。
Samples.wReserved
保留供操作系統內部使用。 初始化為零。
dwChannelMask
指定多通道數據流中的通道指派給說話者位置。 編碼方式與用於 KSAUDIO_CHANNEL_CONFIG 結構的 ActiveSpeakerPositions 成員相同。 如需詳細資訊,請參閱備註一節。
SubFormat
指定子格式。 如需詳細資訊,請參閱備註一節。
備註
WAVEFORMATEXTENSIBLE 是一種外延形式,其為 一種「其」結構 。 WAVEFORMATEX 可以明確描述只有一部分格式,而其格式可以由其由其提供。」 GEOMETRATEXTENSIBLE 不受其限制,其無法明確指定具有兩個以上的通道的格式,或每個樣本的有效位數目不等於樣本容器大小。 如需詳細資訊,請參閱 音訊數據格式和數據範圍。
wValidBitsPerSample 成員經常會指定樣本有效位數,其包含與 Format 相同的值。wBitsPerSample 成員,指定範例容器大小。 不過,這些值可能不同。 例如,如果波浪數據源自 20 位 A/D 轉換器, 則 wValidBitsPerSample 應該是 20,但 Format。wBitsPerSample 可能是 24 或 32。 如果 wValidBitsPerSample 小於 Format。wBitsPerSample, (實際 PCM 數據) 的有效位會靠左對齊容器內。 容器中最小顯著部分的未使用位應該設定為零。
範例容器會以位元組界限開始和結束,以及 Format 的值。wBitsPerSample 應一律為八的倍數。 此外, wValidBitsPerSample 的值不應超過 Format 的值。wBitsPerSample。 驅動程式應該拒絕違反這些規則的波浪格式。
WAVEFORMATEXTENSIBLE 結構的 dwChannelMask 成員包含一個遮罩,指出多重通道數據流中存在哪些通道。 最小有效位代表左方喇叭、下一個位對應至右方喇叭等等。 下列旗標位定義在頭檔 Ksmedia.h 中。
說話者位置 | 旗標位 |
---|---|
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 |
在 dwChannelMask 中指定的通道應該以上表中顯示的順序顯示,從頂端開始。
例如,如果只指定左方和前置,則前端和前端中心應該分別位於交錯數據流的通道 0 和 1 中。
第二個範例是 ,如果 nChannels 在 Format 成員中 (則為 ;請參閱 其將「檔」ATEX) 設定為 4, 而 dwChannelMask 設定為0x00000033,音訊通道適用於播放至左、右上、左下和右下喇叭。 通道數據應該在每個區塊內依該順序交錯。
超出預先定義的通道位置會被視為保留位置。
或者,通道遮罩可以指定為下列其中一個常數,這些常數是在 Ksmedia.h 中定義,而且是上述旗標的位 ORed 組合,這些旗標代表標準說話者組態:
KSAUDIO_SPEAKER_MONO
KSAUDIO_SPEAKER_STEREO
KSAUDIO_SPEAKER_QUAD
KSAUDIO_SPEAKER_SURROUND
KSAUDIO_SPEAKER_5POINT1
KSAUDIO_SPEAKER_7POINT1
KSAUDIO_SPEAKER_DIRECTOUT
硬體裝置可以透過 KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 要求,設定為下列其中一個喇叭組態。 如需設定說話者設定的詳細資訊,請參閱 KSAUDIO_CHANNEL_CONFIG。
一般而言, nChannels 中的計數等於 dwChannelMask 中設定的位數,但這不一定如此。 如果 nChannels 小於 dwChannelMask 中設定的位數,則會忽略 dwChannelMask 中最重要的) 位的額外 (。 如果 nChannels 超過 dwChannelMask 中設定的位數,則沒有對應遮罩位的通道不會指派給任何實體喇叭位置。 在KSAUDIO_SPEAKER_DIRECTOUT以外的任何喇叭組態中,KMixer 之類的音訊接收 (會看到 KMixer 系統驅動程式) 只會忽略這些多餘的通道,並只混用具有對應遮罩位的通道。
KSAUDIO_SPEAKER_DIRECTOUT代表沒有說話者的組態,且在 Ksmedia.h 中定義為零。 在此設定中,音訊裝置會將第一個通道轉譯為裝置上的第一個埠、將第二個通道轉譯為裝置上的第二個埠,依此類推斷。 這可讓音訊撰寫應用程式直接輸出多重通道數據,而不需修改數位混音器或數位音訊儲存裝置 (硬碟或 ADAT) 。 例如,通道 0 到 30 可能會分別包含袐氣、袐、堡壘、語音等等。 針對這種原始音訊數據,說話者位置是無意義的,而將喇叭位置指派給輸入或輸出數據流,可能會導致 KMixer 等元件藉由執行不想要的格式轉換而不當介入。 如果裝置無法處理原始音訊串流,它應該拒絕將喇叭設定變更為KSAUDIO_SPEAKER_DIRECTOUT的要求。 如需詳細資訊,請參閱 DSSPEAKER_DIRECTOUT說話者設定。
如需多重通道設定的詳細資訊,請參閱音訊技術網站上的標題為多重通道音訊數據和 WAVE 檔案的白皮書。
SubFormat 成員包含 GUID,指定波浪數據流的一般數據格式。 例如,此 GUID 可能會指定資料流包含整數 PCM 數據。 其他成員會提供其他資訊,例如樣本大小和通道數目。 SubFormat GUID 的意義類似於在其WFormatTag 成員中,16 位格式標記的意義。
在 Windows 98 第二版中引進WAVEATEXTENSIBLE 之前,WAVEATEX 是指定波浪格式的慣用結構。 此時,廠商需要向 Microsoft 註冊每個新的波浪格式,以便將官方格式標記指派給格式。 已註冊的格式標記清單會出現在公用頭檔 Mmreg.h 中。
使用[][URLATEXTENSIBLE] 時,就不再需要註冊格式。 廠商可以視需要將 SubFormat GUID 獨立指派給其新格式。 不過,Microsoft 會在公用頭檔 Ksmedia.h 中列出一些較熱門的 SubFormat GUID。 在定義新的 SubFormat GUID 之前,廠商應該檢查 Ksmedia.h 中KSDATAFORMAT_SUBTYPE_Xxx 常數的清單,以查看是否已針對特定格式定義適當的 GUID。
為了回溯相容性,獨立的 WAVEATEX 結構可以指定的任何波浪格式,也可以由WAVEATEXTENSIBLE 結構定義。 因此,Mmreg.h 中的每個格式標記都有對應的 SubFormat GUID。 下表顯示一些典型的格式標記及其對應的 SubFormat GUID。
格式標記 | 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 |
如需詳細資訊,請參閱 在格式標記與子格式 GUID 之間轉換。
由於其為一個擴充版的一種顯示格式,因此可以描述無法單獨由其描述的其他格式。 廠商可以定義自己的 SubFormat GUID,以識別沒有波浪格式標記的專屬格式。
規格需求
需求 | 值 |
---|---|
標頭 | ksmedia.h (包括 mmreg.h、Ksmedia.h、mmreg.h) |