我目前正在研究“音量混音器”来控制我电脑上每个程序的音量(

Windows 10).

如何将每个节目/音频会话的音量级别设置为0到100的标量?

如您所见,在下面的代码中,我找到了GetPeakValue函数,但它返回的值如0.0812654或0.021352.

我确信这些值是标量中从1.0到0.0的每个音频会话的音量.但我想要的是音量限制,你可以在Windows音频混音器中设置,例如,而不是当前级别.因此,如果我将程序音量设置为50%,我想要一个像0.5的值.

在第二个函数(getVolume)中,您将看到我已经在0-100标量中获得了主卷,但是端点设备已经具有标量级别的函数.所以我至少需要相同的函数或计算,以便为每个音频会话获得这样的标量.

void getSessions() {

CoInitialize(NULL);

IMMDeviceEnumerator *pDeviceEnumerator = NULL;

IMMDevice *pDevice = NULL;

IAudioSessionManager2 *pAudioSessionManager2 = NULL;

IAudioSessionEnumerator *pAudioSessionEnumerator = NULL;

CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&pDeviceEnumerator);

pDeviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);

pDevice->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, NULL, (void **) &pAudioSessionManager2);

pAudioSessionManager2->GetSessionEnumerator(&pAudioSessionEnumerator);

int nSessionCount;

pAudioSessionEnumerator->GetCount(&nSessionCount);

std::cout << "Session Count: " << nSessionCount << std::endl;

while (true) {

for (int nSessionIndex = 0; nSessionIndex < nSessionCount; nSessionIndex++) {

IAudioSessionControl *pSessionControl = NULL;

if (FAILED(pAudioSessionEnumerator->GetSession(nSessionIndex, &pSessionControl)))

continue;

IAudioMeterInformation *pAudioMeterInformation = NULL;

pSessionControl->QueryInterface(&pAudioMeterInformation);

float fPeak = NULL;

pAudioMeterInformation->GetPeakValue(&fPeak);

std::cout << "fPeak Value: " << fPeak << std::endl;

}

std::cout << "\n\n";

Sleep(1000);

}

CoUninitialize();

}

double getVolume() {

float currentVolume = 0;

CoInitialize(NULL);

IMMDeviceEnumerator *deviceEnumerator = NULL;

CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);

IMMDevice *defaultDevice = NULL;

deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);

deviceEnumerator->Release();

deviceEnumerator = NULL;

IAudioEndpointVolume *endpointVolume = NULL;

defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);

defaultDevice->Release();

defaultDevice = NULL;

float fLevel;

endpointVolume->GetMasterVolumeLevel(&fLevel);

qDebug() << "FLevel: ";

qDebug() << fLevel;

endpointVolume->GetMasterVolumeLevelScalar(&currentVolume);

endpointVolume->Release();

CoUninitialize();

return (double)(currentVolume * 100);

}

好的,我找到了解决问题的方法!

我不得不在SessionControl上调用QueryInterface来访问ISimpleAudioVolume,您可以在其中使用GetMasterVolume和SetMasterVolume函数.它是0-1标量,但你可以将它乘以100得到0-100标量.如果系统的主音量为50%,如果程序音量也为50%,则输出为1,因此输出基于系统的主音量!

感谢您的每一条评论和帮助!

这里的工作代码:

void getSessions() {

CoInitialize(NULL);

IMMDeviceEnumerator *pDeviceEnumerator;

IMMDevice *pDevice;

IAudioSessionManager2 *pAudioSessionManager2;

IAudioSessionEnumerator *pAudioSessionEnumerator;

CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&pDeviceEnumerator);

pDeviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);

pDevice->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, NULL, (void **) &pAudioSessionManager2);

pAudioSessionManager2->GetSessionEnumerator(&pAudioSessionEnumerator);

int nSessionCount;

pAudioSessionEnumerator->GetCount(&nSessionCount);

while (true) {

for (int nSessionIndex = 0; nSessionIndex < nSessionCount; nSessionIndex++) {

IAudioSessionControl *pSessionControl;

if (FAILED(pAudioSessionEnumerator->GetSession(nSessionIndex, &pSessionControl)))

continue;

ISimpleAudioVolume *pSimpleAudioVolume;

pSessionControl->QueryInterface(&pSimpleAudioVolume);

float fLevel;

pSimpleAudioVolume->GetMasterVolume(&fLevel);

std::cout << "fLevel Value: " << fLevel << std::endl;

}

Sleep(1000);

}

CoUninitialize();

}

c语言声音控制大小,C语言 如何将系统音量级别设置为从0到100的标量?相关推荐

  1. c语言循环次数控制,3 C语言 流程控制 循环 跳转

    3 C语言 流程控制 循环 跳转 选择: if switch 循环   while,do while ,for ,嵌套 跳转 break goto continue 第3章流程控制 学习目标 u掌握选 ...

  2. c语言单精度比大小,c语言单精度和双精度的区别.pdf

    c 语言单精度和双精度的区别 c 语言单精度和双精度的区别单精度是这样的格式, 1 位符号, 8 位指数, 23 位小数. 双精度是 1 位符号, 11 位指数, 52 位小数. 区别就是它所能存储的 ...

  3. c语言比较当前日期大小,C语言判断两个日期只差的方法

    C语言判断两个日期只差的方法 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以 ...

  4. C语言精度控制整形,C语言 凑算式 控制精度问题

    想问一下,if语句中为什么写上*1.0之后,输出的就是对的个数29,但把*1.0删掉后,输出的个数就远大于29了? 还想讨教一下各位高手,除了这种暴力求法,还有其他的比较好的方法吗?非常感谢 /* 凑 ...

  5. C语言比较法排大小,c语言 比较法排序区别

    匿名用户 1级 2009-10-25 回答 下面是C语言里面常用的三种比较排序方法: 一.冒泡法(起泡法) 算法要求:用起泡法对10个整数按升序排序. 算法分析:如果有n个数,则要进行n-1趟比较.在 ...

  6. 如何c语言看字节大小,C语言字节大小day5

    计算字节大小 int, float, double 和 char 字节大小 F11运行 注解: 长度就是有几个字符,字节就是这个字符数组共有几个元素. 2.一个字节的长度为8bit,数据的长度由数据的 ...

  7. c语言union内存大小,C语言、C++中的union用法总结

    开始的话 已经好长时间没有更新了,对不起自己,更对不起我亲爱的读者,同时也对不起自己开办的这个博客平台.忙,太忙了,忙于找工作,找一份好工作,纠结于去大城市闯呢,还是回到本省的首府城市.大家都在纠结这 ...

  8. c语言 switch语句大小,C语言switch语句(板式整齐)

    <C语言switch语句(板式整齐)>由会员分享,可在线阅读,更多相关<C语言switch语句(板式整齐)(38页珍藏版)>请在人人文库网上搜索. 1.switch 语句,1, ...

  9. c语言测试时间片大小,C语言模拟实现时间片轮转算法和优先级调度算法

    一.目的和要求 进程调度是处理机管理的核心内容.本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快.进程队列等概念,并体会和了解优先数算法和时间片轮转算法的具体实施办法. 二.实验内 ...

  10. 易语言 ftp控制html,易语言做的FTP验证系统。功能基本实现。

    本帖最后由 164984654 于 2014-1-27 09:33 编辑 235736t7qruh000q0k5y5y[1].jpg (36.72 KB, 下载次数: 14) 2014-1-26 16 ...

最新文章

  1. 给在读研究生的一封信(强烈推荐)
  2. mysql数据库备份 dump_MySQL数据库备份之mysqldump
  3. webkit中对incomplete type指针的处理技巧
  4. Linux 监控命令 iostat
  5. JProfiler 解决 Java 服务器的性能跟踪
  6. 奇怪的车次,你信不信
  7. Java Web提交任务到Spark Spark通过Java Web提交任务
  8. 16.进程间的通信:管道
  9. ADNI数据集下载(详细)
  10. ORACLE计算同比环比
  11. Wi-Fi:802.11ac new feature Beamforming
  12. google 新功能 快讯
  13. 怎么找回手机相册里删除的照片?这些技巧不知道太亏了!
  14. 【电路】电容(一)——浅析大小电容的高低频滤波、并联问题
  15. c#往结构体里面读数据_C# 结构体和ListT类型数据转Json数据保存和读取
  16. AntV-G6:画直角树形图
  17. 非递归,不用栈实现二叉树中序遍历
  18. 商城业务-nginx-搭建域名访问环境一(反向代理配置)
  19. android多平台打包,Android美团多渠道打包Walle集成
  20. 多态和接口(6)——回首ADO.Net

热门文章

  1. Excel批量随机生成姓名
  2. java bzip2 压缩,Java bzip2压缩与解压缩工具类
  3. origin免安装_美俏女剑士ORIGIN中文免安装版 11.4G
  4. 社区网格员计算机考试考什么,网格员考试内容是什么,网格员考试科目有哪些...
  5. 创客c语言程序设计软件下载,c语言编程软件
  6. 【vue 四级联动】
  7. 电脑、手机上那些让人用后欲罢不能的神器(附百度云链接)
  8. 数理统计:方差分析与正交试验设计
  9. 项目管理常用套表模板介绍
  10. 网线制作ppt_ppt模板网线