> ## 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 软件开发工具包与 Microsoft Game Development Kit 音频 API 对比

本主题介绍 XBOX One 软件开发工具包中的音频 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](/build/console-features/audio/overviews/wasapi-overview) (WASAPI) 支持音频。但当激活 Dolby/DTS 家庭影院设置时，它不支持 [ISpatialAudioClient](/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 交互，它们同样会返回与设备失效相关的错误码。对 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 软件开发工具包 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](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor)| 这些 API 以前用于向游戏通知游戏媒体流被衰减。新的做法是使用 [AudioStateMonitor API](/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](/reference/audio/xaudio2xbox/functions/xaudio2createwithsharedcontexts) 调整 *XAudio2Processor* 参数，指定 XAudio2 运行在哪个处理器上。|

## 参考 API 文档

* [AudioStateMonitor (API 内容)](/reference/audio/audiostatemonitor/audiostatemonitor_members)
* [XAudio2Xbox (API 内容)](/reference/audio/xaudio2xbox/xaudio2xbox_members)
  * Functions
    * [XAudio2CreateWithSharedContexts](/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

- [AudioStateMonitor](/zh-CN/reference/audio/audiostatemonitor/audiostatemonitor_members.md)
- [WASAPI](/zh-CN/build/console-features/audio/overviews/wasapi-overview.md)
- [XBOX Series X|S 音频硬件概述](/zh-CN/build/console-features/audio/overviews/scarlett-audio.md)
- [Connected Storage 与 Title Storage 对比](/zh-CN/services/xbox-services/storage/live-connected-storage-vs-title-storage.md)
- [音频概述](/zh-CN/build/console-features/audio/overviews/audio.md)
