DirectX SDK,2010年6月:每个应用退出时XAudio2都会崩溃

时间:2019-05-11 15:16:34

标签: c++ directx-9 xaudio2

我正在开发基于Direct3D 9和XAudio 2.7的C ++游戏引擎。每次退出测试游戏时,我都会遇到相同的问题:XAudio崩溃。我确定是导致该问题的特定组件,因为当我删除对初始化的调用时,游戏退出就没有任何问题。

Exception box

我不知道为什么,我设置了所有基本代码(初始化,掌握语音,音频组件,清除所有缓冲区并使用-> Release();关机),在有和没有XAudio 3D的情况下都尝试过。

如果您已经体验过,欢迎您的帮助。 谢谢。

我正在运行Windows 10 Pro 64位

代码:

AudioEngineXA2::AudioEngineXA2()
{
    m_xaudio2 = 0;
    m_xa2MasteringVoice = 0;

    m_x3d = 0;
}

void AudioEngineXA2::initialize()
{
    if ( XAudio2Create( &m_xaudio2, 0 ) < 0 || m_xaudio2->CreateMasteringVoice( &m_xa2MasteringVoice ) < 0 )
    {
        cout << "XAudio2 initialization failed!" << endl;
        return;
    }

    //X3DAudioInitialize( SPEAKER_STEREO, X3DAUDIO_SPEED_OF_SOUND, (unsigned char*) m_x3d );

    // Uncommenting this part doesn't help either
    /*XAUDIO2_DEVICE_DETAILS* devdet = 0;
    m_xaudio2->GetDeviceDetails(0, devdet);

    float* matrix = new float[devdet->OutputFormat.Format.nChannels];
    DSPSettings.SrcChannelCount = 1;
    DSPSettings.DstChannelCount = devdet->OutputFormat.Format.nChannels;
    DSPSettings.pMatrixCoefficients = matrix;*/
}

void AudioEngineXA2::cleanup()
{
    m_xa2MasteringVoice->DestroyVoice();

    m_xaudio2->StopEngine();
    m_xaudio2->Release();
    //if ( m_x3d ) { delete[] m_x3d; m_x3d = 0; }
}

2 个答案:

答案 0 :(得分:0)

要记住的关于XAudio2的关键一点是,许多功能都是异步的,并且应用程序开发人员负责使源音频内存保持“活动”状态,直到XAudio2完成为止。因此,您必须非常小心使用寿命和关闭时间。

  

您可能想看看DirectX Tool Kit for Audio,它具有用于XAudio2的基本音频管理器和播放系统。

您所描述的问题听起来很像XAudio 2.7的一生问题:有关详细信息和解决方法,请参见this blog post

对Windows Vista的支持没有太多价值,但是Windows 7 Service Pack 1仍然需要使用XAudio 2.7和legacy DirectX SDKlegacy DirectSetup REDIST。如果最低版本是Windows 8.x或Windows 10,则可以依靠XAudio 2.8或2.9作为操作系统的一部分提供。有关此处的详细信息,请参见this blog post

答案 1 :(得分:0)

因此,我最终查看了DirectX SDK示例,发现XAudio2的初始化(和取消初始化)还需要另外两行,而在整个Internet上所有XAudio2教程中基本上都没有提到

您需要调用“ CoInitializeEx(0,COINIT_MULTITHREADED);”在“ XAudio2Create();”之前和“ CoUninitialize();”释放XAudio2之后。