如何查找已连接的音频设备?

Roy Li - MSFT 33,371 信誉分 Microsoft 供应商
2024-08-07T03:07:44.76+00:00

我正在尝试查找连接到计算机的音频设备(输入和输出)。我想将我的默认音频从耳机切换到扬声器并返回。

文档感觉是周期性的,告诉我我需要使用 IMMDeviceCollection 来枚举我的设备,但要获取集合,我需要将其提供给 IMMDevicenumerator,但它不能为空,否则会抛出错误/警告。

简而言之,如何列出我的音频设备?如何切换被视为默认音频终结点的内容?

void AudioControl::getDevices()
{
                IMMDeviceEnumerator* deviceEnumerator = NULL;
                IMMDeviceCollection* deviceCollection = NULL;

                HRESULT hr = CoInitialize(NULL);
                if (SUCCEEDED(hr))
                {
                                std::cout << "Initialized" << std::endl;
                                hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator);
                                if (SUCCEEDED(hr))
                                {
                                                std::cout << "Created instance" << std::endl;
                                                hr = deviceEnumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, (IMMDeviceCollection**)deviceCollection);
                                                if (SUCCEEDED(hr))
                                                {
                                                                if (deviceCollection != NULL)
                                                                {
                                                                                std::cout << "Enumerated devices" << std::endl;
                                                                                std::wcout << "Devices: " << deviceCollection << std::endl;
                                                                                std::wcout << "Type: " << typeid(deviceCollection).name() << std::endl;
                                                                }
                                                }
                                                std::cout << "Done enumerating devices" << std::endl;
                                }
                }
                deviceCollection->Release();
                deviceEnumerator->Release();
                CoUninitialize();

}

 

此问题由: How to find audio devices that are connected - Microsoft Q&A总结而来

Windows API - Win32
Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
105 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Tong Xu - MSFT 2,471 信誉分 Microsoft 供应商
    2024-08-07T08:23:55.2833333+00:00

    你好,

    欢迎来到 Microsoft Q&A!

    IMMDeviceEnumerator::EnumAudioEndpoints 方法返回一个 IMMDeviceCollection 接口,该接口表示多媒体设备资源的集合。该代码示例打印系统中所有音频呈现终结点设备的显示名称。另请参阅示例

    若要设置默认音频终结点,请参阅 example(IPolicyConfig)


    如果答案是正确的解决方案,请单击“接受答案”并请投赞成票。如果您对此答案有其他疑问,请点击“评论”。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。