调节系统音量(话筒)
来源:互联网 发布:nodejs 500错误 php 编辑:程序博客网 时间:2024/04/28 01:29
#include <mmsystem.h>
// 调节系统音量
//--------------------------------------------------------------------------
// 文件: VloControl.cpp (seeker modify 2006.08.10)
// 函数: SetVolume(int AudioIndex,long NewPos);
// 参数: AudioIndex 是音频设备的序列,默认的设备就是0
// 参数: NewPos: 音量大小,1--100之间
//WINMM.LIB
//---------------------------------------------------------------------------
bool GetVolumeControl(HMIXER hmixer ,long componentType,long ctrlType,MIXERCONTROL* mxc)
{
MIXERLINECONTROLS mxlc;
MIXERLINE mxl;
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = componentType;
if(!mixerGetLineInfo((HMIXEROBJ)hmixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE))
{
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = ctrlType;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = mxc;
if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE))
return 0;
else
return 1;
}
return 0;
}
//---------------------------------------------------------------------------
unsigned GetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol; vol.dwValue=0;
mxcd.hwndOwner = 0;
mxcd.cbStruct = sizeof(mxcd);
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbDetails = sizeof(vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerGetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))
return -1;
return vol.dwValue;
}
//---------------------------------------------------------------------------
bool SetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc, long volume)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;vol.dwValue = volume;
mxcd.hwndOwner = 0;
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))
return 0;
return 1;
}
//---------------------------------------------------------------------------
unsigned WINAPI GetVolume(int dev)//得到设备的音量dev=0主音量,1WAVE ,2MIDI ,3 LINE IN
{
long device;
unsigned rt=0;
MIXERCONTROL volCtrl;
HMIXER hmixer;
switch (dev)
{
case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break;
case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break;
case 3:
// device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; // cd 音量
device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; //麦克风音量
// device=MIXERLINE_COMPONENTTYPE_SRC_LINE; break; //PC 扬声器音量
//device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break;
default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
}
if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0;
if(!GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))
return 0;
rt=GetVolumeValue(hmixer,&volCtrl)*100/volCtrl.Bounds.lMaximum;
mixerClose(hmixer);
return rt;
}
//---------------------------------------------------------------------------
bool WINAPI SetVolume(long dev,long vol)//设置设备的音量
{
// dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN
// vol=0-100 表示音量的大小 , 设置与返回音量的值用的是百分比,即音量从0 - 100,而不是设备的绝对值
// retrun false 表示设置音量的大小的操作不成功
// retrun true 表示设置音量的大小的操作成功
long device;
bool rc=false;
MIXERCONTROL volCtrl;
HMIXER hmixer;
switch (dev)
{
case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break;
case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break;
case 3: device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; //麦克风音量
default:device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
}
if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0;
if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))
{
vol=vol*volCtrl.Bounds.lMaximum/100;
if(SetVolumeValue(hmixer,&volCtrl,vol))
rc=true;
}
mixerClose(hmixer);
return rc;
}
- 调节系统音量(话筒)
- IOS音量调节--隐藏系统音量调节
- ios 调节系统音量
- 如何调节系统声音音量
- 调节IOS系统的音量
- 安卓调节系统的音量和调节系统亮度
- C#调节系统音量与静音代码
- iphone ios5.0 调节系统音量
- AudioManager类:调节系统各种音量
- 【Android】系统音量及屏幕亮度调节
- 系统音量调节添加回调方法
- ios 调节系统音量到最大
- Android 调用系统方法调节音量
- windows下调节系统音量的方法
- 调节系统音量VC++ (win10/win7)
- 音量调节
- 音量调节
- 音量调节
- 运行未安装VS2005的机器上C++程序
- LPI linux认证指南 读书笔记(二)
- ubuntu 安装 3D桌面
- LDL LDR SDR SDL
- 为什么需要override关键字
- 调节系统音量(话筒)
- Thinstall Virtualization Suite v.3.049
- ADO.NET
- 中科院计算机研究方向-考研导师选择的一些建议
- 转:petshop研究的一些链接地址
- 使用OPENROWSET函数连接并访问远程数据库数据
- Nathan A. Good, «Regular Expression Recipes for Windows Developers: A Problem-Solution Approach»
- 关于OPENROWSET和Access与Sql Server交互
- 转载-云风-多进程的游戏服务器设计