我在录音的时候要在录音的选项卡中选择 线路输入或者是麦克风,谁能告诉我在程序中如何实现选中其中的一个,怎么选中呀???? 

解决方案 »

  1.   

    http://61.186.252.131/Expert/topic/1540/1540780.xml?temp=.2696344
      

  2.   

    一段VC的代码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 description 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);
    }
      

  3.   

    看不懂呀,有不有mixer的例子.