zoukankan      html  css  js  c++  java
  • 显示windows的音频的输入输出设备

    #include "stdafx.h"
    
    /************************音频的输入输出设备**************************/
    
    #include <Mmdeviceapi.h>
    #include <Functiondiscoverykeys_devpkey.h>
    #include <locale.h>
    
    #define EXIT_ON_ERROR(hres)  
                  if (FAILED(hres)) { goto Exit; }
    #define SAFE_RELEASE(punk)  
                  if ((punk) != NULL)  
                                 { (punk)->Release(); (punk) = NULL; }
    
    const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
    const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
    
    void PrintEndpointNames()
    {
        HRESULT hr = S_OK;
        IMMDeviceEnumerator *pEnumerator = NULL;
        IMMDeviceCollection *pRenderCollection = NULL;
        IMMDeviceCollection *pCaptureCollection = NULL;
        IMMDevice *pEndpoint = NULL;
        IPropertyStore *pProps = NULL;
        LPWSTR pwszID = NULL;
    
        hr = CoCreateInstance(
            CLSID_MMDeviceEnumerator, NULL,
            CLSCTX_ALL, IID_IMMDeviceEnumerator,
            (void**)&pEnumerator);
        EXIT_ON_ERROR(hr)
    
            //switch eRender or eCapture
            hr = pEnumerator->EnumAudioEndpoints(
            eCapture, DEVICE_STATE_ACTIVE,
            &pRenderCollection);
    
        EXIT_ON_ERROR(hr)
    
            UINT  count;
        hr = pRenderCollection->GetCount(&count);
    
        EXIT_ON_ERROR(hr)
    
            if (count == 0)
            {
                printf("No endpoints found.
    ");
            }
    
        // Each loop prints the name of an endpoint device.
        for (ULONG i = 0; i < count; i++)
        {
            // Get pointer to endpoint number i.
            hr = pRenderCollection->Item(i, &pEndpoint);
            EXIT_ON_ERROR(hr)
    
                // Get the endpoint ID string.
                hr = pEndpoint->GetId(&pwszID);
            EXIT_ON_ERROR(hr)
    
                hr = pEndpoint->OpenPropertyStore(
                STGM_READ, &pProps);
            EXIT_ON_ERROR(hr)
    
                PROPVARIANT varName;
            // Initialize container for property value.
            PropVariantInit(&varName);
    
            // Get the endpoint's friendly-name property.
            hr = pProps->GetValue(
                PKEY_Device_FriendlyName, &varName);
            EXIT_ON_ERROR(hr)
    
    
                setlocale(LC_ALL, "chs");//中文宽字符输出
            // Print endpoint friendly name and endpoint ID.
            wprintf(L"Endpoint %d: "%s" ( %s )
    ",
                i, varName.pwszVal, pwszID);
    
            CoTaskMemFree(pwszID);
            pwszID = NULL;
            PropVariantClear(&varName);
            SAFE_RELEASE(pProps)
                SAFE_RELEASE(pEndpoint)
        }
        SAFE_RELEASE(pEnumerator)
            SAFE_RELEASE(pRenderCollection)
            return;
    
    Exit:
        printf("Error!
    ");
        CoTaskMemFree(pwszID);
        SAFE_RELEASE(pEnumerator)
            SAFE_RELEASE(pRenderCollection)
            SAFE_RELEASE(pEndpoint)
            SAFE_RELEASE(pProps)
    }
    
    /************************音频的输入输出设备**************************/
    
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        CoInitializeEx(NULL, COINIT_MULTITHREADED);
    
        PrintEndpointNames();
    
        getchar();
    
        return 0;
    }
  • 相关阅读:
    博客园.netCore+阿里云服务器升级中会报的一个错误
    框架资料整理
    免费在线作图,实时协作-工具
    ubuntu14.04 配置网络
    vagrant的学习 之 基础学习
    mysql 定时任务
    linux 命令练习 2018-08-27
    一点一滴(一)
    Thinkphp5.0 的实践一
    Thinkphp5.0 的使用模型Model的获取器与修改器
  • 原文地址:https://www.cnblogs.com/poissonnotes/p/7462989.html
Copyright © 2011-2022 走看看