i solved the problem. Following code, changes each channel volume. The sound card has 8 channels.
<pre>MMRESULT mResult;
HMIXER mHMixer;
MIXERLINE mML;
MIXERLINECONTROLS mMLC;
MIXERCONTROL mMC;
MIXERCONTROLDETAILS mMCD;
MIXERCONTROLDETAILS_UNSIGNED mChannelVolume[8];
//each channel volume values( 0-65535 )
mChannelVolume[0].dwValue = 0;
mChannelVolume[1].dwValue = 0;
mChannelVolume[2].dwValue = 32000;
mChannelVolume[3].dwValue = 0;
mChannelVolume[4].dwValue = 0;
mChannelVolume[5].dwValue = 0;
mChannelVolume[6].dwValue = 65000;
mChannelVolume[7].dwValue = 65000;
mResult = mixerOpen(&mHMixer, MIXER_OBJECTF_MIXER, 0, 0, 0);
if (MMSYSERR_NOERROR == mResult)
{
mML.cbStruct = sizeof(MIXERLINE);
mML.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
// get the speaker line of the mixer device
mResult = mixerGetLineInfo((HMIXEROBJ) mHMixer, &mML, MIXER_GETLINEINFOF_COMPONENTTYPE);
if (MMSYSERR_NOERROR == mResult)
{
mMLC.cbStruct = sizeof(MIXERLINECONTROLS);
mMLC.dwLineID = mML.dwLineID;
mMLC.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mMLC.cControls = 1;
mMLC.pamxctrl = &mMC;
mMLC.cbmxctrl = sizeof(MIXERCONTROL);
// get the volume controls associated with the speaker line
mResult = mixerGetLineControls((HMIXEROBJ) mHMixer, &mMLC, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (MMSYSERR_NOERROR == mResult)
{
mMCD.cbStruct = sizeof(MIXERCONTROLDETAILS);
mMCD.hwndOwner = 0;
mMCD.dwControlID = mMC.dwControlID;
mMCD.paDetails = &mChannelVolume[0];
mMCD.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mMCD.cChannels = 8;
// set the volume
mResult = mixerSetControlDetails((HMIXEROBJ) mHMixer, &mMCD, MIXER_SETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == mResult)
{
cout<<"Volume changed!"<<endl;
}
else
{
cout<<"mixerSetControlDetails() failed"<<endl;
}
}
else
{
cout<<"mixerGetLineControls() failed"<<endl;
}
}
else
{
cout<<"mixerGetLineInfo() failed"<<endl;
}
}
mixerClose(mHMixer);