首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WASAPI:选择用于独占输出的波形格式

WASAPI:选择用于独占输出的波形格式
EN

Stack Overflow用户
提问于 2014-03-24 17:52:15
回答 1查看 2.5K关注 0票数 3

我试图使用WASAPI打开一个带有输出设备的独占流。我在选择一种可接受的格式时遇到了困难,因为似乎没有迹象表明给定设备接受了哪些格式。

在我的示例中,IAudioClient::GetMixFormat()将返回某种默认的设备格式,返回不能在独占模式下使用的格式(IAudioClient::IsFormatSupported()返回AUDCLNT_E_UNSUPPORTED_FORMAT)。我不知道从那里往哪里走。有一个可笑的组合的波形格式参数-我真的必须遍历每一个它们,直到有什么工作?

EN

Stack Overflow用户

回答已采纳

发布于 2014-03-26 23:44:47

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

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

代码语言:javascript
运行
复制
//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。

票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22616924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档