【发布时间】:2021-02-14 22:13:15
【问题描述】:
是否可以在 Win32 中获取声卡列表(不是端点)?
此信息在构建全双工音频流时非常有用,可确保输入和输出共享相同的硬件时钟。
到目前为止,我找到了PKEY_DeviceInterface_FriendlyName,它很接近,但在插入 2 个完全相同的声卡时可能无法使用。
我还找到了Enumerating audio adapters in WinAPI,虽然已接受答案中的 WMI 查询检索到我正在寻找的结果,但我认为没有简单的方法可以将这些结果与 WASAPI 端点设备 ID 相关联。
【问题讨论】:
-
PKEY_AudioEndpoint_GUID可能会有所帮助,因为它将 WASAPI 端点 ID 映射到 DirectSound GUID,从而打开了更多功能来查询信息。 docs.microsoft.com/en-us/windows/win32/coreaudio/… -
这是否基本上让我从该 guid 创建 IDirectSound8,然后查询 DSCAPS/DSCCAPS (docs.microsoft.com/en-us/previous-versions/windows/desktop/…)?我在 DirectSound 中没有看到比 WASAPI 提供的更多信息,我是否遗漏了什么?
-
DSCAPS 看起来比您从
IMMDevice获得的信息要多得多,但我仍然没有看到任何可以直接或直接或通过推理。只是想我会提到它,以防你已经熟悉在 DirectSound 中这样做。 -
我明白了,谢谢。不幸的是,我在那里没有看到我需要的信息。
-
顺便说一句,我可以使用设备拓扑 API。这是从单个端点设备 (IMMDevice::GetId()) 到包含硬件的完整拓扑的一个很好的示例:docs.microsoft.com/en-us/windows/win32/coreaudio/…。 GetHardwareDeviceTopology (IMMDevice in, IDeviceTopology out) 中的示例代码看起来很有前景。不幸的是,在我的系统上,这仍然会导致单个卡的 IDeviceTopology::GetDeviceId 有 3 个值。