如何调整pc的麦克输入音量

闲话不说了,直接上代码吧:
int    AdjustAudioInputVolum (   DWORD  & dwLineInID   ,  int   nStep  )
{
  
     HMIXER               hMixer ;
     MIXERLINE            mxl ;  
     MIXERLINECONTROLS   mxlc  
     MIXERCONTROL         mxc  
  
     dwLineInID  =0 ;  //-1 not get device id!
     MMRESULT   mres   MMSYSERR_NOERROR ;
     for   int   deviceID  =0 ;  true   deviceID   ++ )
    {
     
         mres   mixerOpen   (&  hMixer ,
             deviceID  ,      
            0,      
            0,      
             MIXER_OBJECTF_MIXER  );    
         if   MMSYSERR_NOERROR   !=  mres  )
        {
             break  ;
        }
         ZeroMemory  (& mxl   sizeof (   MIXERLINE  ));
         mxl  . cbStruct   sizeof (   MIXERLINE  );
         mxl  . dwComponentType   MIXERLINE_COMPONENTTYPE_DST_WAVEIN  ;
    
         MMRESULT   mres     =  mixerGetLineInfo ((   HMIXEROBJ  ) hMixer   ,
            &   mxl  ,
             MIXER_OBJECTF_HMIXER  | MIXER_GETLINEINFOF_COMPONENTTYPE   );
         if   mres   !=  MMSYSERR_NOERROR  )
        {
             continue  ;
        }
         DWORD      dwConnections      =    mxl .   cConnections  ;
    

         BOOL   bFoundMicro   FALSE ;
         for   DWORD   i =0 ;  i  < dwConnections   i ++ )
        {
             mxl  . dwSource   i ;
             mres   mixerGetLineInfo   (   (  HMIXEROBJ )   hMixer  ,   & mxl   ,
                 MIXER_OBJECTF_HMIXER     |    MIXER_GETLINEINFOF_SOURCE      );
        
             if   MMSYSERR_NOERROR   ==  mres  )
            {
                 if   mxl  . dwComponentType   ==  MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE   //found microphone
                {
                     dwLineInID   mxl   .  dwLineID //get lineIn device id.
                     bFoundMicro   TRUE   ;
                     break  ;
                }
            }
        }
      
         if  (! bFoundMicro   )
             continue  ;
     
         ZeroMemory  (& mxc   sizeof (   MIXERCONTROL  ));
         mxc  . cbStruct   sizeof (   mxc  );
      
         ZeroMemory  (& mxlc   sizeof (   MIXERLINECONTROLS  ));
         mxlc  . cbStruct   sizeof (   mxlc  );
         mxlc  . dwLineID   dwLineInID ;
    
         mxlc  . dwControlType   MIXERCONTROL_CONTROLTYPE_VOLUME ;
         mxlc  . cControls   = 1;        
         mxlc  . pamxctrl   = &  mxc ;       
         mxlc  . cbmxctrl   sizeof (   mxc  );
   
         mres   mixerGetLineControls   ((  HMIXEROBJ )   hMixer  ,
            &   mxlc  ,
             MIXER_GETLINECONTROLSF_ONEBYTYPE  );
     
         if  ( MMSYSERR_NOERROR   ==  mres )
        {
         
             MIXERCONTROLDETAILS           mxcd ;   
             MIXERCONTROLDETAILS_SIGNED   volStruct   ;
       
             ZeroMemory  (& mxcd   sizeof (   mxcd  ));
             mxcd  . cbStruct   sizeof (   mxcd  );     
             mxcd  . dwControlID   mxc .   dwControlID  ;
             mxcd  . paDetails   = &  volStruct ;       
             mxcd  . cbDetails   sizeof (   volStruct  );
             mxcd  . cChannels   = 1;                
       
             mres   mixerGetControlDetails   ((  HMIXEROBJ )   hMixer  ,
                &   mxcd  ,
                 MIXER_GETCONTROLDETAILSF_VALUE  );
             if  ( MMSYSERR_NOERROR   ==  mres )
            {
                 long   step   = (  mxc .   Bounds  . lMaximum   mxc .   Bounds  . lMinimum   ) /100;
                 int   index   = (  volStruct .   lValue   mxc   .  Bounds .   lMinimum  ) / step  ;
              
                 if  ( index   !=  nStep )
                {
                     volStruct  . lValue   nStep  *  step  ;
                     mres   mixerSetControlDetails   ((  HMIXEROBJ )   hMixer  ,
                        &   mxcd  ,
                         MIXER_SETCONTROLDETAILSF_VALUE  );

                     if  ( MMSYSERR_NOERROR   ==  mres )
                         return     volStruct   .  lValue ;
                }
            }
        }
    }
     return  -1;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值