微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新后 XAudio2Create 失败 2021/4/20

如何解决更新后 XAudio2Create 失败 2021/4/20

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,xaudio2_DEFAULT_PROCESSOR ) ) )
    throw Platform::Exception::CreateException(hr);

Ixaudio2MasteringVoice* pMasterVoice = nullptr;
if ( Failed(hr = pxaudio2->CreateMasteringVoice( &pMasterVoice ) ) )
    return hr;

我现在有什么可以做的吗?

解决方法

这里的问题似乎是在构建环境中混合了旧版 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 11DirectX 12 软件包中。它是一个使用 XAudio2 和 X3DAudio 的开源轻量级音频库。它实现了一次性声音、带有可选混响的定位音频、语音管理、流音频和波库。它支持 PCM、ADPCM、xWMA 和 XMA2(仅限 Xbox)数据。见this blog post

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。