опубликован 07-02-2002 08:53 MSK
OpenAudioMixer(hmix, id, MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC);
int SetVolume(HMIXER hmix, DWORD id, 0);
mixerClose(hmix);void OpenAudioMixer(HMIXER &hMixer, DWORD &id, DWORD dwComponentType)
{
MMRESULT rc; // Return code.
MIXERCONTROL mxc; // Holds the mixer control data.
MIXERLINE mxl; // Holds the mixer line data.
MIXERLINECONTROLS mxlc; // Obtains the mixer control.
rc = mixerOpen(&hMixer, 0,0,0,0);
if (MMSYSERR_NOERROR == rc) {
// Couldn't open the mixer.
}
// Initialize MIXERLINE structure.
ZeroMemory(&mxl,sizeof(mxl));
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = dwComponentType;
rc = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if (MMSYSERR_NOERROR == rc) {
// Couldn't get the mixer line.
}
// Get the control.
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;//MIXERCONTROL_CONTROLTYPE_PEAKMETER;это для главного регулятора. вообще здесь можно поставить MIXERCONTROL_CONTROLTYPE_MUTE и должно сработать отключение звука но происходит ошибка
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
ZeroMemory(&mxc, sizeof(mxc));
mxc.cbStruct = sizeof(mxc);
rc = mixerGetLineControls((HMIXEROBJ)hMixer,&mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (MMSYSERR_NOERROR == rc) {
// Couldn't get the control. MIXERR_INVALCONTROL
}
id = mxc.dwControlID;
}
DWORD GetVolume(HMIXER hMixer, DWORD id)
{
MMRESULT rc; // Return code.
MIXERCONTROLDETAILS mxcd; // Gets the control values.
MIXERCONTROLDETAILS_SIGNED volStruct[2]; // Gets the control values.
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(volStruct);
mxcd.dwControlID = id;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 2;
volStruct[0].lValue=0;
volStruct[1].lValue=0;
rc = mixerGetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_GETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc) {
return MAKELONG(volStruct[0].lValue, volStruct[1].lValue);
}
return -1;
}
int SetVolume(HMIXER hMixer, DWORD id, DWORD vol)
{
MMRESULT rc; // Return code.
MIXERCONTROLDETAILS mxcd; // Gets the control values.
MIXERCONTROLDETAILS_SIGNED volStruct[2]; // Gets the control values.
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(volStruct);
mxcd.dwControlID = id;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 2;
volStruct[0].lValue=LOWORD(vol);
volStruct[1].lValue=HIWORD(vol);
rc = mixerSetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc) {
return 0;
}
return -1;
}