XAudio2Create 更新后失败 2021/4/20
XAudio2Create failed after the update 2021/4/20
Windows10 版本 20H2.
我遵循了每一步-开始使用 XAudio2-如何:初始化 XAudio2。
link 在这里。
https://docs.microsoft.com/en-us/windows/win32/xaudio2/getting-started
代码在更新前有效。
但是现在当我尝试做这样的事情时:
pXAudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx )
据说pSourceVoice的值为nullptr
我确定我已经完成了这里的所有这些代码。
Microsoft::WRL::ComPtr<IXAudio2> XAudio2;
HRESULT hr;
if ( FAILED(hr = XAudio2Create( &XAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) )
throw Platform::Exception::CreateException(hr);
IXAudio2MasteringVoice* pMasterVoice = nullptr;
if ( FAILED(hr = pXAudio2->CreateMasteringVoice( &pMasterVoice ) ) )
return hr;
现在有什么可以做的吗?
这里的问题似乎是在构建环境中混合使用了旧版 DirectX SDK 和较新的 Windows SDK headers。
XAudio2 在 Windows 20H2 上得到完全支持,包括它的各种 version。
来自 end-of-life DirectX SDK 的遗留 XAudio 2.7 运行良好,所有使用它的遗留游戏和示例也是如此。它不是操作系统的一部分,必须通过遗留 DirectX End-User Runtime 软件包安装。参见 Not So DirectSetup。请勿尝试使用旧版 DirectX SDK headers/libs 构建 UWP 应用程序,因为它们不受支持。
XAudio 2.8 和 XAudio 2.9 都内置在操作系统中,因此这些版本都可以正常工作。这些需要使用 Windows 8.x SDK and/or Windows 10 SDK 中的 headers。您还必须将 _WINNT_WIN32
设置为 0x0602
(Windows 8)、0x0603
(Windows 8.1) 或 0x0A00
(Windows 10) 否则这些 headers 会出错。参见 this blog post。
如果目标 Windows 10 仅适用于 Win32 桌面或 UWP 应用程序——或 Xbox One/S/X 和 Xbox Series X/S 开发——使用操作系统内置的 XAudio 2.9 .
如果目标是 Windows 7 SP1 或更高版本,请使用 XAudio2Redist 包,它通过简单的 side-by-side redist 提供完整的 XAudio 2.9 支持。 不需要使用旧版 DXSDK 或 DXSETUP。
如果目标是 Windows 8 或更高版本,您可以使用内置的 XAudio 2.8 或者 XAudio2Redist 如果您希望 XAudio 2.9 支持 xWMA。
另见 Where is the DirectX SDK (2021 Edition)?
If you are new to XAudio2, you should take a look at DirectX Tool Kit for Audio which is included in both the DirectX 11 and DirectX 12 packages. It's an open source, lightweight audio library that uses XAudio2 and X3DAudio. It implements one-shot sounds, positional audio with optional reverb, voice-management, streaming audio, and wavebanks. It supports PCM, ADPCM, xWMA, and XMA2 (Xbox only) data. See this blog post.
Windows10 版本 20H2.
我遵循了每一步-开始使用 XAudio2-如何:初始化 XAudio2。
link 在这里。 https://docs.microsoft.com/en-us/windows/win32/xaudio2/getting-started
代码在更新前有效。 但是现在当我尝试做这样的事情时:
pXAudio2->CreateSourceVoice( &pSourceVoice, (WAVEFORMATEX*)&wfx )
据说pSourceVoice的值为nullptr
我确定我已经完成了这里的所有这些代码。
Microsoft::WRL::ComPtr<IXAudio2> XAudio2;
HRESULT hr;
if ( FAILED(hr = XAudio2Create( &XAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) )
throw Platform::Exception::CreateException(hr);
IXAudio2MasteringVoice* pMasterVoice = nullptr;
if ( FAILED(hr = pXAudio2->CreateMasteringVoice( &pMasterVoice ) ) )
return hr;
现在有什么可以做的吗?
这里的问题似乎是在构建环境中混合使用了旧版 DirectX SDK 和较新的 Windows SDK headers。
XAudio2 在 Windows 20H2 上得到完全支持,包括它的各种 version。
来自 end-of-life DirectX SDK 的遗留 XAudio 2.7 运行良好,所有使用它的遗留游戏和示例也是如此。它不是操作系统的一部分,必须通过遗留 DirectX End-User Runtime 软件包安装。参见 Not So DirectSetup。请勿尝试使用旧版 DirectX SDK headers/libs 构建 UWP 应用程序,因为它们不受支持。
XAudio 2.8 和 XAudio 2.9 都内置在操作系统中,因此这些版本都可以正常工作。这些需要使用 Windows 8.x SDK and/or Windows 10 SDK 中的 headers。您还必须将 _WINNT_WIN32
设置为 0x0602
(Windows 8)、0x0603
(Windows 8.1) 或 0x0A00
(Windows 10) 否则这些 headers 会出错。参见 this blog post。
如果目标 Windows 10 仅适用于 Win32 桌面或 UWP 应用程序——或 Xbox One/S/X 和 Xbox Series X/S 开发——使用操作系统内置的 XAudio 2.9 .
如果目标是 Windows 7 SP1 或更高版本,请使用 XAudio2Redist 包,它通过简单的 side-by-side redist 提供完整的 XAudio 2.9 支持。 不需要使用旧版 DXSDK 或 DXSETUP。
如果目标是 Windows 8 或更高版本,您可以使用内置的 XAudio 2.8 或者 XAudio2Redist 如果您希望 XAudio 2.9 支持 xWMA。
另见 Where is the DirectX SDK (2021 Edition)?
If you are new to XAudio2, you should take a look at DirectX Tool Kit for Audio which is included in both the DirectX 11 and DirectX 12 packages. It's an open source, lightweight audio library that uses XAudio2 and X3DAudio. It implements one-shot sounds, positional audio with optional reverb, voice-management, streaming audio, and wavebanks. It supports PCM, ADPCM, xWMA, and XMA2 (Xbox only) data. See this blog post.