前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】基础:Windows音频音量控制

【C++】基础:Windows音频音量控制

作者头像
DevFrank
发布2024-07-24 15:10:02
610
发布2024-07-24 15:10:02
举报
文章被收录于专栏:C++开发学习交流

控制音量

下面是通过调用Windows API控制音量递增的例子:

代码语言:javascript
复制
/**
	@breif 修改Windows系统声音
*/
#include <windows.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <audioclient.h>
#include <iostream>

bool SetVolum(int volume)
{
	HRESULT hr;
	IMMDeviceEnumerator* pDeviceEnumerator = 0;
	IMMDevice* pDevice = 0;
	IAudioEndpointVolume* pAudioEndpointVolume = 0;
	IAudioClient* pAudioClient = 0;

	try {
		hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pDeviceEnumerator);
		if (FAILED(hr)) throw "CoCreateInstance";
		hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice);
		if (FAILED(hr)) throw "GetDefaultAudioEndpoint";
		hr = pDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&pAudioEndpointVolume);
		if (FAILED(hr)) throw "pDevice->Active";
		hr = pDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&pAudioClient);
		if (FAILED(hr)) throw "pDevice->Active";

		float fVolume;
		fVolume = volume / 100.0f;
		hr = pAudioEndpointVolume->SetMasterVolumeLevelScalar(fVolume, &GUID_NULL);
		if (FAILED(hr)) throw "SetMasterVolumeLevelScalar";

		pAudioClient->Release();
		pAudioEndpointVolume->Release();
		pDevice->Release();
		pDeviceEnumerator->Release();
		return true;
	}

	catch (...) {
		if (pAudioClient) pAudioClient->Release();
		if (pAudioEndpointVolume) pAudioEndpointVolume->Release();
		if (pDevice) pDevice->Release();
		if (pDeviceEnumerator) pDeviceEnumerator->Release();
		throw;
	}
	return false;
}

int main(int argc, char **argv)
{
	CoInitialize(0);
	int vol;
	for (vol = 0; vol < 11; vol++)
	{
		Sleep(1 * 1000);
		SetVolum(vol);
		std::cout << "已将音量调整至:" << vol << std::endl;
	}
	CoUninitialize();
	return 0;
}

实际效果如下:

电脑音量从0到10递增,这里写的延时是1s。

在这里插入图片描述
在这里插入图片描述

播放音频

下面是通过Windows API播放音频的例子:

代码语言:javascript
复制
/*
	C++播放音频(VS2017)
*/
#include <Windows.h>
#include <iostream>
#include <mmsystem.h>  // 用于播放音频

#pragma comment(lib, "winmm.lib")  // 导入声音头文件库

int main() {
	std::cout << "开始播放音频……\n";

	mciSendString(TEXT("open ./sound/hello.mp3 alias mysong"), NULL, 0, NULL);
	mciSendString(TEXT("play mysong"), NULL, 0, NULL);
	Sleep(8000);
	mciSendString(TEXT("close mysong"), NULL, 0, NULL);

	system("pause");
	return 0;
}

// 文字转语音 https://ttsmaker.com/zh-cn

实际效果如下:

电脑开始播放hello.mp3的声音。

在这里插入图片描述
在这里插入图片描述

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 控制音量
  • 播放音频
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档