gpt4 book ai didi

c++ - WASAPI:为独占输出选择波形格式

转载 作者:太空狗 更新时间:2023-10-29 20:40:48 27 4
gpt4 key购买 nike

我正在尝试使用 WASAPI 通过输出设备打开独占流。我在选择可接受的格式时遇到问题,因为似乎没有关于给定设备接受哪些格式的提示。

在我的例子中,IAudioClient::GetMixFormat(),否则会返回设备的一种默认格式,返回一种不能在独占模式下使用的格式( IAudioClient::IsFormatSupported() 返回 AUDCLNT_E_UNSUPPORTED_FORMAT)。我不知道从那里去哪里。波形格式参数的组合数量多得离谱 - 我真的必须遍历每一个参数直到有效果吗?

最佳答案

好吧,我问了 MSDN 论坛,他们给出了一个很好的答案。

您需要通过 IMMDevice::OpenPropertyStore() 和随后的 IPropertyStore::GetValue() 检查设备的默认设备格式,而不是 IAudioClient::GetMixFormat()。以下是检索可接受的 WAVEFORMATEX 结构的代码:

//CoInitialize/Enumerate devices

IPropertyStore* store = nullptr;

hr = device->OpenPropertyStore(STGM_READ, &store);

if (FAILED(hr)) {
ExitProcess(1);
}

PROPVARIANT prop;

hr = store->GetValue(PKEY_AudioEngine_DeviceFormat, &prop);

if (FAILED(hr)) {
ExitProcess(2);
}

hr = device->Activate (
__uuidof(IAudioClient),
CLSCTX_ALL,
NULL,
(void**)&audioClient
);

device->Release();
device = nullptr;

if (FAILED(hr)) {
ExitProcess(3);
}

hr = audioClient->IsFormatSupported (
AUDCLNT_SHAREMODE_EXCLUSIVE,
(PWAVEFORMATEX)prop.blob.pBlobData,
NULL
);

if (FAILED(hr)) {
ExitProcess(4);
}

hr的最终值为S_OK。

关于c++ - WASAPI:为独占输出选择波形格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com