Windows10版本20H2。
我遵循了每一步开始使用XAudio2如何:初始化XAudio2。
链接在这里。https://learn.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头的混合。
XAudio2在Windows 20H2上完全支持,包括它的各种版本。
来自报废DirectX SDK的旧版XAudio 2.7运行良好,所有使用它的旧版游戏和示例也是如此。它不是操作系统的一部分,必须通过旧版DirectX最终用户运行时软件包安装。请参见Not So DirectSetup。不要尝试使用旧版DirectX SDK头/lib来构建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(,否则这些标头将出错。请参阅此博客文章。
如果Windows 10仅用于Win32桌面或UWP应用程序,或Xbox One/S/X和Xbox Series X/S开发,请使用内置于操作系统中的XAudio 2.9。
如果目标是Windows 7 SP1或更高版本,请使用XAudio2Redist软件包,该软件包通过简单的并排redist提供完整的XAudio 2.9支持。此不需要使用旧版DXSDK或DXSETUP。
如果目标是Windows 8或更高版本,如果您希望XAudio 2.9支持xWMA,则可以使用内置的XAudio 2.8或XAudio 2Redist。
另请参阅DirectX SDK(2021版(在哪里?
如果您是XAudio2的新手,您应该查看DirectX 11和DirectX 12软件包中包含的DirectX音频工具包。这是一个开源、轻量级的音频库,使用XAudio2和X3DAudio。它实现了一次性声音、带可选混响的位置音频、语音管理、流音频和波形库。它支持PCM、ADPCM、xWMA和XMA2(仅限Xbox(数据。请参阅此博客文章。