频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

用Mixer API函数调节控制面板的音频设置

来源: 作者: 出处:巧巧读书 2007-07-22 进入讨论组
上一页 1 2 3 

  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进入讨论组讨论。
更多专题 【深 度 阅 读】 相 关 文 章
    上一页 1 2 3 
    收藏此文】【 】【打印】【关闭
    相关图文阅读
    频道图文推荐
    健 康 咨 询
    时 尚 咨 询
    巧巧读书宗旨
    相关专题
    讨论组问题推荐
    站内各频道最新更新文档
    站内最新制作专题
    热门关键字导读
    Photoshop教 程照片处理 照片制作 PS快捷键 抠图
    计 算 机 故 障XP系统修复
    艺 术 与 设 计设计 流媒体 设计欣赏 边框
    计 算 机 安 全ARP
    站内频道文章精选
    巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章