代碼: 選擇全部
// include Mmsystem.h, link winmm.lib
void setMicVolume(DWORD ivalue) // ivalue between 0 ~ 65535
{
HMIXER hmx;
MIXERLINE mxl;
DWORD j, cConnections, cChannels;
MIXERCONTROL mxc;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS_UNSIGNED vol;
MIXERCONTROLDETAILS mxcd;
mixerOpen(&hmx, 0, 0, 0, 0);
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
cConnections = mxl.cConnections;
for(j=0;j<cConnections;j++)
{
mxl.dwSource = j;
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_SOURCE);
if(MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE == mxl.dwComponentType)
break;
}
memset(&mxlc, 0, sizeof(MIXERLINECONTROLS));
mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlID = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = &mxc;
if(mixerGetLineControls((HMIXEROBJ)hmx, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE)==0)
{
// found!
cChannels = mxl.cChannels;
if((mxc.fdwControl && MIXERCONTROL_CONTROLF_UNIform)==1)
cChannels = 1;
memset(&mxcd, 0, sizeof(MIXERCONTROLDETAILS));
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cChannels = cChannels;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = &vol;
vol.dwvalue = ivalue;
mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd, MIXER_SETCONTROLDETAILSF_value);
}
mixerClose(hmx);
}