打开或者关闭麦克风的静音设置?怎么通过程序实现?谢谢~~~~~~

zy1028 2006-01-12 09:57:21
打开或者关闭麦克风的静音设置?怎么通过程序实现?谢谢~~~~~~
...全文
2458 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyyoung 2006-01-18
  • 打赏
  • 举报
回复
楼上在比谁的帖子长啊
caizhen2000_82 2006-01-14
  • 打赏
  • 举报
回复
收藏!!
rudolf_he 2006-01-14
  • 打赏
  • 举报
回复
学习!!
icwin 2006-01-13
  • 打赏
  • 举报
回复
up
constantine 2006-01-12
  • 打赏
  • 举报
回复
void __fastcall TForm1::btn1Click(TObject *Sender)
{
SetMute(4,chk1->Checked); //调试 第一个参数4 就是麦克风
}
constantine 2006-01-12
  • 打赏
  • 举报
回复
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_COMPACTDISC; break;
case 4:
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;
}

//---------------------------------------------------------------------------

bool WINAPI SetMute(long dev,bool vol)//ÉèÖÃÉ豸¾²Òô
{
// dev =0,1,2 ·Ö±ð±íʾÖ÷ÒôÁ¿,²¨ÐÎ,MIDI ,LINE IN
// vol=0,1 ·Ö±ð±íʾȡÏû¾²Òô,ÉèÖþ²Òô
// 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_COMPACTDISC; break;
case 4:
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_MUTE,&volCtrl))
if(SetMuteValue(hmixer,&volCtrl,(bool)vol))
rc=true;
mixerClose(hmixer);
return rc;
}

//---------------------------------------------------------------------------

bool WINAPI GetMute(long dev)//¼ì²éÉ豸ÊÇ·ñ¾²Òô
{
//dev =0,1,2 ·Ö±ð±íʾÖ÷ÒôÁ¿£¬²¨ÐÎ,MIDI ,LINE IN
// 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_COMPACTDISC; break;
case 4:
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_MUTE,&volCtrl))
rc=GetMuteValue(hmixer,&volCtrl);
mixerClose(hmixer);
return rc;

}
constantine 2006-01-12
  • 打赏
  • 举报
回复
#include <mmsystem.h>
#include <mmreg.h>
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;
}
//---------------------------------------------------------------------------
long GetMuteValue(HMIXER hmixer ,MIXERCONTROL *mxc)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_BOOLEAN mxcdMute;
mxcd.hwndOwner = 0;
mxcd.cbStruct = sizeof(mxcd);
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbDetails = sizeof(mxcdMute);
mxcd.paDetails = &mxcdMute;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
if (mixerGetControlDetails((HMIXEROBJ)hmixer, &mxcd,MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))
return -1;
return mxcdMute.fValue;
}

//---------------------------------------------------------------------------
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 SetMuteValue(HMIXER hmixer ,MIXERCONTROL *mxc, bool mute)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_BOOLEAN mxcdMute;mxcdMute.fValue=mute;
mxcd.hwndOwner = 0;
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(mxcdMute);
mxcd.paDetails = &mxcdMute;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
if (mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))
return 0;
return 1;
}

//---------------------------------------------------------------------------

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;
case 4:
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))
return 0;
rt=GetVolumeValue(hmixer,&volCtrl)*100/volCtrl.Bounds.lMaximum;
mixerClose(hmixer);
return rt;

}

//---------------------------------------------------------------------------

ccrun.com 2006-01-12
  • 打赏
  • 举报
回复
// 允许/禁止麦克风静音
// 63 63 72 75 6E 2E 63 6F 6D

#include <mmsystem.h>

bool SetMicrophoneVolumeMute(bool bMute)
{
HMIXER hMixer;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;
MIXERCONTROL mxc;
MIXERLINE mxl;
MIXERCONTROLDETAILS_BOOLEAN mcdb;

// Check if Mixer is available
int nMixerDevs = mixerGetNumDevs();
if(nMixerDevs < 1)
return false;
bool bRet = false;
// open the mixer
UINT uRet = mixerOpen(&hMixer, 0, 0, 0, 0);
if(uRet == MMSYSERR_NOERROR)
{
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
mxl.cbStruct = sizeof(mxl);
// mixerline info
uRet = mixerGetLineInfo(hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
// Get the mute control
uRet = mixerGetLineControls(hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if(uRet == MMSYSERR_NOERROR)
{
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cChannels = 1;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mcdb;
mcdb.fValue = bMute;
// set, unset mute
uRet = mixerSetControlDetails(
hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
// mixerGetControlDetails(hMixer, &mxcd,
// MIXER_GETCONTROLDETAILSF_VALUE);
// Result = Boolean(mcdMute.fValue);
bRet = uRet == MMSYSERR_NOERROR;
}
else
ShowMessage("GetLineInfo Error");
}
uRet = mixerClose(hMixer);
}
return bRet;
}

// 使用举例:
// SetMicrophoneVolumeMute(false);
敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告: 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。  我将带领大家一起来学习:采集麦克风、PCM重采样、AAC或MP3音频编码存储、并直播。具体内容包括:1.FFmpeg采集麦克风并存储为PCM。2.PCM重采样原理及实战。3.采集麦克风并实时转码AAC或MP3并保存文件。4.采集麦克风并实时转码AAC并可以直播。 音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢? 因为没有学习音视频和流媒体的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。 梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。 目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧