Skip to main content
本主题介绍 XBOX One 软件开发工具包中的音频 API 在 Microsoft Game Development Kit (GDK) 中所做的变化。

指南

  • 为了确保用户获得尽可能好的游戏体验,请判断音频端点是否支持多声道音频。首先调用 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 交互,它们同样会返回与设备失效相关的错误码。对 ISAC 而言,失效发生在音频端点被更改或播放期间空间渲染模式发生变化时。有关从 ISAC 无效设备错误中恢复的更多信息,请参见 此处。当下列任一方法返回下列任一值时会发生这种情况。 方法: 值:
    • 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 并重建其音频流。

API 变更

| 目标平台| XBOX One 软件开发工具包 API| Microsoft Game Development Kit (GDK) 中的替代 API| 说明| | --- | --- | --- | --- | --- | --- | --- | --- | --- | | PC 和 XBOX| ActivateAudioInterfaceAsync 与 IActivateAudioInterfaceAsync| IMMDevice::Activate()| 用于从 IMMDevice 同步激活音频客户端。请使用 MMDevice API 枚举端点。| | PC 和 XBOX| IAudioClient2::RegisterXBoxVolumeNotificationCallback 与 IAudioClient2::UnregisterXBoxVolumeNotificationCallback| AudioStateMonitor API| 这些 API 以前用于向游戏通知游戏媒体流被衰减。新的做法是使用 AudioStateMonitor API。| | PC 和 XBOX| ExcludeFromGameDVRCapture| 不适用| 在创建 AudioClient 时使用 AUDCLNT_STREAMFLAGS_EXCLUDE_FROM_GAMEDVR_CAPTURE 作为 StreamFlags 常量。需包含 XAUDIO2XBOX.H。| | PC 和 XBOX| IMMGameDVRDeviceCreator| 不适用| 已弃用。| | XBOX| IMMXBoxDevice| 不适用| 已弃用。| | PC 和 XBOX| GetPnpId| 不适用| 已弃用。| | XBOX| IMMXboxDeviceEnumerator| IAudioClient::GetMixFormat| | | XBOX| GetHdAudioChannelCounts、RegisterChannelCountNotificationCallback 与 UnregisterChannelCountNotificationCallback| IAudioClient::GetMixFormat| 如果端点格式发生变化,你的流将失效。下一次调用 IAudioClient::GetMixFormat 会返回该端点对应的声道数。| | XBOX| DisableBitStreamOut 与 RestoreBitstreamOut| 不适用| 已弃用。| | PC 和 XBOX| EnableSpatialAudio| 不适用| 使用空间音效时不再需要该调用。| | PC 和 XBOX| SetWasapiThreadAffinityMask| 不适用| 已弃用。使用 XAudio2 的游戏可以通过 XAudio2CreateWithSharedContexts 调整 XAudio2Processor 参数,指定 XAudio2 运行在哪个处理器上。|

参考 API 文档

另请参阅

Microsoft Game Development Kit 示例列表
最后修改于 2026年8月24日