> ## 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.

# XAudio2CreateWithSharedContexts

> XAudio2CreateWithSharedContexts

# XAudio2CreateWithSharedContexts

创建一个新的 XAudio2 对象,并返回指向其 IXAudio2 接口的指针。

## Syntax

```cpp theme={null}
XAUDIO2_STDAPI XAudio2CreateWithSharedContexts(  
         IXAudio2** ppXAudio2,  
         UINT32 Flags,  
         XAUDIO2_PROCESSOR XAudio2Processor,  
         const PXAUDIO2_SHARED_SHAPE_CONTEXTS SharedShapeContexts  
)  
```

### Parameters

*ppXAudio2*   \_Outptr\_\
Type: IXAudio2\*\*

如果操作成功,则返回指向 IXAudio2 对象的指针。

*Flags*   \_In\_\
Type: UINT32

指定 IXAudio2 对象行为的标志。

| 标志                                       | 说明                                                 |
| ---------------------------------------- | -------------------------------------------------- |
| XAUDIO2\_DO\_NOT\_USE\_SHAPE             | 用于阻止引擎或语音使用可扩展硬件音频处理引擎 (SHAPE),包括 XBOX 媒体音频 (XMA)。 |
| XAUDIO2\_DO\_NOT\_SHARE\_SHAPE\_CONTEXTS | 用于强制独占使用所提供的 SHAPE 上下文。其他引擎实例将不会共享这些上下文。           |

*XAudio2Processor*   \_In\_\
Type: XAUDIO2\_PROCESSOR

一个 XAUDIO2\_PROCESSOR 类型的值,用于指定要使用的 CPU。传递 XAUDIO2\_USE\_DEFAULT\_PROCESSOR 可让 XAudio2 在运行时选择理想的处理器。

指定处理器可能会干扰调度程序在多个处理器间高效调度线程的能力。建议改为传递 XAUDIO2\_USE\_DEFAULT\_PROCESSOR 值。

*SharedShapeContexts*   \_In\_\
Type: PXAUDIO2\_SHARED\_SHAPE\_CONTEXTS

指向 SHARED\_SHAPE\_CONTEXTS 的指针。此参数仅适用于 XBOX One,允许游戏与 XAudio2 共享 SHAPE 和 XMA 资源。默认值为 NULL。

### Return value

Type: XAUDIO2\_STDAPI

如果函数成功,则返回 `S_OK`。如果一个或多个参数无效,则该函数返回错误代码。

## Remarks

`XAudio2CreateWithSharedContexts` 的工作方式与 `XAudio2Create` 函数相同。它增加了一个额外参数,以允许 XBOX One 上的可扩展硬件音频处理引擎 (SHAPE) 状态在多个 IXAudio2 实例之间共享。`PXAUDIO2_SHARED_SHAPE_CONTEXTS` 是指向共享状态的指针。XAudio2 使用 SHAPE 上下文进行 XMA 播放。作为一项功能,XMA 是随 XBOX 360 引入的。如果你在游戏的 XBOX 360 版本中,或在基于较早的 XBOX One 软件开发工具包的 XBOX One 游戏中使用 XAudio2 来播放 XMA 音频,则务必了解 Microsoft 游戏开发工具包 (GDK) 仍然支持 XMA 和 SHAPE 上下文。

若要播放 XMA 格式的音频,你的应用不必使用 `XAudio2CreateWithSharedContexts` 标志,因为 XAudio2 实例会创建自己的 SHAPE 上下文。`XAudio2CreateWithSharedContexts` 针对具有多个 XAudio2 实例的应用进行了优化。它允许应用分配一组 SHAPE 上下文,并在多个实例之间高效共享它们。

<Note>`XAudio2Processor` 参数应使用 `XAUDIO2_USE_DEFAULT_PROCESSOR` 指针来允许系统进行适当的处理器选择,除非应用被设计为选择特定的处理器。</Note>

`XAudio2Create` 参数和 `XAudio2CreateWithSharedContexts` 函数使用的标志适用于仅播放 XMA 格式音频的游戏。如果使用了 `XAUDIO2_DO_NOT_USE_SHAPE` 标志,应用将无法播放 XMA 内容。在 XBOX 360 上,XMA 音频在软件或硬件中解码,这需要 SHAPE 上下文。新版本的 Microsoft 游戏开发工具包 (GDK) 支持在硬件中解码 XMA。指定此标志将实际上导致 XMA 播放中断。

如果函数调用其自己的 SHAPE 上下文,则使用 `XAUDIO2_DO_NOT_SHARE_SHAPE_CONTEXTS` 标志来指定 SHAPE 上下文仅由此 XAudio2 实例独占使用。在不提供 SHAPE 上下文时(例如通过调用 `XAudio2Create`),不建议指定此标志,因为当 XAudio2 创建自己的 SHAPE 上下文时,它们是共享的。

你还可以使用 `XAUDIO2_EXCLUDE_FROM_GAME_DVR_CAPTURE` 标志。设置此标志可防止游戏 DVR 录制来自主音频的音频。

标头还定义了 `AUDCLNT_STREAMFLAGS_EXCLUDE_FROM_GAME_DVR_CAPTURE` 标志。将此标志传递给 `IAudioClient::Initialize` 可禁止游戏 DVR 录制该 *IAudioClient* 播放的音频。如果你的游戏使用 XAudio2,则应改用 `XAUDIO2_EXCLUDE_FROM_GAME_DVR_CAPTURE` 标志来实现此目的。

有关详细信息,请参阅 [XAudio2 入门](https://learn.microsoft.com/windows/win32/xaudio2/getting-started?redirectedfrom=MSDN)。

## Requirements

**头文件:** xaudio2Xbox.h

**库:** xaudio2.lib

**支持的平台:** XBOX One 系列主机和 XBOX Series 主机

## Conceptual documentation

* [XBOX One 软件开发工具包与 Microsoft 游戏开发工具包 (GDK) 音频 API 的比较](/build/console-features/audio/overviews/comparison-of-xdk-and-gdk-audio-api)

## See also

[XAudio2 概述](/build/console-features/audio/overviews/xaudio2-overview)\
[XAudio2 关键概念](https://learn.microsoft.com/windows/win32/xaudio2/xaudio2-key-concepts)\
[xaudio2xbox](/reference/audio/xaudio2xbox/xaudio2xbox_members)


## Related topics

- [SHARED_SHAPE_CONTEXTS](/zh-CN/reference/audio/acphal/structs/shared_shape_contexts.md)
- [XDK 与 GDK 音频 API 对比](/zh-CN/build/console-features/audio/overviews/comparison-of-xdk-and-gdk-audio-api.md)
- [使用 XAudio2 播放声音](/zh-CN/build/console-features/audio/overviews/xaudio2-play-sound.md)
- [OpenSharedHandleByName](/zh-CN/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_opensharedhandlebyname_public.md)
- [OpenSharedHandle](/zh-CN/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_opensharedhandle_public.md)
