要做到分别控制左右声道。
下面的例子对你不知有没有用:
MSDN中的例子:MixApp
http://www.vchelp.net/source/source_mm.htm
这里还有一段别人的代码,或许对你有帮助:
Windows的混音器调整主音量的例子:
MMRESULT mmr;
HMIXER m_hmx;
MIXERCAPS m_mxcaps;
MIXERLINE m_mxl;
MIXERLINECONTROLS m_mxlc;
MIXERCONTROL m_mxctrl;
ULONG cConnections,v;
mmr = mixerGetDevCaps(0, &m_mxcaps, sizeof(m_mxcaps));
if (MMSYSERR_NOERROR != mmr)
{
MessageBox("Cant Get Device Caps.");
return TRUE;
}
mmr = mixerOpen(&m_hmx, 0, (DWORD)m_hWnd, 0L, CALLBACK_WINDOW);
if (MMSYSERR_NOERROR != mmr)
{
MessageBox("Cant Open Mixer Device.");
return TRUE;
}
m_mxl.cbStruct = sizeof(m_mxl);
m_mxl.dwDestination = 0;
mmr = mixerGetLineInfo((HMIXEROBJ)m_hmx, &m_mxl, MIXER_GETLINEINFOF_DESTINATION);
if (MMSYSERR_NOERROR != mmr)
{
MessageBox("Cant Get Mixer Device Line Info For Volume Controls");
return TRUE;
}
cConnections=m_mxl.cConnections;
m_mxlc.cbStruct = sizeof(m_mxlc);
m_mxlc.dwLineID = m_mxl.dwLineID;
m_mxlc.cControls = m_mxl.cControls;
m_mxlc.cbmxctrl = sizeof(m_mxctrl);
m_mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
m_mxlc.pamxctrl = &m_mxctrl;
mmr = mixerGetLineControls((HMIXEROBJ)m_hmx, &m_mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (MMSYSERR_NOERROR != mmr)
{
MessageBox("Cant Get Line Info For Volume Controls");
return TRUE;
}
最后,获得了调整主音量的Control,就可以设置音量了。
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED mxcd_u[2];
mxcd.cbStruct=sizeof(mxcd);
mxcd.cChannels=m_mxl.cChannels;
mxcd.dwControlID=m_mxctrl.dwControlID;
mxcd.paDetails=&mxcd_u;
mxcd.cbDetails=4;
mxcd.cMultipleItems=m_mxctrl.cMultipleItems;
mxcd_u[0].dwValue=m_mxctrl.Bounds.dwMaximum;
//左声道音量,值从0到m_mxctrl.Bounds.dwMaximum
mxcd_u[1].dwValue=m_mxctrl.Bounds.dwMaximum;
//右声道音量,,值从0到m_mxctrl.Bounds.dwMaximum
mixerSetControlDetails((HMIXEROBJ)m_hmx,&mxcd,MIXER_SETCONTROLDETAILSF_VALUE);