织梦CMS - 轻松建站从此开始!

罗索

如何用程序控制windows的麦克风的静音开关

罗索客 发布于 2006-03-24 10:39 点击:次 
用MIXER来做。example: BOOL CMixer::GetRecordradio() { UINT m_uMxId2; // HWND m_hWnd;//回调句柄 HMIXER m_hmx2; MIXERCAPS mxcaps; //返回系统中混音器数量(如:一块普通声卡提供一个混音器设备) int devnum=mixerGetNumDevs(); int i=0; for(i;i { m_uMxId2=i; if
TAG:

用MIXER来做。example:
BOOL CMixer::GetRecordradio()
{

UINT m_uMxId2;
// HWND m_hWnd;//回调句柄
HMIXER m_hmx2;
MIXERCAPS mxcaps;

//返回系统中混音器数量(如:一块普通声卡提供一个混音器设备)
int devnum=mixerGetNumDevs();
int i=0;

for(i;i{
m_uMxId2=i;
if (MMSYSERR_NOERROR !=
mixerOpen(&m_hmx2, m_uMxId2,(DWORD)m_hWnd, 0, CALLBACK_WINDOW))
//使用dwCallback参数
return -1;

//得到相应设备标识号
//mixerGetID((HMIXEROBJ)m_hmx2,&m_uMxId,MIXER_OBJECTF_HMIXER);

//确定各混音器设备的能力:保存在mxcaps结构中(wMid,wPid,szname,cDestinations)
if (MMSYSERR_NOERROR !=
mixerGetDevCaps(m_uMxId2,&mxcaps,sizeof(MIXERCAPS)))
return FALSE;

//检索指定音频线路的信息,保存在MIXERLINE结构中,
//其中一些成员根据不同情况要初始化
MIXERLINE mxl;
mxl.cbStruct = sizeof(MIXERLINE); //必须赋值

//可以通过多种条件来检索:
//方式一:根据目标单元编号
//mxl.dwDestination=0;等同用mxl.dwComponentType=
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
//mxl.dwDestination=1;等同用mxl.dwComponentType=
MIXERLINE_COMPONENTTYPE_DST_WAVEIN
//对应flag: MIXER_GETLINEINFOF_DESTINATION
//mxl.dwDestination=1;

//方式二:根据线路类型
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
//对应flag: MIXER_GETLINEINFOF_COMPONENTTYPE

if (::mixerGetLineInfo((HMIXEROBJ)m_hmx2,
&mxl,
MIXER_OBJECTF_HMIXER |
MIXER_GETLINEINFOF_COMPONENTTYPE)
!= MMSYSERR_NOERROR) return -1;

//查询 录音控制面版中 麦克风线路的编号
MIXERLINE mxl_v;
UINT cConnections = (UINT)mxl.cConnections;
UINT dwSource_v=0;
do
{
mxl_v.cbStruct = sizeof(mxl_v);
mxl_v.dwDestination = mxl.dwDestination;
mxl_v.dwSource = dwSource_v;
dwSource_v++;
if (MMSYSERR_NOERROR !=
mixerGetLineInfo((HMIXEROBJ)m_hmx2,
&mxl_v,
MIXER_GETLINEINFOF_SOURCE))
return FALSE;
} while ((dwSource_v < cConnections) &&
(mxl_v.dwComponentType != MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE));

if((dwSource_v > cConnections) ||
(mxl_v.dwComponentType !=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE))
return FALSE;
dwSource_v--;//得到编号

//下面这段文字说明在本例中已经没有什么实际意义,是以前调试时留下的,也不删除了,
//可以知道如何控制主音(Volume)线路的禁音状态:
//--可以利用得到的主音(Volume)线路的mxl.dwLineID,
//来查询Volume的禁音状态
//要想查询(或设置)可以混音到DST_SPEAKERS主音(Volume)中的
//相关音源线路(如:wave、micphone等)的禁音状态,还必须再使用
//一次 mixerGetLineInfo 进一步指定其dwLineID
//注意:不要简单的直接修改上面的:
//mxl.dwComponentType = 类型;
//虽然可能有时不会报错,但这成了我们程序中的隐患,
//因为有的线路在DST_SPEAKERS和DST_WAVEIN中均有,如:
//MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC


//下面实现了"强制"单选麦克风线路为录音源输入
MIXERCONTROL mxc;
MIXERLINECONTROLS mxlc;
mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUX;
//MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = &mxc; //为了得到相应的mxc.dwControlID,
//锁定mxlc.dwLineID和mxlc.dwControlType指定的线路控制
//目前将对录音目标单元的录音音源线路做单选(多路复用)
if (::mixerGetLineControls((HMIXEROBJ)m_hmx2,
&mxlc,
MIXER_OBJECTF_HMIXER |
MIXER_GETLINECONTROLSF_ONEBYTYPE)
!= MMSYSERR_NOERROR) return -1;

//根据mxc.dwControlID检索线路,
MIXERCONTROLDETAILS_BOOLEAN mxcdMute[8];
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;//在上面的&mxc得到
mxcd.cChannels = 1;
mxcd.cMultipleItems =mxc.cMultipleItems;//多路因子数目
mxcd.cbDetails = sizeof(*mxcdMute);
mxcd.paDetails =&mxcdMute;//存放检索结果
if (::mixerGetControlDetails((HMIXEROBJ)m_hmx2,
&mxcd,
MIXER_OBJECTF_HMIXER |
MIXER_GETCONTROLDETAILSF_value)
!= MMSYSERR_NOERROR) return -1;

//做相应单选改变
int j;
for(j=0;j<(int)mxc.cMultipleItems;j++)
mxcdMute[j].fvalue=false;
mxcdMute[dwSource_v].fvalue=true;

//重新设置dwControlID锁定的线路控制
if (::mixerSetControlDetails((HMIXEROBJ)m_hmx2,
&mxcd,
MIXER_OBJECTF_HMIXER |
MIXER_GETCONTROLDETAILSF_value)
!= MMSYSERR_NOERROR) return -1;
}//for(i;ireturn TRUE;
}
 

================

::ZeroMemory(&m_mxcaps, sizeof(MIXERCAPS));//指定区域清零

(iwgh)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200603/5713.html]
本文出处: 作者:iwgh
顶一下
(0)
0%
踩一下
(2)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容