1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| #include <windows.h> //+: winmm.lib
int main() {
UINT nmx= mixerGetNumDevs();
//if (nmx < 1) ... error, there's no sound card device, exit
//==================================================================
UINT mxid= 0;//default sound card id
HMIXER mxh;
MMRESULT ret;
DWORD fdwOpen= MIXER_OBJECTF_MIXER;
ret= mixerOpen(
&mxh //LPHMIXER phmx
, mxid //UINT uMxId
, 0 //DWORD_PTR dwCallback//without callback
, 0 //DWORD_PTR dwInstance//Reserved. Must be zero.
, fdwOpen //DWORD fdwOpen
);
//if (ret != MMSYSERR_NOERROR) ... error, api fail, exit
HMIXEROBJ mxobjh= (HMIXEROBJ)mxh;
//==================================================================
MIXERLINE mxl= {0};
mxl.cbStruct= sizeof(mxl);
mxl.dwComponentType=
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
//or MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
DWORD fdwInfo= MIXER_GETLINEINFOF_COMPONENTTYPE;
ret= mixerGetLineInfo(
mxobjh //HMIXEROBJ hmxobj,
, &mxl //LPMIXERLINE pmxl,
, fdwInfo //DWORD fdwInfo
);
//if (ret != MMSYSERR_NOERROR) ... error, api fail, mixerClose(mxh);
//==================================================================
MIXERLINECONTROLS mxlc= {0};
mxlc.cbStruct= sizeof(mxlc);
mxlc.dwLineID= mxl.dwLineID;
mxlc.dwControlType=
MIXERCONTROL_CONTROLTYPE_VOLUME;
//or MIXERCONTROL_CONTROLTYPE_MUTE
MIXERCONTROL mxc= {0};
mxlc.cControls= 1;
mxlc.cbmxctrl= sizeof(mxc);
mxlc.pamxctrl= &mxc;
DWORD fdwControls= MIXER_GETLINECONTROLSF_ONEBYTYPE;
ret= mixerGetLineControls(
mxobjh //HMIXEROBJ hmxobj
, &mxlc //LPMIXERLINECONTROLS pmxlc
, fdwControls //DWORD fdwControls
);
//if (ret != MMSYSERR_NOERROR) ... error, api fail, mixerClose(mxh);
//==================================================================
MIXERCONTROLDETAILS mxcd= {0};
mxcd.cbStruct= sizeof(mxcd);
mxcd.dwControlID= mxc.dwControlID;
mxcd.cChannels= 1;
mxcd.cMultipleItems= 0;
MIXERCONTROLDETAILS_UNSIGNED mxcdu= {0};
mxcd.cbDetails= sizeof(mxcdu);
mxcd.paDetails= &mxcdu;
DWORD fdwDetails= MIXER_GETCONTROLDETAILSF_VALUE;
ret= mixerGetControlDetails(
mxobjh//HMIXEROBJ hmxobj
, &mxcd//LPMIXERCONTROLDETAILS pmxcd
, fdwDetails//DWORD fdwDetails
);
//if (ret != MMSYSERR_NOERROR) ... error, api fail, mixerClose(mxh);
//save or print mxcdu.dwValue;
//==================================================================
//change mxcdu.dwValue= ;
ret= mixerSetControlDetails(
mxobjh//HMIXEROBJ hmxobj
, &mxcd//LPMIXERCONTROLDETAILS pmxcd
, fdwDetails//DWORD fdwDetails
);
//if (ret != MMSYSERR_NOERROR) ... error, api fail, mixerClose(mxh);
//==================================================================
mixerClose(mxh);
//==================================================================
} |
Partager