Мой код выглядит примерно так:
Код: Выделить всё
int main() {
init_apartment();
com_ptr deviceEnumerator;
check_hresult(CoCreateInstance(
__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,
__uuidof(IMMDeviceEnumerator), deviceEnumerator.put_void()));
com_ptr device;
check_hresult(deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, device.put()));
com_ptr audioClient;
check_hresult(device->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, audioClient.put_void()));
std::unique_ptr format;
check_hresult(audioClient->GetMixFormat(std::out_ptr(format)));
assertMixFormat(format.get());
check_hresult(audioClient->Initialize(
AUDCLNT_SHAREMODE_SHARED,
AUDCLNT_STREAMFLAGS_LOOPBACK,
0, 0, format.get(), NULL));
while (true) {
auto nextPacketSize = [&] {
UINT32 packetSize = 0;
check_hresult(captureClient->GetNextPacketSize(&packetSize));
return packetSize;
};
while (nextPacketSize() > 0) {
BYTE* pData = nullptr;
UINT32 numFrames = 0;
DWORD flags = 0;
check_hresult(captureClient->GetBuffer(&pData, &numFrames, &flags, NULL, NULL));
auto samples = reinterpret_cast(pData);
for (std::size_t i = 0; i < numFrames; ++i) {
//process samples
}
check_hresult(captureClient->ReleaseBuffer(numFrames));
}
}
}

Подробнее здесь: https://stackoverflow.com/questions/798 ... i-loopback