Skip to content

Instantly share code, notes, and snippets.

@riicchhaarrd
Created July 22, 2022 20:31
Show Gist options
  • Save riicchhaarrd/3da09d09ea12ad7962f9cf7f5b88a6d9 to your computer and use it in GitHub Desktop.
Save riicchhaarrd/3da09d09ea12ad7962f9cf7f5b88a6d9 to your computer and use it in GitHub Desktop.
cod2 soundfix
PMIXERCONTROLDETAILS soundFuncFix(const char* search)
{
HMIXER phmx;
//probably wouldn't be a bad idea to also ZeroMemory this structure
if (waveInGetNumDevs() < 1 || mixerGetNumDevs() < 1 || mixerOpen(&phmx, 0, 0, 0, 0))
{
return (PMIXERCONTROLDETAILS)-1;
}
else
{
MIXERLINEA pmxl;
memset(&pmxl, 0, sizeof(pmxl)); //the proper fix... but since this sets cConnections/nc to 0, ultimately the function still returns -1 when mixerGetLineInfoA doesn't set it to > 0
pmxl.cbStruct = sizeof(pmxl);
pmxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
mixerGetLineInfoA((HMIXEROBJ)phmx, &pmxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
int nc = pmxl.cConnections;
for (int i = 0; i < nc; ++i)
{
pmxl.dwSource = i;
mixerGetLineInfoA((HMIXEROBJ)phmx, &pmxl, MIXER_GETLINEINFOF_SOURCE);
if (strstr(pmxl.szName, search))
break;
}
MIXERCONTROLA v9;
MIXERLINECONTROLSA pmxlc;
pmxlc.dwLineID = pmxl.dwLineID;
pmxlc.cbStruct = sizeof(pmxlc);
pmxlc.dwControlID = 0x50030001;
pmxlc.cControls = 1;
pmxlc.cbmxctrl = 148;
pmxlc.pamxctrl = &v9;
if (mixerGetLineControlsA((HMIXEROBJ)phmx, &pmxlc, 2))
{
mixerClose(phmx);
return (PMIXERCONTROLDETAILS)-1;
}
else {
MIXERCONTROLDETAILS pmxcd;
PMIXERCONTROLDETAILS v5;
pmxcd.cMultipleItems = 0;
pmxcd.paDetails = &v5;
pmxcd.cbStruct = 24;
pmxcd.cChannels = 1;
pmxcd.cbDetails = 4;
//pmxcd.dwControlID = v10; //v10 wasn't properly referenced
pmxcd.dwControlID = pmxlc.dwControlID; //assuming pmxlc is meant
mixerGetControlDetailsA((HMIXEROBJ)phmx, &pmxcd, 0);
mixerClose(phmx);
return v5;
}
}
return (PMIXERCONTROLDETAILS)-1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment