读书人

Usb Audio Device输入音量控制高手帮

发布时间: 2012-01-03 22:16:06 作者: rapoo

Usb Audio Device输入音量控制,高手帮忙啊,急急急!!!
各位兄弟:
目前我要在程序用到一个Usb Audio Device,我用mixer系列的api可以控制次设备的输出音量,却不知道怎么来控制这个设备的输入音量,望有经验的朋友相助,分少可再加
贴个在音量控制的图片

Wave In就是这个设备的输入线路


[解决办法]
ding
[解决办法]
帮顶,等待高手
[解决办法]

C/C++ code
class CMixVolumeCtrl{  HMIXER m_hMixer;  DWORD dwMinVol, dwMaxVol;  UINT nVolumeControlID;public:  CMixVolumeCtrl(DWORD dwType=MIXERLINE_COMPONENTTYPE_SRC_LINE)  {    m_hMixer = NULL;    dwMinVol = dwMaxVol = 0;    nVolumeControlID = 0;      if( mixerGetNumDevs() > 0)    {          if (mixerOpen(&m_hMixer, 0,    0, NULL, MIXER_OBJECTF_MIXER) == MMSYSERR_NOERROR)      {                // get dwLineID          MIXERLINE mxl;          mxl.cbStruct = sizeof(MIXERLINE);          mxl.dwComponentType = dwType;          if (mixerGetLineInfo((HMIXEROBJ)m_hMixer,                                 &mxl,                                 MIXER_OBJECTF_HMIXER |                                 MIXER_GETLINEINFOF_COMPONENTTYPE) == MMSYSERR_NOERROR)        {            MIXERCONTROL mxc;            MIXERLINECONTROLS mxlc;            mxlc.cbStruct = sizeof(MIXERLINECONTROLS);            mxlc.dwLineID = mxl.dwLineID;            mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;            mxlc.cControls = 1;            mxlc.cbmxctrl = sizeof(MIXERCONTROL);            mxlc.pamxctrl = &mxc;            if (mixerGetLineControls((HMIXEROBJ)m_hMixer,                                       &mxlc,                                       MIXER_OBJECTF_HMIXER |                                       MIXER_GETLINECONTROLSF_ONEBYTYPE) == MMSYSERR_NOERROR)// get dwControlID          {                            dwMinVol = mxc.Bounds.dwMinimum;            dwMaxVol = mxc.Bounds.dwMaximum;              nVolumeControlID = mxc.dwControlID;          }        }      }    }  }  ~CMixVolumeCtrl()  {    if(m_hMixer)    {      mixerClose(m_hMixer);      m_hMixer = NULL;    }  }  BOOL GetVolume(DWORD &Vol)  {    BOOL bRet = 0;    if(m_hMixer && nVolumeControlID)    {        MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;        MIXERCONTROLDETAILS mxcd;        mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);        mxcd.dwControlID = nVolumeControlID;        mxcd.cChannels = 1;        mxcd.cMultipleItems = 0;        mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);        mxcd.paDetails = &mxcdVolume;        if (::mixerGetControlDetails((HMIXEROBJ)m_hMixer,                                     &mxcd,                                     MIXER_OBJECTF_HMIXER |                                     MIXER_GETCONTROLDETAILSF_VALUE)            == MMSYSERR_NOERROR)      {          Vol = mxcdVolume.dwValue;        bRet = TRUE;      }    }    return bRet;  }  BOOL SetVolume(DWORD Vol)  {    BOOL bRet = 0;      if(m_hMixer && nVolumeControlID)    {      if(Vol < dwMinVol) Vol = dwMinVol;      if(Vol > dwMaxVol) Vol = dwMaxVol;        MIXERCONTROLDETAILS_UNSIGNED mixVolume = { Vol };        MIXERCONTROLDETAILS mixLine;        mixLine.cbStruct = sizeof(MIXERCONTROLDETAILS);        mixLine.dwControlID = nVolumeControlID;        mixLine.cChannels = 1;        mixLine.cMultipleItems = 0;        mixLine.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);        mixLine.paDetails = &mixVolume;        if (mixerSetControlDetails((HMIXEROBJ)m_hMixer,                                     &mixLine,                                     MIXER_OBJECTF_HMIXER |                                     MIXER_SETCONTROLDETAILSF_VALUE) == MMSYSERR_NOERROR)      {        bRet = 1;      }      }    return bRet;  }}; 

读书人网 >VC/MFC

热点推荐