void CDlgVideoChat::OnReleasedcaptureSliderMic(NMHDR* pNMHDR, LRESULT* pResult) //麦克风声音控制
{
// TODO: Add your control notification handler code here
int m_level = m_ctrlMicVolume.GetPos();
if (m_dwAudioInstance != 0){
if (! SetMicVolume(4, m_level))
return;
}
UpdateData(FALSE);
*pResult = 0;
}
BOOL CDlgVideoChat::SetMicVolume(long dev, long vol)
{
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;
//device=MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
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 CDlgVideoChat::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) == MMSYSERR_NOERROR)
{
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) == MMSYSERR_NOERROR)
return TRUE;
}
return FALSE;
}
BOOL CDlgVideoChat::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) == MMSYSERR_NOERROR)
return TRUE;
return FALSE;
}
{
// TODO: Add your control notification handler code here
int m_level = m_ctrlMicVolume.GetPos();
if (m_dwAudioInstance != 0){
if (! SetMicVolume(4, m_level))
return;
}
UpdateData(FALSE);
*pResult = 0;
}
BOOL CDlgVideoChat::SetMicVolume(long dev, long vol)
{
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;
//device=MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
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 CDlgVideoChat::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) == MMSYSERR_NOERROR)
{
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) == MMSYSERR_NOERROR)
return TRUE;
}
return FALSE;
}
BOOL CDlgVideoChat::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) == MMSYSERR_NOERROR)
return TRUE;
return FALSE;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货