IXAudio2 :: CreateSourceVoice方法失败

时间:2014-10-28 21:17:21

标签: xaudio2

我正在尝试按照此处列出的步骤使用XAudio2和C ++播放基本音效: http://msdn.microsoft.com/en-us/library/windows/desktop/ee415762%28v=vs.85%29.aspx

在我看来,好像XAudio2正在正确初始化并且正在创建母带语音。然后我填充了WAVEFORMATEX结构和XAUDIO2_BUFFER结构。

目前,我被困在CreateSourceVoice()方法上。它返回HRESULT 0x88960003,MSDN表示是XAUDIO2_E_XAPO_CREATION_FAILED结果。然而,我无法弄清楚的是导致它失败的原因。有没有办法从XAudio2方法生成更多有用的错误消息,那些可能在调试中有用的方法?这种方法失败的常见原因是什么?我还没有找到关于这个问题的任何详细信息。

以下是我初始化XAudio2的方法:

    HRESULT hr;

    if (FAILED(hr = XAudio2Create(&xAudio, 0, XAUDIO2_DEFAULT_PROCESSOR)))
    {

        return hr;

    }

    if (FAILED(hr = xAudio->CreateMasteringVoice(&masteringVoice)))
    {

        return hr;

    }

    return S_OK;

以下是我填充结构的方式:

HANDLE hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

    if (INVALID_HANDLE_VALUE == hFile)
    {

        return HRESULT_FROM_WIN32(GetLastError());

    }

    if (INVALID_SET_FILE_POINTER == SetFilePointer(hFile, 0, NULL, FILE_BEGIN))
    {

        return HRESULT_FROM_WIN32(GetLastError());

    }

    DWORD dwChunkSize;
    DWORD dwChunkPosition;

    FindChunk(hFile, fourccRIFF, dwChunkSize, dwChunkPosition);

    DWORD fileType;

    ReadChunkData(hFile, &fileType, sizeof(DWORD), dwChunkPosition);

    if (fileType != fourccWAVE)
    {

        return S_FALSE;

    }

    FindChunk(hFile, fourccFMT, dwChunkSize, dwChunkPosition);
    ReadChunkData(hFile, wfx, dwChunkSize, dwChunkPosition);

    FindChunk(hFile, fourccDATA, dwChunkSize, dwChunkPosition);

    BYTE* dataBuffer = new BYTE[dwChunkSize];
    ReadChunkData(hFile, dataBuffer, dwChunkSize, dwChunkPosition);

    buffer->AudioBytes = dwChunkSize;
    buffer->pAudioData = dataBuffer;
    buffer->Flags = XAUDIO2_END_OF_STREAM;

    return S_OK;

然后我调用CreateSourceVoice(),但调用后sourceVoice为NULL:

DXHelpers::XAudioManager::GetManager()->GetXAudio()->CreateSourceVoice(&sourceVoice, (WAVEFORMATEX*)&wfx);

0 个答案:

没有答案