> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XDK 與 GDK 音訊 API 比較

> XBOX One Software Development Kit 與 Microsoft Game Development Kit 音訊 API 的比較

本主題說明 XBOX One Software Development Kit 中的音訊 API 如何針對 Microsoft Game Development Kit (GDK) 進行變更。

## 指導方針

* 為了協助確保使用者獲得最佳的遊戲體驗，請判斷端點是否支援多聲道音訊。首先，呼叫 [IAudioClient::IsFormatSupported](https://learn.microsoft.com/windows/desktop/api/audioclient/nf-audioclient-iaudioclient-isformatsupported)。如果不支援慣用的格式，請改為轉譯為混音格式 [IAudioClient::GetMixFormat](https://learn.microsoft.com/windows/desktop/api/audioclient/nf-audioclient-iaudioclient-getmixformat)。

* 遊戲不能只處理 7.1 端點，還必須能夠原生處理 2.0、5.1 和 7.1 端點，並在格式因音訊用戶端失效而變更時即時回應。如果遊戲不想提供三種 (依聲道數而定) 不同的音訊來源，可以在 Audioclient 初始化時使用 [AUDCLNT\_STREAMFLAGS\_AUTOCONVERTPCM](https://learn.microsoft.com/windows/desktop/coreaudio/audclnt-streamflags-xxx-constants) 串流旗標，要求作業系統代為執行升混與降混。即使遊戲要求作業系統執行升混與降混，仍會收到
  音訊用戶端失效通知，且必須對其做出回應。

* 若要列舉 (轉譯和擷取) 音訊裝置，請使用 [MMDevice API](https://learn.microsoft.com/windows/desktop/coreaudio/mmdevice-api)。如果只將音訊轉譯至主要 HDMI 端點，請呼叫 [GetDefaultAudioEndpoint](https://learn.microsoft.com/windows/win32/api/mmdeviceapi/nf-mmdeviceapi-immdeviceenumerator-getdefaultaudioendpoint)

* 在 XBOX 上，一次只從一個處理序轉譯音訊。

* XBOX Manager 遠端控制的設計是透過 [Windows Audio Session API ](/zh-TW/build/console-features/audio/overviews/wasapi-overview) (WASAPI) 支援音訊。不過，啟用 Dolby/DTS 家庭劇院設定時，它不支援來自 [ISpatialAudioClient](/zh-TW/build/console-features/audio/overviews/spatial-audio-overview) (ISAC) 的音訊串流。

* 如果用戶端應用程式所使用的音訊端點裝置變成無效，許多與 WASAPI 相關聯的方法可能會傳回錯誤碼 [AUDCLNT\_E\_DEVICE\_INVALIDATED](https://learn.microsoft.com/windows/win32/api/audioclient/nf-audioclient-iaudioclient-start)。請確保您的遊戲能正確回應這些錯誤，這些錯誤可能會在端點裝置有任何變更時發生。如需使用 WASAPI 從無效裝置錯誤中復原的詳細資訊，請參閱[這裡](https://learn.microsoft.com/windows/win32/coreaudio/recovering-from-an-invalid-device-error)。確認遊戲是否正確處理音訊裝置失效的簡單方法，是在遊戲執行時切換至音訊設定頁面，並變更 HDMI 裝置的聲道數。在失效案例中，WASAPI 可能會傳回下列錯誤碼：

  * AUDCLNT\_E\_DEVICE\_INVALIDATED

  * AUDCLNT\_E\_RESOURCES\_INVALIDATED

  * AUDCLNT\_E\_UNSUPPORTED\_FORMAT

  * AUDCLNT\_E\_ENDPOINT\_CREATE\_FAILED

* 當您的遊戲使用空間音效時，您將會與 ISAC API 互動，而這些 API 也會傳回與裝置失效相關的錯誤碼。對於 ISAC，當播放期間音訊端點變更或空間轉譯模式變更時，就會發生失效。如需使用 ISAC 從無效裝置錯誤中復原的詳細資訊，請參閱[這裡](https://learn.microsoft.com/windows/win32/coreaudio/recovering-from-an-invalid-device-error-spatial-sound)。當下列任何方法傳回下列其中一個值時，就會發生此情況。

  方法：

  * [ISpatialAudioObjectRenderStreamBase](https://learn.microsoft.com/windows/win32/api/spatialaudioclient/nn-spatialaudioclient-ispatialaudioobjectrenderstreambase)

  * [ISpatialAudioObjectRenderStream](https://learn.microsoft.com/windows/win32/api/spatialaudioclient/nn-spatialaudioclient-ispatialaudioobjectrenderstream)

  * [ISpatialAudioObjectRenderStreamForMetadata](https://learn.microsoft.com/windows/win32/api/spatialaudiometadata/nn-spatialaudiometadata-ispatialaudioobjectrenderstreamformetadata)

  * [ISpatialAudioObjectRenderStreamForHrtf](https://learn.microsoft.com/windows/win32/api/spatialaudiohrtf/nn-spatialaudiohrtf-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](https://learn.microsoft.com/windows/desktop/coreaudio/mmdevice-api) 取得 [IMMDevice](https://learn.microsoft.com/windows/win32/api/mmdeviceapi/nn-mmdeviceapi-immdevice) 之後，音訊裝置失效隨時可能發生。包括 [IMMDevice::Activate](https://learn.microsoft.com/windows/win32/api/mmdeviceapi/nf-mmdeviceapi-immdevice-activate) 在內的所有呼叫都可能傳回失效錯誤。每當遊戲遇到失效錯誤時，都應該先透過 [IMMDeviceEnumerator](https://learn.microsoft.com/windows/win32/api/mmdeviceapi/nf-mmdeviceapi-immdevice-activate) 取得新的 IMMDevice，以重新建立其音訊串流。

## API 中的變更

\| 目標平台| XBOX One Software Development Kit API| Microsoft Game Development Kit (GDK) API 替代項目| 描述|
\| --- | --- | --- | --- | --- | --- | --- | --- | --- |
\| PC 和 XBOX| ActivateAudioInterfaceAsync 和 IActivateAudioInterfaceAsync| [IMMDevice::Activate()](https://learn.microsoft.com/windows/desktop/api/mmdeviceapi/nf-mmdeviceapi-immdevice-activate)| 從 [IMMDevice](https://learn.microsoft.com/windows/desktop/api/Mmdeviceapi/nn-mmdeviceapi-immdevice) 同步啟用音訊用戶端。使用 [MMDevice API](https://learn.microsoft.com/windows/desktop/coreaudio/mmdevice-api) 列舉端點。|
\| PC 和 XBOX| IAudioClient2::RegisterXBoxVolumeNotificationCallback 和 IAudioClient2::UnregisterXBoxVolumeNotificationCallback| [AudioStateMonitor API](/zh-TW/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor)| 這些 API 先前的用途是在遊戲媒體串流遭到衰減時通知遊戲。新的做法是使用 [AudioStateMonitor API](/zh-TW/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor)。|
\| PC 和 XBOX| ExcludeFromGameDVRCapture| 不適用| 建立 [AudioClient](https://learn.microsoft.com/windows/desktop/api/audioclient/nf-audioclient-iaudioclient-initialize) 時，使用 AUDCLNT\_STREAMFLAGS\_EXCLUDE\_FROM\_GAMEDVR\_CAPTURE 作為 StreamFlags 常數。請包含 XAUDIO2XBOX.H。|
\| PC 和 XBOX| IMMGameDVRDeviceCreator| 不適用| 已淘汰。|
\| XBOX| IMMXBoxDevice| 不適用| 已淘汰。|
\| PC 和 XBOX| GetPnpId| 不適用| 已淘汰。|
\| XBOX| IMMXboxDeviceEnumerator| [IAudioClient::GetMixFormat](https://learn.microsoft.com/windows/desktop/api/audioclient/nf-audioclient-iaudioclient-getmixformat)| |
\| XBOX| GetHdAudioChannelCounts、RegisterChannelCountNotificationCallback 和 UnregisterChannelCountNotificationCallback| [IAudioClient::GetMixFormat](https://learn.microsoft.com/windows/desktop/api/audioclient/nf-audioclient-iaudioclient-getmixformat)| 如果端點格式變更，您的串流將會失效。下一次呼叫 [IAudioClient::GetMixFormat](https://learn.microsoft.com/windows/desktop/api/audioclient/nf-audioclient-iaudioclient-getmixformat) 時，將會傳回該端點適當的聲道數。|
\| XBOX| DisableBitStreamOut 和 RestoreBitstreamOut| 不適用| 已淘汰。|
\| PC 和 XBOX| EnableSpatialAudio| 不適用| 使用空間音效不再需要此呼叫。|
\| PC 和 XBOX| SetWasapiThreadAffinityMask| 不適用| 已淘汰。使用 XAudio2 的遊戲可以選擇透過 [XAudio2CreateWithSharedContexts](/zh-TW/reference/audio/xaudio2xbox/functions/xaudio2createwithsharedcontexts) 調整 *XAudio2Processor* 參數，以指定 XAudio2 在哪個處理器上執行。|

## 參考 API 文件

* [AudioStateMonitor (API 內容)](/zh-TW/reference/audio/audiostatemonitor/audiostatemonitor_members)
* [XAudio2Xbox (API 內容)](/zh-TW/reference/audio/xaudio2xbox/xaudio2xbox_members)
  * 函式
    * [XAudio2CreateWithSharedContexts](/zh-TW/reference/audio/xaudio2xbox/functions/xaudio2createwithsharedcontexts)

## 另請參閱

[Microsoft Game Development Kit 範例清單](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/development-downloads/gdk-samples-list)


## Related topics

- [XDK と GDK のオーディオ API の比較](/ja-jp/build/console-features/audio/overviews/comparison-of-xdk-and-gdk-audio-api.md)
- [設定並安裝 GDK](/zh-TW/home/setup-install/get-started.md)
- [PlayFab Party 版本資訊](/zh-TW/services/playfab/multiplayer/networking/release-notes.md)
- [XR-003 提交的遊戲品質](/zh-TW/publishing/certification/xr/xr-003.md)
- [XBOX 遊戲的 XBOX 需求](/zh-TW/publishing/certification/xbox-requirements.md)
