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; }};