WASAPI没有声音输出

时间:2014-04-01 18:35:44

标签: visual-c++ wasapi

我遇到了WASAPI问题。它没有输出任何声音,我已经检查了写入缓冲区的数据。

由于它没有输出任何声音,我没有任何想法找出问题。

以下代码可能会遇到一些问题。

SoundStream::SoundStream() : writtenCursor(0), writeCursor(0), distroy(false)
{

    IMMDeviceEnumerator * pEnumerator = nullptr;
    HResult(CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, IID_PPV_ARGS(&pEnumerator)));

    IMMDevice * pDevice = nullptr;
    HResult(pEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice));
    SafeRelease(&pEnumerator);

    HResult(pDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&pAudioClient));
    SafeRelease(&pDevice);

    WAVEFORMATEXTENSIBLE * pwfx = nullptr;

    hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

    REFERENCE_TIME hnsRequestedDuration = REFTIMES_PER_SEC * 2;

    HResult(pAudioClient->GetMixFormat((WAVEFORMATEX**)&pwfx));

    HResult(pAudioClient->Initialize(
        AUDCLNT_SHAREMODE_SHARED,
        AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
        hnsRequestedDuration,
        0,
        (WAVEFORMATEX*)pwfx,
        NULL));

    pAudioClient->SetEventHandle(hEvent);

    channel = (size_t)pwfx->Format.nChannels;
    bits = (size_t)pwfx->Format.wBitsPerSample;
    validBits = (size_t)pwfx->Samples.wValidBitsPerSample;
    frequency = (size_t)pwfx->Format.nSamplesPerSec;
    buffer.reshape({ 0, channel, bits >> 3 });

    CoTaskMemFree(pwfx);

    HResult(pAudioClient->GetBufferSize(&bufferFrameCount));
    HResult(pAudioClient->Start());

    if (pAudioClient)
    {
        thread = std::thread([&]()
        {
            this->Sync();
        });
    }

}

2 个答案:

答案 0 :(得分:0)

您可以在http://jdmcox.com查看我的WASAPI.cpp代码(工作正常)。

答案 1 :(得分:0)

您可以在http://jdmcox.com再次查看我的WASAPI.cpp代码。 现在它可以在共享模式和独占模式下工作。 我应该注意,在共享模式下不需要转换波形或波形--Windows会负责转换为用于混合波形的格式。