利用winmm控制音量的小例子

简介:
很久没有做一些感兴趣的东西了,今天这个时候加晚班正好有点时间,研究了一下在windows下控制音量。用到了winmm,因为用的是wxWidgets做界面,所以需要在引用里加入libwinmm.a这个静态链接库。同样,如果是基于vc的开发,那么引用winmm.lib就是了。
主要用到了以下两个api提供的函数。

bool     WINAPI     SetVolume( long     dev, long     vol); //设置设备的音量,dev=0主音量,1WAVE     ,2MIDI     ,3     LINE     IN

unsigned     WINAPI     GetVolume( int     dev); //得到设备的音量dev=0主音量,1WAVE     ,2MIDI     ,3     LINE     IN


因此,在设置和显示音量时,我只需要直接调用就行了。另外加入了一个静音的效果。其实很简单,就是把当前音量设置为0就是了。
//显示音量
void controlsoundvolumeDialog::ShowVolume()
{
         //获得当前系统音量
        unsigned  int currentVolume=GetVolume(m_decType);
        m_sliderVolume->SetValue(currentVolume);
         //数字化显示音量
        wxString volumeLabelString = wxString::Format(wxT( "%i"),currentVolume);
        m_staticTextVolume->SetLabel(volumeLabelString);

}
//静音模式
void controlsoundvolumeDialog::IsMute( wxCommandEvent&  event )
{
         //判断是否选择静音
         if (m_checkBoxMute->GetValue())
        {
                SetVolume(m_decType,0);
        }
         else
        {
                 int volume=m_sliderVolume->GetValue();
                SetVolume(m_decType,volume);
        }
}

//改变音量
void controlsoundvolumeDialog::ChangeSoundVolume( wxScrollEvent&  event )
{
         int volume=m_sliderVolume->GetValue();
         //设置音量,
        SetVolume(m_decType,volume);
         //数字化显示音量
        wxString volumeLabelString = wxString::Format(wxT( "%i"),volume);
        m_staticTextVolume->SetLabel(volumeLabelString);
}

最后效果.


另外针对不同的设备类型,显示音量和设置音量自然应该不同,所以应该额外给一个设备类型的标志。
//改变选择音量类型
void controlsoundvolumeDialog::ChangeVolumeType( wxCommandEvent&  event )
{
         int decType=m_choiceVolumeType->GetCurrentSelection();
         switch (decType)
        {
         case 0:
                m_decType=0;
                 break;
         case 1:
                m_decType=1;
                 break;
         case 2:
                m_decType=2;
                 break;
         default:
                m_decType=0;
                 break;
        }
        ShowVolume();
}

1: 附件里包括完整的工程文件,源代码,wxFormBuilder所设计的界面文件以及编译之后的可执行文件。因为wxWidgets的动态链接库太大,压 缩之后也有 2.5M,超过上传限制,有需要的可以搜索自行下载一个 基于wxWidgets-2.8.9的库就行了。

2:这个工程所使用的wxWidgets动态链接库名称.
wxmsw28u_gcc_ilcd.dll

3:CodeBlocks+wxWidgets-2.8.9下编译通过



本文转自阿汐 51CTO博客,原文链接:http://blog.51cto.com/axiii/135062,如需转载请自行联系原作者


相关文章
|
传感器 监控 安全
未来家居生活的智能化革命:探索物联网技术在智能家居中的应用
【8月更文挑战第5天】当物联网技术遇上智能家居,一场关于便捷、舒适与节能的生活革命悄然拉开帷幕。本文将探讨物联网如何通过高度互联的设备网络,实现家庭环境的智能管理,提升居住体验的同时,促进能源的有效利用。
|
缓存 NoSQL Linux
Linux调试
本文介绍了Linux调试、性能分析和追踪的培训资料,涵盖调试、性能分析和追踪的基础知识及常用工具。
786 63
Linux调试
|
10月前
|
安全 搜索推荐 网络安全
一文详解:HTTPS有哪些优势?
HTTP协议的明文传输存在安全隐患,尤其在涉及敏感信息(如银行卡号、密码)时,数据易被截获。为解决这一问题,HTTPS协议应运而生。HTTPS在HTTP基础上加入SSL/TLS加密层,确保数据传输的安全性和完整性,防止中间人攻击。使用HTTPS不仅能保护用户隐私,还能提升网站的信任度和搜索引擎排名,增加在线交易量,帮助企业防钓鱼、提升流量与收益。随着网络安全形势日益严峻,企业应积极采用HTTPS,保障数据安全,促进良性发展。
|
NoSQL 关系型数据库 MySQL
主备切换大揭秘:保证系统永不停机的秘密
本文由小米分享,介绍了分布式系统中的主备切换机制,旨在确保高可用性和可靠性。内容涵盖热备和冷备的概念,以及MySQL和Redis的主从复制原理和配置方法。通过主从复制,当主服务器故障时,备服务器能接管工作,维持服务连续性。文章还讨论了主备切换的挑战,如数据一致性与切换延迟,并提出了相应的解决方案。最后,作者鼓励读者就该主题提出疑问和建议。
1206 4
|
JavaScript 前端开发 应用服务中间件
Nginx——一个域名下部署多个Vue项目
如何在同一域名下部署第二个Vue项目而不影响现有项目:更新`vue.config.js`,设置`publicPath`为`/screen/`。修改Vue Router的`base`为`screen`。在Nginx配置中添加新location `/screen`,指向第二项目`dist`目录。测试访问`http://<域名>/screen/`。别忘了检查并修复任何遗漏的配置,如数据看板默认设置。
820 2
|
人工智能 城市大脑 API
基于阿里云视觉智能开放平台的动漫化视频产出方案
阿里云视觉智能开放平台的现有API能力,做出一个批量化生成动漫化视频的方案。
1146 2
基于阿里云视觉智能开放平台的动漫化视频产出方案
|
存储 Linux API
解析音频输出调节音量的原理以及调节的方法
解析音频输出调节音量的原理以及调节的方法
1707 0
|
Docker 容器
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
317 1
|
SQL 存储 缓存
hive metastore 3.0介绍
我们说到Hive 3.0.0版本开始,其单独提供了standalone metastore服务以作为像presto等处理引擎的元数据管理中心。
|
机器学习/深度学习 自然语言处理 前端开发
BLSTM-RNN、Deep Voice、Tacotron…你都掌握了吗?一文总结语音合成必备经典模型-1
BLSTM-RNN、Deep Voice、Tacotron…你都掌握了吗?一文总结语音合成必备经典模型
558 0
BLSTM-RNN、Deep Voice、Tacotron…你都掌握了吗?一文总结语音合成必备经典模型-1