3、下面演示一下如何设置Volume设备的静音
这里提供了两个函数,GetMute用来获取系统设置中是否对某个音频线路进行了静音操作,SetMute是用来对系统的某个音频线路进行静音操作。
| BOOL CMixer::SetMute(DWORD dwSrcType, BOOL bValue) { MIXERLINE mxl; if (! GetLineInfo(&mxl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, dwSrcType)) return FALSE; MIXERCONTROL mxc; if (! GetLineControl(&mxc, &mxl, MIXERCONTROL_CONTROLTYPE_MUTE)) return FALSE; MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_BOOLEAN mxcd_f; mxcd.cbStruct = sizeof(mxcd); mxcd.dwControlID = mxc.dwControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof(mxcd_f); mxcd.paDetails = &mxcd_f; mxcd_f.fValue = bValue; if (! SetControlDetails(&mxcd, MIXER_OBJECTF_MIXER)) return FALSE; return TRUE; } BOOL CMixer::GetMute(DWORD dwSrcType, BOOL* pbValue) { MIXERLINE mxl; if (! GetLineInfo(&mxl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, dwSrcType)) return FALSE; MIXERCONTROL mxc; if (! GetLineControl(&mxc, &mxl, MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT )) return FALSE; MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_BOOLEAN mxcd_f; mxcd.cbStruct = sizeof(mxcd); mxcd.dwControlID = mxc.dwControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof(mxcd_f); mxcd.paDetails = &mxcd_f; if (! GetControlDetails(&mxcd, MIXER_GETCONTROLDETAILSF_VALUE)) return FALSE; *pbValue = mxcd_f.fValue; return TRUE; } |
如果用这两个函数呢,下面我演示了如何设置和获取Volume音频线路的静音操作。
| BOOL bValue = TRUE; SetMute(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, bValue); GetMute(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, &bValue); |
4、下面看看当系统的设置改变时,mixer是如何通知我们的吧。
还记得我前面讲过的,当我们调用mixeropen时可以传递一个窗口的句柄作为回调窗口,当系统的设置改变,比如音量改变,某个音频线路被静音时,mixer都会给我们的回调窗口发送消息的。
一般只有两个消息,如下
| afx_msg void OnMLChange(WPARAM wParam, LPARAM lParam); afx_msg void OnMCChange(WPARAM wParam, LPARAM lParam); ON_MESSAGE(MM_MIXM_LINE_CHANGE, OnMLChange) ON_MESSAGE(MM_MIXM_CONTROL_CHANGE, OnMCChange) |
其中MM_MIXM_CONTROL_CHANGE 消息中,发送消息的两个参数代表的意思如下
| wParam = (WPARAM) hMixer lParam = (LPARAM) dwControlID |
在MM_MIXM_LINE_CHANGE 消息中,发送消息的参数代表的意思如下
| wParam = (WPARAM) hMixer lParam = (LPARAM) dwLineID |
在我们的应用程序中,我们可以在这两个消息处理函数中调整我们的设置,以对应于系统的改变,比如你的代码可以这样写:
| void CMixerControlDlg::OnMCChange(WPARAM wParam, LPARAM lParam) { DWORD dwLValue; DWORD dwRValue; GetVolume(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, &dwLValue,&dwRValue); //GetVolume函数的定义见下面,然后根据返回的值调整滑动条的位置 m_SliderVolR.SetPos(MAX_VOL_VALUE - dwLValue); m_SliderVolL.SetPos(MAX_VOL_VALUE - dwRValue); //你也可以在这里调用GetMute查看Volume是否被静音, } |
如此你的程序就可以自动的响应系统设置的改变了。
关于mixer API的应用开发就介绍到这里,记着最后要关闭mixer如此:mixerClose(m_hmx);收藏 http://www.qqread.com/vc/d582172200.html进入讨论组讨论。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询



