指南
- 为了确保用户获得尽可能好的游戏体验,请判断音频端点是否支持多声道音频。首先调用 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 无效设备错误中恢复的更多信息,请参见 此处。当下列任一方法返回下列任一值时会发生这种情况。
方法:
- 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 并重建其音频流。
