IAudioClient::GetMixFormat 方法 (audioclient.h)

GetMixFormat 方法會擷取音訊引擎用於其共用模式數據流內部處理的數據流格式。

語法

HRESULT GetMixFormat(
  [out] WAVEFORMATEX **ppDeviceFormat
);

參數

[out] ppDeviceFormat

指標變數的指標,方法會將混合格式的位址寫入其中。 此參數必須是指針變數的有效非 NULL 指標。 方法會將 其 ADDRESSATEX (或 WAVEFORMATEXTENSIBLE) 結構寫入此變數。 方法會配置 結構的記憶體。 呼叫端會藉由呼叫 CoTaskMemFree 函式,負責釋出不再需要的記憶體。 如果 GetMixFormat 呼叫失敗, *ppDeviceFormatNULL。 如需 有關其為「其」「SQLATEXTENSIBLE」和 「CoTaskMemFree」的詳細資訊,請參閱 Windows SDK 檔。

傳回值

如果方法成功,它會傳回 S_OK。 如果失敗,可能的傳回碼包括,但不限於下表所示的值。

傳回碼 Description
AUDCLNT_E_DEVICE_INVALIDATED
音訊端點裝置已解除叢集,或音訊硬體或相關聯的硬體資源已重新設定、停用、移除,否則無法使用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音訊服務未執行。
E_POINTER
參數 ppDeviceFormatNULL
E_OUTOFMEMORY
記憶體不足。

備註

用戶端可以在呼叫 IAudioClient::Initialize 方法之前呼叫這個方法。 為音訊端點裝置建立共用模式數據流時, Initialize 方法一律接受從相同裝置上的 GetMixFormat 呼叫取得的數據流格式。

混合格式是音訊引擎在內部用於共用模式數據流數字處理的格式。 此格式不一定是音訊端點裝置所支援的格式。 因此,呼叫端可能無法成功建立具有 透過呼叫 GetMixFormat 取得格式的獨佔模式數據流。

例如,為了促進數位音訊處理,音訊引擎可能會使用混合格式,將樣本表示為浮點值。 如果裝置只支援整數 PCM 範例,則引擎會在裝置與引擎之間的連線上,將樣本轉換成或從整數 PCM 值。 不過,為了避免重新取樣,引擎可能會使用混合格式搭配裝置支援的取樣率。

若要判斷 Initialize 方法是否可以建立具有特定格式的共用模式或獨佔模式數據流,請呼叫 IAudioClient::IsFormatSupported 方法。

它本身無法指定通道與說話者位置的對應。 此外,雖然 WAVEFORMATEX 會指定每個音訊樣本的容器大小,但它無法在樣本中指定精確度的位數 (,例如,24 位容器中的 20 位有效位數) 。 不過, WAVEFORMATEXTENSIBLE 結構可以同時指定通道與喇叭的對應,以及每個樣本中精確度的位數。 基於這個理由, GetMixFormat 方法會擷取格式描述元,該描述元的格式格式為 一種其格式 ,而不是獨立 的WAVEFORMATEX 結構。 透過 ppDeviceFormat 參數,此方法會將指標輸出到此其其開始的其內嵌於此 WAVEFORMATEXTENSIBLE 結構開頭的指標。 如需關於其與其產生方式的詳細資訊,請參閱 Windows DDK 檔。

如需 GetMixFormat 方法的詳細資訊,請參閱 裝置格式。 如需呼叫 GetMixFormat 的程式代碼範例,請參閱下列主題:

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 audioclient.h

另請參閱

IAudioClient 介面

IAudioClient::Initialize

IAudioClient::IsFormatSupported