Einzelnen Beitrag anzeigen
Ungelesen 20.05.09, 20:01   #4
kiffschwein
Ich bin R00T ich darf das
 
Benutzerbild von kiffschwein
 
Registriert seit: Feb 2009
Ort: Gleich neben dem Waffenladen rechts
Beiträge: 22
Bedankt: 417
kiffschwein ist noch neu hier! | 0 Respekt Punkte
Standard

Code:
void UnMute()  
  
{  
  
// Open the mixer device  
  
HMIXER hmx;  
  
mixerOpen(&hmx, 0, 0, 0, 0);  
  
// Get the line info for the wave in destination line  
  
MIXERLINE mxl;  
  
mxl.cbStruct = sizeof(mxl);  
  
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;  
  
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);  
  
// Now find the microphone source line connected to this wave in  
  
// destination  
  
DWORD cConnections = mxl.cConnections;  
  
for(DWORD j=0; j<cConnections; j++){  
  
mxl.dwSource = j;  
  
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_SOURCE);  
  
if (MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE == mxl.dwComponentType)  
  
break;  
  
}  
  
// Find a mute control, if any, of the microphone line  
  
LPMIXERCONTROL pmxctrl = (LPMIXERCONTROL)malloc(sizeof MIXERCONTROL);  
  
MIXERLINECONTROLS mxlctrl = {sizeof mxlctrl, mxl.dwLineID,  
  
MIXERCONTROL_CONTROLTYPE_MUTE, 1, sizeof MIXERCONTROL, pmxctrl};  
  
if(!mixerGetLineControls((HMIXEROBJ) hmx, &mxlctrl,  
  
MIXER_GETLINECONTROLSF_ONEBYTYPE)){  
  
// Found, so proceed  
  
DWORD cChannels = mxl.cChannels;  
  
if (MIXERCONTROL_CONTROLF_UNIFORM & pmxctrl->fdwControl)  
  
cChannels = 1;  
  
LPMIXERCONTROLDETAILS_BOOLEAN pbool =  
  
(LPMIXERCONTROLDETAILS_BOOLEAN) malloc(cChannels * sizeof  
  
MIXERCONTROLDETAILS_BOOLEAN);  
  
MIXERCONTROLDETAILS mxcd = {sizeof(mxcd), pmxctrl->dwControlID,  
  
cChannels, (HWND)0,  
  
sizeof MIXERCONTROLDETAILS_BOOLEAN, (LPVOID) pbool};  
  
mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,  
  
MIXER_SETCONTROLDETAILSF_VALUE);  
  
// Unmute the microphone line (for both channels)  
  
pbool[0].fValue = pbool[cChannels - 1].fValue = 0;  
  
mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd,  
  
MIXER_SETCONTROLDETAILSF_VALUE);  
  
free(pmxctrl);  
  
free(pbool);  
  
}  
  
else  
  
free(pmxctrl);  
  
mixerClose(hmx);  
  
}  
  
void SetVolume()  
  
{  
  
// Open the mixer device  
  
HMIXER hmx;  
  
mixerOpen(&hmx, 0, 0, 0, 0);  
  
// Get the line info for the wave in destination line  
  
MIXERLINE mxl;  
  
mxl.cbStruct = sizeof(mxl);  
  
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;  
  
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl,  
  
MIXER_GETLINEINFOF_COMPONENTTYPE);  
  
// Now find the microphone source line connected to this wave in  
  
// destination  
  
DWORD cConnections = mxl.cConnections;  
  
for(DWORD j=0; j<cConnections; j++){  
  
mxl.dwSource = j;  
  
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_SOURCE);  
  
if (MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE == mxl.dwComponentType)  
  
break;  
  
}  
  
// Find a volume control, if any, of the microphone line  
  
LPMIXERCONTROL pmxctrl = (LPMIXERCONTROL)malloc(sizeof MIXERCONTROL);  
  
MIXERLINECONTROLS mxlctrl = {sizeof mxlctrl, mxl.dwLineID,  
  
MIXERCONTROL_CONTROLTYPE_VOLUME, 1, sizeof MIXERCONTROL, pmxctrl};  
  
if(!mixerGetLineControls((HMIXEROBJ) hmx, &mxlctrl,  
  
MIXER_GETLINECONTROLSF_ONEBYTYPE)){  
  
// Found!  
  
DWORD cChannels = mxl.cChannels;  
  
if (MIXERCONTROL_CONTROLF_UNIFORM & pmxctrl->fdwControl)  
  
cChannels = 1;  
  
LPMIXERCONTROLDETAILS_UNSIGNED pUnsigned =  
  
(LPMIXERCONTROLDETAILS_UNSIGNED)  
  
malloc(cChannels * sizeof MIXERCONTROLDETAILS_UNSIGNED);  
  
MIXERCONTROLDETAILS mxcd = {sizeof(mxcd), pmxctrl->dwControlID,  
  
cChannels, (HWND)0,  
  
sizeof MIXERCONTROLDETAILS_UNSIGNED, (LPVOID) pUnsigned};  
  
mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,  
  
MIXER_SETCONTROLDETAILSF_VALUE);  
  
// Set the volume to the middle  (for both channels as needed)  
  
pUnsigned[0].dwValue = pUnsigned[cChannels - 1].dwValue =  
  
(pmxctrl->Bounds.dwMinimum+pmxctrl->Bounds.dwMaximum)/2;  
  
mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd,  
  
MIXER_SETCONTROLDETAILSF_VALUE);  
  
free(pmxctrl);  
  
free(pUnsigned);  
  
}  
  
else  
  
free(pmxctrl);  
  
mixerClose(hmx);  
  
}  
  
void SelectMic()  
  
{  
  
// Open the mixer device  
  
HMIXER hmx;  
  
mixerOpen(&hmx, 0, 0, 0, 0);  
  
// Get the line info for the wave in destination line  
  
MIXERLINE mxl;  
  
mxl.cbStruct      = sizeof(mxl);  
  
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;  
  
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl,  
  
MIXER_GETLINEINFOF_COMPONENTTYPE);  
  
// Find a LIST control, if any, for the wave in line  
  
LPMIXERCONTROL pmxctrl = (LPMIXERCONTROL)malloc(mxl.cControls * sizeof  
  
MIXERCONTROL);  
  
MIXERLINECONTROLS mxlctrl = {sizeof mxlctrl, mxl.dwLineID, 0,  
  
mxl.cControls, sizeof MIXERCONTROL, pmxctrl};  
  
mixerGetLineControls((HMIXEROBJ) hmx, &mxlctrl,  
  
MIXER_GETLINECONTROLSF_ALL);  
  
// Now walk through each control to find a type of LIST control. This  
  
// can be either Mux, Single-select, Mixer or Multiple-select.  
  
DWORD i;  
  
for(i=0; i < mxl.cControls; i++)  
  
if (MIXERCONTROL_CT_CLASS_LIST == (pmxctrl[i].dwControlType  
  
&MIXERCONTROL_CT_CLASS_MASK))  
  
break;  
  
if (i < mxl.cControls) { // Found a LIST control  
  
// Check if the LIST control is a Mux or Single-select type  
  
BOOL bOneItemOnly = FALSE;  
  
switch (pmxctrl[i].dwControlType) {  
  
case MIXERCONTROL_CONTROLTYPE_MUX:  
  
case MIXERCONTROL_CONTROLTYPE_SINGLESELECT:  
  
bOneItemOnly = TRUE;  
  
}  
  
DWORD cChannels = mxl.cChannels, cMultipleItems = 0;  
  
if (MIXERCONTROL_CONTROLF_UNIFORM & pmxctrl[i].fdwControl)  
  
cChannels = 1;  
  
if (MIXERCONTROL_CONTROLF_MULTIPLE & pmxctrl[i].fdwControl)  
  
cMultipleItems = pmxctrl[i].cMultipleItems;  
  
// Get the text des*****ion of each item  
  
LPMIXERCONTROLDETAILS_LISTTEXT plisttext =  
  
(LPMIXERCONTROLDETAILS_LISTTEXT)  
  
malloc(cChannels * cMultipleItems * sizeof  
  
MIXERCONTROLDETAILS_LISTTEXT);  
  
MIXERCONTROLDETAILS mxcd = {sizeof(mxcd), pmxctrl[i].dwControlID,  
  
cChannels,  
  
(HWND)cMultipleItems, sizeof MIXERCONTROLDETAILS_LISTTEXT,  
  
(LPVOID) plisttext};  
  
mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,  
  
MIXER_GETCONTROLDETAILSF_LISTTEXT);  
  
// Now get the value for each item  
  
LPMIXERCONTROLDETAILS_BOOLEAN plistbool =  
  
(LPMIXERCONTROLDETAILS_BOOLEAN)  
  
malloc(cChannels * cMultipleItems * sizeof  
  
MIXERCONTROLDETAILS_BOOLEAN);  
  
mxcd.cbDetails = sizeof MIXERCONTROLDETAILS_BOOLEAN;  
  
mxcd.paDetails = plistbool;  
  
mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,  
  
MIXER_GETCONTROLDETAILSF_VALUE);  
  
// Select the "Microphone" item  
  
for (DWORD j=0; j<cMultipleItems; j = j + cChannels)  
  
if (0 == strcmp(plisttext[j].szName, "Microphone"))  
  
// Select it for both left and right channels  
  
plistbool[j].fValue = plistbool[j+ cChannels - 1].fValue = 1;  
  
else if (bOneItemOnly)  
  
// Mux or Single-select allows only one item to be selected  
  
// so clear other items as necessary  
  
plistbool[j].fValue = plistbool[j+ cChannels - 1].fValue = 0;  
  
// Now actually set the new values in  
  
mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd,  
  
MIXER_GETCONTROLDETAILSF_VALUE);  
  
free(pmxctrl);  
  
free(plisttext);  
  
free(plistbool);  
  
}  
  
else  
  
free(pmxctrl);  
  
mixerClose(hmx);  
  
}
kiffschwein ist offline   Mit Zitat antworten