+ -
当前位置:首页 → 问答吧 → wasapi

wasapi

时间:2014-04-22

来源:互联网

不知道为甚么会完全冇声

冇声的话连debug都做唔到
复制内容到剪贴板代码:SoundStream::SoundStream(_AUDCLNT_SHAREMODE ShareMode)
: 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);

if (ShareMode == AUDCLNT_SHAREMODE_SHARED)
{

REFERENCE_TIME hnsRequestedDuration = REFTIMES_PER_SEC * 2;

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

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

} else
{

REFERENCE_TIME hnsRequestedDuration;

HResult(GetStreamFormat(pAudioClient, &pwfx));

HResult(pAudioClient->GetDevicePeriod(NULL, &hnsRequestedDuration));

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

HResult(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();
});
}

}

作者: Susan﹏汪汪   发布时间: 2014-04-22

找出原因了....原来WAVEFORMATEXTENSIBLE 的SubFormat系可能系float

汪汪一直以为只会有integer format

作者: Susan﹏汪汪   发布时间: 2014-04-22