指導方針
- 為了協助確保使用者獲得最佳的遊戲體驗,請判斷端點是否支援多聲道音訊。首先,呼叫 IAudioClient::IsFormatSupported。如果不支援慣用的格式,請改為轉譯為混音格式 IAudioClient::GetMixFormat。
- 遊戲不能只處理 7.1 端點,還必須能夠原生處理 2.0、5.1 和 7.1 端點,並在格式因音訊用戶端失效而變更時即時回應。如果遊戲不想提供三種 (依聲道數而定) 不同的音訊來源,可以在 Audioclient 初始化時使用 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 串流旗標,要求作業系統代為執行升混與降混。即使遊戲要求作業系統執行升混與降混,仍會收到 音訊用戶端失效通知,且必須對其做出回應。
- 若要列舉 (轉譯和擷取) 音訊裝置,請使用 MMDevice API。如果只將音訊轉譯至主要 HDMI 端點,請呼叫 GetDefaultAudioEndpoint
- 在 XBOX 上,一次只從一個處理序轉譯音訊。
- XBOX Manager 遠端控制的設計是透過 Windows Audio Session API (WASAPI) 支援音訊。不過,啟用 Dolby/DTS 家庭劇院設定時,它不支援來自 ISpatialAudioClient (ISAC) 的音訊串流。
-
如果用戶端應用程式所使用的音訊端點裝置變成無效,許多與 WASAPI 相關聯的方法可能會傳回錯誤碼 AUDCLNT_E_DEVICE_INVALIDATED。請確保您的遊戲能正確回應這些錯誤,這些錯誤可能會在端點裝置有任何變更時發生。如需使用 WASAPI 從無效裝置錯誤中復原的詳細資訊,請參閱這裡。確認遊戲是否正確處理音訊裝置失效的簡單方法,是在遊戲執行時切換至音訊設定頁面,並變更 HDMI 裝置的聲道數。在失效案例中,WASAPI 可能會傳回下列錯誤碼:
- AUDCLNT_E_DEVICE_INVALIDATED
- AUDCLNT_E_RESOURCES_INVALIDATED
- AUDCLNT_E_UNSUPPORTED_FORMAT
- AUDCLNT_E_ENDPOINT_CREATE_FAILED
-
當您的遊戲使用空間音效時,您將會與 ISAC API 互動,而這些 API 也會傳回與裝置失效相關的錯誤碼。對於 ISAC,當播放期間音訊端點變更或空間轉譯模式變更時,就會發生失效。如需使用 ISAC 從無效裝置錯誤中復原的詳細資訊,請參閱這裡。當下列任何方法傳回下列其中一個值時,就會發生此情況。
方法:
- ISpatialAudioObjectRenderStreamBase
- ISpatialAudioObjectRenderStream
- ISpatialAudioObjectRenderStreamForMetadata
- ISpatialAudioObjectRenderStreamForHrtf
- SPTLAUDCLNT_E_DESTROYED
- AUDCLNT_E_DEVICE_INVALIDATED
- AUDCLNT_E_RESOURCES_INVALIDATED
- AUDCLNT_E_UNSUPPORTED_FORMAT
- SPTLAUDCLNT_E_INTERNAL 此外,當主機設定為使用空間格式 (例如 Windows Sonic for Headphones) 時,在控制器上插入或拔除耳機很可能會引發這些事件。
- 從 MMDevice API 取得 IMMDevice 之後,音訊裝置失效隨時可能發生。包括 IMMDevice::Activate 在內的所有呼叫都可能傳回失效錯誤。每當遊戲遇到失效錯誤時,都應該先透過 IMMDeviceEnumerator 取得新的 IMMDevice,以重新建立其音訊串流。
