KBATEXTENSIBLE 結構 (ksmedia.h)
WAVEATEXTENSIBLE 結構會指定音訊波數據流的格式。
語法
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
} Samples;
DWORD dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
成員
Format
指定數據流的波浪數據格式。 這個成員是 波波ATEX類型的結構。 WFormat MEMBERATEX 的成員應設定為 WAVE_FORMAT_EXTENSIBLE。 WBitsPerSample 一般定義為每個樣本的容器大小。 範例容器一律會對齊位元組,且 wBitsPerSample 必須是八個的倍數。
Samples
Samples.wValidBitsPerSample
指定位中樣本的有效位數。 這個成員的值應該小於或等於 Format中指定的容器大小。wBitsPerSample 成員。 如需詳細資訊,請參閱下列一節。
Samples.wSamplesPerBlock
指定一個壓縮區塊中包含的樣本數目。 此值對於估計每個區塊內具有固定樣本數目的壓縮格式緩衝區需求很有用。 如果壓縮音訊數據的每個區塊包含可變數目的樣本,請將這個成員設定為零。 在此情況下,必須以其他方式取得緩衝區估計和緩衝區位置資訊。
Samples.wReserved
保留供作系統內部使用。 初始化為零。
dwChannelMask
指定多通道串流中信道指派給喇叭位置。 編碼方式與用於 KSAUDIO_CHANNEL_CONFIG 結構之 ActiveSpeakerPositions 成員相同。 如需詳細資訊,請參閱<
SubFormat
指定子格式。 如需詳細資訊,請參閱<
言論
SEMANTICATEXTENSIBLE 是一種延伸形式的 , 結構。 UNAATEX 可以明確地描述一部分格式,而由波狀體ATEXTENSIBLE 可描述。 GEOMETRATEXTENSIBLE 不受限於工作訊號限制,因此無法明確指定兩個以上的通道格式,或每個樣本的有效位數目不等於樣本容器大小。 如需詳細資訊,請參閱 音訊資料格式和資料範圍。
通常,wValidBitsPerSample 成員,指定範例精確度,包含與 Format相同的值。指定範例容器大小的 wBitsPerSample 成員。 不過,這些值可能不同。 例如,如果波浪數據源自 20 位 A/D 轉換器,則 wValidBitsPerSample 應該是 20,但 Format。wBitsPerSample 可能是 24 或 32。 如果 wValidBitsPerSample 小於 Format。wBitsPerSample中,有效位(實際的 PCM 數據)會靠左對齊容器內。 容器中最小有效部分的未使用位應該設定為零。
範例容器會以位元組界限開始和結束,以及 Format的值。wBitsPerSample 應一律是八個的倍數。 此外,wValidBitsPerSample 的值絕不應超過 Format的值。wBitsPerSample。 驅動程式應該拒絕違反這些規則的波浪格式。
WGATEXTENSIBLE 結構的 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 成員中;請參閱 GWATEX] 設定為 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 的意義類似於 的 16 位格式標記, 結構的 wFormatTag 成員。
在 Windows 98 第二版引進WAVEATEXTENSIBLE之前,WAVEATEX是指定波浪格式的慣用結構。 屆時,廠商需要向Microsoft註冊每個新的波浪格式,以便將官方格式標記指派給格式。 公用頭檔 mmreg.h中會出現已註冊格式標籤的清單。
使用波素ATEXTENSIBLE 時,不再需要註冊格式。 廠商可以視需要將 SubFormat GUID 指派給新的格式。 不過,Microsoft列出公用頭檔 Ksmedia.h中一些較受歡迎的 SubFormat GUID。 在定義新的 SubFormat GUID 之前,廠商應該檢查KSDATAFORMAT_SUBTYPE_Xxx 常數清單,Ksmedia.h,以查看是否已針對特定格式定義適當的 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 之間轉換。
由於其是一種擴充版本的「超聲波X」,因此它可以描述無法單獨由「超聲波」X 描述的其他格式。 廠商可以自由定義自己的 SubFormat GUID,以識別沒有波浪格式標籤的專屬格式。
要求
要求 | 價值 |
---|---|
標頭 | ksmedia.h (包括 Mmreg.h、Ksmedia.h、Mmreg.h) |