【音视频】获取音频设备-mmdeviceapi(八)

本文主要介绍了如何利用C++和mmdeviceapi库获取音频设备,包括麦克风和扬声器。内容涵盖技术简介、主要流程及代码展示,如获取默认设备和设备列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取音频设备,包括获取麦克风、扬声器设备。主要介绍获取设备列表以及默认设备。

技术简介

使用mmdeviceapi技术可以获取麦克风、扬声器设备

使用模块(库)

使用windows的mmdeviceapi库

主要流程和代码

获取默认设备

int AudioDevice::getDefaultDevice(bool isMic, std::string& id, std::string& name)
{
   
	HELPER::ComUtil comUtil;

	int err = ERROR_CODE_OK;

	Microsoft::WRL::ComPtr<IMMDeviceEnumerator> deviceEnumerator = nullptr;
	Microsoft::WRL::ComPtr<IMMDevice> endpointDevice = nullptr;

	do {
   
		HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,
			__uuidof(IMMDeviceEnumerator), (void**)deviceEnumerator.GetAddressOf());
		if (FAILED(hr)) {
   
			err = ERROR_CODE_COM_CREATE_INSTANCE_FAILED;
			break;
		}

		EDataFlow dataFlow = isMic ? eCapture : eRender;
		hr = deviceEnumerator->GetDefaultAudioEndpoint(dataFlow, eConsole, endpointDevice.GetAddressOf());
		if (FAILED(hr)) {
   
			err = ERROR_CODE_COM_GET_AUDIO_ENDPOINT_FAILED;
			break;
		}

		LPWSTR currentDeviceId = nullptr;
		hr = endpointDevice->GetId(&currentDeviceId);
		if (FAILED(hr)) {
   
			err = ERROR_CODE_COM_GET_ENDPOINT_ID_FAILED;
			break;
		}

		std::string defaultDeviceId = HELPER::StringConverter::convertUnicodeToUtf8(currentDeviceId);
		CoTaskMemFree(currentDeviceId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值