Windows10 版本 20H2。
我遵循了每一步 - XAudio2 入门 - 如何:初始化 XAudio2。
链接在这里。 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;
我现在有什么可以做的吗?
答案 0 :(得分:0)
这里的问题似乎是在构建环境中混合了旧版 DirectX SDK 和较新的 Windows SDK 标头。
Windows 20H2 完全支持 XAudio2,包括它的各种 version。
来自停产 DirectX SDK 的旧版 XAudio 2.7 运行良好,所有使用它的旧版游戏和示例也是如此。它不是操作系统的一部分,必须通过旧的 DirectX End-User Runtime 包安装。见Not So DirectSetup。请勿尝试使用旧版 DirectX SDK 标头/库来构建 UWP 应用,因为它们不受支持。
XAudio 2.8 和 XAudio 2.9 都内置在操作系统中,因此这两个版本都可以正常工作。这些需要使用来自 Windows 8.x SDK 和/或 Windows 10 SDK 的标头。您还必须将 _WINNT_WIN32
设置为 0x0602
(Windows 8)、0x0603
(Windows 8.1) 或 0x0A00
(Windows 10) 否则这些标头会出错。见this blog post。
如果仅针对 Win32 桌面或 UWP 应用程序(或 Xbox One/S/X 和 Xbox Series X/S 开发)面向 Windows 10,请使用操作系统内置的 XAudio 2.9。
如果面向 Windows 7 SP1 或更高版本,请使用 XAudio2Redist 包,该包提供完整的 XAudio 2.9 支持和简单的并排 redist。这不需要使用旧版 DXSDK 或 DXSETUP。
如果面向 Windows 8 或更高版本,您可以使用 XAudio 2.8 内置或 XAudio2Redist 如果您希望 XAudio 2.9 支持 xWMA。
另见Where is the DirectX SDK (2021 Edition)?
<块引用>如果您不熟悉 XAudio2,您应该查看 DirectX Tool Kit for Audio,它包含在 DirectX 11 和 DirectX 12 软件包中。它是一个使用 XAudio2 和 X3DAudio 的开源轻量级音频库。它实现了一次性声音、带有可选混响的定位音频、语音管理、流音频和波库。它支持 PCM、ADPCM、xWMA 和 XMA2(仅限 Xbox)数据。见this blog post。