利用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,如需转载请自行联系原作者


相关文章
|
API 图形学
Unity设置播放模式下始终先执行指定的场景
通过我们使用Unity开发游戏,是在PC/Mac上。而一个游戏通常也会有很多的场景,比如A、B、C、D三个场景,正常流程下的执行顺序是 A –> B –> C –> D。在具体一点,比如 A —— 启动场景、B —— 资源加载场景、C —— 登录场景、D —— 战斗场景。
1804 0
|
8月前
|
存储 Linux API
解析音频输出调节音量的原理以及调节的方法
解析音频输出调节音量的原理以及调节的方法
653 0
|
JavaScript 前端开发
video设置播放时间点及常用属性和方法
video设置播放时间点及常用属性和方法
|
JavaScript 开发者
动画-小球动画 flag 标识符的作用分析|学习笔记
快速学习动画-小球动画 flag 标识符的作用分析
169 0
动画-小球动画 flag 标识符的作用分析|学习笔记
|
JavaScript 开发者
动画-小球动画flag标识符的作用分析|学习笔记
快速学习动画-小球动画flag标识符的作用分析
120 0
动画-小球动画flag标识符的作用分析|学习笔记
控制按键的 几种方法
控制按键的 几种方法
118 0
基于Qt的音乐播放器(二)切换歌曲,调节音量,调节语速,暂停
基于Qt的音乐播放器(二)切换歌曲,调节音量,调节语速,暂停
基于Qt的音乐播放器(二)切换歌曲,调节音量,调节语速,暂停
|
安全 API Android开发
【Android 高性能音频】AAudio 音频流 数据回调细节 ( 数据回调函数优先级 | 数据回调函数 | 采样率 | 采样数 | 缓冲区调整 | 线程不安全 )
【Android 高性能音频】AAudio 音频流 数据回调细节 ( 数据回调函数优先级 | 数据回调函数 | 采样率 | 采样数 | 缓冲区调整 | 线程不安全 )
509 0
QML学习笔记(三)-按钮控制窗口的状态取反
实现功能:点击按钮打开子窗口,再次点击该按钮可以关闭子窗口,主要就是状态取反。 代码如下:
1745 0

热门文章

最新文章