VC++设置与取得系统音量
2011-11-17 15:02
337 查看
MMRESULT rc; // 多媒体函数返回结果变量
HMIXER hMixer; // 混合器设备句柄
MIXERLINE mxl; // 音频线路标准状态信息结构体
MIXERLINECONTROLS mxlc; // 音频线路控制器集合信息结构体
MIXERCONTROL mxc; // 单个音频线路控制器信息结构体
// 打开混合器设备
rc = mixerOpen(&hMixer, // 返回的设备句柄
0, // 单声卡的设备ID为零
0, // 不使用回调机制
0, // 回调函数参数
0); // MIXER_OBJECTF_MIXER宏的值,表示任选有效设备ID
// 打开混合器设备无错的话,则
if (MMSYSERR_NOERROR == rc)
{
// MIXERLINE 结构体变量清零
ZeroMemory(&mxl, sizeof(MIXERLINE));
mxl.cbStruct = sizeof(MIXERLINE); // 微软用此办法判断版本
// 指出需要获取的通道,声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
// 取得混合器设备的指定线路信息
rc = mixerGetLineInfo((HMIXEROBJ)hMixer,
&mxl,
// 取得MIXERLINE::dwComponentType指定类型的第一个音频线路信息
MIXER_GETLINEINFOF_COMPONENTTYPE);
// 取得混合器设备的指定线路信息成功的话,则
if (MMSYSERR_NOERROR == rc)
{
// MIXERCONTROL 结构体变量清零
ZeroMemory(&mxc, sizeof(MIXERCONTROL));
mxc.cbStruct = sizeof(mxc); // 微软用此办法判断版本
// MIXERLINECONTROLS 结构体变量清零
ZeroMemory(&mxlc, sizeof(MIXERLINECONTROLS));
mxlc.cbStruct = sizeof(mxlc); // 微软用此办法判断版本
mxlc.dwLineID = mxl.dwLineID; // 上面取得的声卡音频输出线路标识
// 控制类型为控制音量
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1; // 使用 MIXERCONTROL 结构体变量个数
mxlc.pamxctrl = &mxc; // MIXERCONTROL 结构体变量指针
mxlc.cbmxctrl = sizeof(mxc); // MIXERCONTROL 结构体变量字节大小
// 取得控制器信息
rc = mixerGetLineControls((HMIXEROBJ)hMixer,
&mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
// 取得控制器信息成功的话,则
if (MMSYSERR_NOERROR == rc)
{
// 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum.
MIXERCONTROLDETAILS mxcd; // 控制器的状态信息
MIXERCONTROLDETAILS_SIGNED volStruct; // 音量结构体变量(就一个成员量)
// MIXERCONTROLDETAILS 结构体变量清零
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd); // 微软用此办法判断版本
mxcd.dwControlID = mxc.dwControlID; // 上面取得的控制器标识
mxcd.paDetails = &volStruct; // 音量结构体变量指针
mxcd.cbDetails = sizeof(volStruct); // 音量结构体变量字节大小
mxcd.cChannels = 1; // 取得或设置全部通道
#if 0 // 设置音量
volStruct.lValue = 0; // 想要设置的值
rc = mixerSetControlDetails((HMIXEROBJ)hMixer,
&mxcd,
MIXER_SETCONTROLDETAILSF_VALUE);
#else
// 获得音量值
rc = mixerGetControlDetails((HMIXEROBJ)hMixer,
&mxcd,
MIXER_GETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc)
{
CString str = "";
str.Format("音量:%X", volStruct.lValue);
AfxMessageBox(str);
}
#endif
}
}
}
HMIXER hMixer; // 混合器设备句柄
MIXERLINE mxl; // 音频线路标准状态信息结构体
MIXERLINECONTROLS mxlc; // 音频线路控制器集合信息结构体
MIXERCONTROL mxc; // 单个音频线路控制器信息结构体
// 打开混合器设备
rc = mixerOpen(&hMixer, // 返回的设备句柄
0, // 单声卡的设备ID为零
0, // 不使用回调机制
0, // 回调函数参数
0); // MIXER_OBJECTF_MIXER宏的值,表示任选有效设备ID
// 打开混合器设备无错的话,则
if (MMSYSERR_NOERROR == rc)
{
// MIXERLINE 结构体变量清零
ZeroMemory(&mxl, sizeof(MIXERLINE));
mxl.cbStruct = sizeof(MIXERLINE); // 微软用此办法判断版本
// 指出需要获取的通道,声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
// 取得混合器设备的指定线路信息
rc = mixerGetLineInfo((HMIXEROBJ)hMixer,
&mxl,
// 取得MIXERLINE::dwComponentType指定类型的第一个音频线路信息
MIXER_GETLINEINFOF_COMPONENTTYPE);
// 取得混合器设备的指定线路信息成功的话,则
if (MMSYSERR_NOERROR == rc)
{
// MIXERCONTROL 结构体变量清零
ZeroMemory(&mxc, sizeof(MIXERCONTROL));
mxc.cbStruct = sizeof(mxc); // 微软用此办法判断版本
// MIXERLINECONTROLS 结构体变量清零
ZeroMemory(&mxlc, sizeof(MIXERLINECONTROLS));
mxlc.cbStruct = sizeof(mxlc); // 微软用此办法判断版本
mxlc.dwLineID = mxl.dwLineID; // 上面取得的声卡音频输出线路标识
// 控制类型为控制音量
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1; // 使用 MIXERCONTROL 结构体变量个数
mxlc.pamxctrl = &mxc; // MIXERCONTROL 结构体变量指针
mxlc.cbmxctrl = sizeof(mxc); // MIXERCONTROL 结构体变量字节大小
// 取得控制器信息
rc = mixerGetLineControls((HMIXEROBJ)hMixer,
&mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
// 取得控制器信息成功的话,则
if (MMSYSERR_NOERROR == rc)
{
// 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum.
MIXERCONTROLDETAILS mxcd; // 控制器的状态信息
MIXERCONTROLDETAILS_SIGNED volStruct; // 音量结构体变量(就一个成员量)
// MIXERCONTROLDETAILS 结构体变量清零
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd); // 微软用此办法判断版本
mxcd.dwControlID = mxc.dwControlID; // 上面取得的控制器标识
mxcd.paDetails = &volStruct; // 音量结构体变量指针
mxcd.cbDetails = sizeof(volStruct); // 音量结构体变量字节大小
mxcd.cChannels = 1; // 取得或设置全部通道
#if 0 // 设置音量
volStruct.lValue = 0; // 想要设置的值
rc = mixerSetControlDetails((HMIXEROBJ)hMixer,
&mxcd,
MIXER_SETCONTROLDETAILSF_VALUE);
#else
// 获得音量值
rc = mixerGetControlDetails((HMIXEROBJ)hMixer,
&mxcd,
MIXER_GETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc)
{
CString str = "";
str.Format("音量:%X", volStruct.lValue);
AfxMessageBox(str);
}
#endif
}
}
}
相关文章推荐
- VC++设置与取得系统音量
- android系统各种音量的获取与设置
- Windows系统, vc++ 获取系统区域设置语言标识
- 设置系统默认的调试器VC2008 & VC6
- 设置系统音量
- 调节系统音量VC++ (win10/win7)
- xp和Vista系统获取设置主音量静音和音量大小区别
- [VC] 设置系统时间
- Android SystemProperties设置/取得系统属性的用法总结
- 通过AudioManager 设置调整系统各项音量(铃声 媒体等)
- WINCE音量设置(系统音按键音)
- 安卓系统各种音量的获取与设置
- iOS 监听和设置系统音量
- CoreAudioAPI获取与设置系统音频音量
- android系统各种音量的获取与设置
- VC 设置系统时间
- android Android SystemProperties设置/取得系统属性的用法总结
- vc 系统音量控制详解
- WINCE音量设置(系统音按键音)
- 【VC++技术杂谈001】音频技术之调节音量及设置静音