可延伸 Wave-Format 描述元

下圖顯示波浪音訊資料流程的資料格式描述元。

說明音訊資料流程之波浪格式描述元的圖表。

如圖所示, KSDATAFORMAT 結構後面的額外格式資訊數量會根據資料格式而有所不同。

音訊系統以數種方式使用這種類型的格式描述元:

KSDATAFORMAT 結構後面的格式資訊應為 一個「波狀結構」XTENSIBLE 結構。 WAVEFORMATEXTENSIBLE 是一種擴充版的一種其可描述其格式範圍,其格式範圍會比「波」ATEX 更廣。

在任一版本的 Microsoft Windows 中,WDM 音訊子系統都已過時,且不支援其版本。 PCMWAVEFORMAT 結構是也過時的 EXTENDAT 版本。

四個波浪格式結構--WAVEAT、PCMWAVEFORMAT、WAVEATEX 和WAVEATEXTENSIBLE-all 開頭都是相同的五個成員,從 wFormatTag開始。 上圖顯示這四個結構彼此迭加,以醒目提示相同結構的部分。

將三個成員從 Samples.wValidBitsPerSample 開始,其會新增三個成員,藉此擴充其時所要擴充的其工作。 (Samples 是一個聯集,其其他成員 wValidSamplesPerBlock會用於某些壓縮格式的 wValidBitsPerSample 。) wFormatTag 成員緊接在緩衝區中 KSDATAFORMAT 結構的結尾之後,指定 KSDATAFORMAT 後面的格式資訊種類。

與「波狀體」不同,「輸出」XTENSIBLE 可以執行下列動作:

  1. 個別指定每個樣本的位數,與範例容器的大小分開。 例如,20 位樣本可以靠左對齊儲存在三位元組容器內。 無法區分每個樣本的資料位數目與範例容器大小,無法明確描述這類格式。

  2. 將特定喇叭位置指派給多通道串流中的音訊通道。 DEVELOPMENTATEX 缺少這項功能,而且只能充分支援單聲道和 (雙通道) 立體串流。

舊版使用時時,會使用其

您也可以使用由其描述的任何 FORMATATEXTENSIBLE 來描述。 如需將其轉換至其格式 標記與子格式 GUID 的詳細資訊,請參閱轉換格式標籤與子格式 GUID

在描述樣本大小為 8 或 16 位的格式時,要足夠,但要充分描述樣本有效位數大於 16 位的格式時,必須有一定格式。 以下是兩個範例:

  • 具有 24 位樣本精確度的資料流程可以使用 32 位的容器大小來進行有效率的處理,但可以轉換成使用 24 位容器來改善儲存效率,而不會遺失資料。

  • 使用 24 位樣本資料處理資料流程時,只提供 20 位有效位數的轉譯裝置可以使用任一項來改善其輸出訊號的精確度。 不過,Dithering 需要額外的處理時間,而且如果原始資料流程精確到 20 位,則不需要額外的處理。

在這兩個範例中,只有在已知樣本有效位數和容器大小時,才能保留訊號品質,同時在處理和儲存效率之間做出正確的取捨。

如果可以明確描述一種簡單格式,可能是由一個 WAVEFORMATEX 或一個 WAVEFORMATEXTENSIBLE 結構描述,音訊驅動程式可以選擇選取任一結構來描述格式。 不過,音訊驅動程式通常會使用「PHPATEX」來指定單聲道和 (具有 8 位或 16 位樣本的雙聲道) 立體 PCM 格式,而某些較舊的應用程式可能會預期所有音訊驅動程式都使用 SPHEREATEX 來指定這些格式。

如果驅動程式支援的音訊格式可以明確指定為一個其為一個時格子,則不論用戶端應用程式或元件用來指定結構的哪一個結構,驅動程式都應該辨識格式。 例如,如果音訊裝置支援 44.1-kHz、16 位、立體 PCM 格式,則迷你埠驅動程式的 KSPROPERTY_PIN_PROPOSEDATAFORMAT 屬性處理常式及其 實作 NewStream 方法應該接受該格式,而不論格式是指定為「其」的「其」是否為「其」的「顯示」。不論該格式是指定為「其」或「要求」XTENSIBLE 結構。

為了簡化格式資料的處理,驅動程式通常會使用 WAVEFORMATEXTENSIBLE 結構在內部表示格式。 這個方法可能需要將輸入的 WAVEFORMATEX 結構轉換成內部的「其為」的「其」,或將內部的「WAVEFORMATEXTENSIBLE」標記法轉換成輸出的「行行」結構。

在 GEOMETRATEXTENSIBLE 中, dwBitsPerSample 是容器大小, 而 wValidBitsPerSample 是每個樣本的有效資料位數目。 容器一律會在記憶體中對齊位元組,而且容器大小必須指定為八位的倍數。