当前位置:首页
开发技术指南» 文章正文
    引言:

 ·请高手指点    »显示摘要«
    摘要: 最近想自学asp.net,看了一些资料产生几个疑惑: 1.不知用vb.net好还是用c#好 2.用vs.net开发,好还是用其它,如dreamweaver mx,记事本等好。 请高手给点建议,谢谢! ......
    摘要: 发送一封html邮件,另外再带一个附件。现在情况是这样:我单独发送一封html邮件时,能显示html邮件,但如果同时带一个附件发送的话,收到后不能html显示,显示的是文本方式,如何解决? ......


怎样控制系统录音的音量(注意是录音的音量,不是放音的音量)

双击系统右下角的小喇叭,弹出播放控制,然后点“选项”菜单,点击“属性”。在“调节音量”栏中选中“录音”,然后确定。这里就是调节录音音量的地方。  
   
  请问我想调节麦克风的录音音量,该怎么做?  
   
  我已经查过以前的贴子,所有的代码都只能调节放音的音量,而不是录音。  
   
  所以我重申一遍,只能调节放音音量的代码就不要再贴了,我问的是如何调节录音音量。  
   
  使用别的控件的方法不予考虑,只能用API。  
 

NO.1   作者: zijida

一段代码供参考:  
   
   
  int   CHMixerManager::Set_SpeakerConnectionVolume(UINT   rMixerID,   DWORD   rLineIndex,   DWORD   *rVolumePercent,   BOOL   *rMuteNow)  
  {  
  //   open   mixer   by   id  
  HMIXER   mixer   =   NULL;  
  HRESULT   hr   =   ::mixerOpen(  
  &mixer,  
  rMixerID,  
  NULL,  
  NULL,  
  MIXER_OBJECTF_MIXER);  
  if   (FAILED(hr))  
  return   ERR_BASE_MIM_FailedToOpenMixer;  
   
  //   get   line   count   of   destination   line  
  MIXERLINE   lineinfo;  
  ::ZeroMemory(&lineinfo,   sizeof(MIXERLINE));  
   
  lineinfo.cbStruct   =   sizeof(MIXERLINE);  
   
  lineinfo.dwComponentType   =   MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;  
   
  hr   =   ::mixerGetLineInfo(  
  (HMIXEROBJ)mixer,  
  &lineinfo,  
  MIXER_OBJECTF_HMIXER   |    
  MIXER_GETLINEINFOF_COMPONENTTYPE);  
   
  //   get   info   of   specified   connector  
  DWORD   lineID   =   lineinfo.dwDestination;  
  ::ZeroMemory(&lineinfo,   sizeof(MIXERLINE));  
   
  lineinfo.cbStruct   =   sizeof(MIXERLINE);  
  lineinfo.dwDestination   =   lineID;  
  lineinfo.dwSource   =   rLineIndex;  
  hr   =   ::mixerGetLineInfo(  
  (HMIXEROBJ)mixer,  
  &lineinfo,    
  MIXER_GETLINEINFOF_SOURCE);  
   
  if   (rVolumePercent)  
  {  
   
  //   get   volume   control   ID  
  MIXERCONTROL   mxc;  
  MIXERLINECONTROLS   mxlc;  
  mxlc.cbStruct   =   sizeof(MIXERLINECONTROLS);  
  mxlc.dwLineID   =   lineinfo.dwLineID;  
  mxlc.dwControlType   =   MIXERCONTROL_CONTROLTYPE_VOLUME;  
  mxlc.cControls   =   1;  
  mxlc.cbmxctrl   =   sizeof(MIXERCONTROL);  
  mxlc.pamxctrl   =   &mxc;  
  ::mixerGetLineControls(  
  reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxlc,  
  MIXER_OBJECTF_HMIXER|MIXER_GETLINECONTROLSF_ONEBYTYPE);  
   
  //   get   volume   value   range   now  
  MIXERCONTROLDETAILS_UNSIGNED   mxcdVolume;  
  MIXERCONTROLDETAILS   mxcd;  
  mxcd.cbStruct   =   sizeof(MIXERCONTROLDETAILS);  
  mxcd.dwControlID   =   mxc.dwControlID;  
  mxcd.cChannels   =   1;  
  mxcd.cMultipleItems   =   0;  
  mxcd.cbDetails   =   sizeof(MIXERCONTROLDETAILS_UNSIGNED);  
  mxcd.paDetails   =   &mxcdVolume;  
  mixerGetControlDetails(  
  reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxcd,  
  MIXER_GETCONTROLDETAILSF_VALUE);  
   
  //   set   volume  
  MIXERCONTROLDETAILS_UNSIGNED   mxcdVolume_Set   =   {    
  mxc.Bounds.dwMaximum   *   (*rVolumePercent)   /   100   };  
  MIXERCONTROLDETAILS   mxcd_Set;  
  mxcd_Set.cbStruct   =   sizeof(MIXERCONTROLDETAILS);  
  mxcd_Set.dwControlID   =   mxc.dwControlID;  
  mxcd_Set.cChannels   =   1;  
  mxcd_Set.cMultipleItems   =   0;  
  mxcd_Set.cbDetails   =   sizeof(MIXERCONTROLDETAILS_UNSIGNED);  
  mxcd_Set.paDetails   =   &mxcdVolume_Set;  
  mixerSetControlDetails(reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxcd_Set,  
  MIXER_OBJECTF_HMIXER   |  
  MIXER_SETCONTROLDETAILSF_VALUE);  
  }  
   
  if   (rMuteNow)  
  {  
   
  //   get   mute   control   id  
  MIXERCONTROL   mxc;  
  MIXERLINECONTROLS   mxlc;  
  mxlc.cbStruct   =   sizeof(MIXERLINECONTROLS);  
  mxlc.dwLineID   =   lineinfo.dwLineID;  
  mxlc.dwControlType   =   MIXERCONTROL_CONTROLTYPE_MUTE;  
  mxlc.cControls   =   1;  
  mxlc.cbmxctrl   =   sizeof(MIXERCONTROL);  
  mxlc.pamxctrl   =   &mxc;  
  hr   =   ::mixerGetLineControls(reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxlc,  
  MIXER_OBJECTF_HMIXER   |  
  MIXER_GETLINECONTROLSF_ONEBYTYPE);  
   
  //   set   mute   value   now  
  MIXERCONTROLDETAILS_BOOLEAN   mxcdMute   =   {   *rMuteNow   };  
  MIXERCONTROLDETAILS   mxcd;  
  mxcd.cbStruct   =   sizeof(MIXERCONTROLDETAILS);  
  mxcd.dwControlID   =   mxc.dwControlID;  
  mxcd.cChannels   =   1;  
  mxcd.cMultipleItems   =   0;  
  mxcd.cbDetails   =   sizeof(MIXERCONTROLDETAILS_BOOLEAN);  
  mxcd.paDetails   =   &mxcdMute;  
  hr   =   ::mixerSetControlDetails(reinterpret_cast<HMIXEROBJ>(mixer),  
    &mxcd,  
    MIXER_OBJECTF_HMIXER   |  
    MIXER_SETCONTROLDETAILSF_VALUE);  
   
  }  
   
  //   close   mixer  
  ::mixerClose(mixer);  
   
  return   0;  
  }

NO.2   作者: bohut

mark

NO.3   作者: vcmute

long   int   max_vol;  
        HMIXER   hmx;  
        mixerOpen(&hmx,   0,   0,   0,   0);  
   
  用MIXERLINE_COMPONENTTYPE_DST_WAVEIN   作参数可得到所有录音的Connection  
        MIXERLINE   mxl;  
        mxl.cbStruct   =   sizeof(mxl);  
        mxl.dwComponentType   =   MIXERLINE_COMPONENTTYPE_DST_WAVEIN   ;  
        mixerGetLineInfo((HMIXEROBJ)hmx,   &mxl,MIXER_GETLINEINFOF_COMPONENTTYPE);  
   
        DWORD   cConnections   =   mxl.cConnections;  
        for(DWORD   j=0;   j<cConnections;   j++)  
        {  
              mxl.dwSource   =   j;  
              mixerGetLineInfo((HMIXEROBJ)hmx,   &mxl,   MIXER_GETLINEINFOF_SOURCE);  
      AfxMessageBox(mxl.szName);  
        }  
   
  录音一般修改的是MIC的输入

NO.4   作者: boreboluomi

学习

NO.5   作者: whoo

走mixer思路是对了。  
  我以前在   codeproject   上发布过一个类,就是专门调节录音音量的。   时间长乐有点记不大清楚,应该是在多媒体、音频分类下。

NO.6   作者: zijida

谢谢楼主兄弟提点.偶是发错了.嘿嘿...  
   
   
  int   CHMixerManager::Set_WaveInConnectionLevel(UINT   rMixerID,   DWORD   rLineIndex,   DWORD   *rLevelPercent,   BOOL   *rSelected)  
  {  
  //   open   mixer   by   id  
  HMIXER   mixer   =   NULL;  
  HRESULT   hr   =   ::mixerOpen(  
  &mixer,  
  rMixerID,  
  NULL,  
  NULL,  
  MIXER_OBJECTF_MIXER);  
  if   (FAILED(hr))  
  return   ERR_BASE_MIM_FailedToOpenMixer;  
   
  //   get   line   id   of   destination   line  
  MIXERLINE   lineinfo_Dest;  
  ::ZeroMemory(&lineinfo_Dest,   sizeof(MIXERLINE));  
  lineinfo_Dest.cbStruct   =   sizeof(MIXERLINE);  
  lineinfo_Dest.dwComponentType   =   MIXERLINE_COMPONENTTYPE_DST_WAVEIN;  
  hr   =   ::mixerGetLineInfo(  
  (HMIXEROBJ)mixer,  
  &lineinfo_Dest,  
  MIXER_OBJECTF_HMIXER   |    
  MIXER_GETLINEINFOF_COMPONENTTYPE);  
   
  //   get   id   of   specified   connector  
  MIXERLINE   lineinfo_Connector;  
  ::ZeroMemory(&lineinfo_Connector,   sizeof(MIXERLINE));  
   
  lineinfo_Connector.cbStruct   =   sizeof(MIXERLINE);  
  lineinfo_Connector.dwDestination   =   lineinfo_Dest.dwLineID;  
  lineinfo_Connector.dwSource   =   rLineIndex;  
  hr   =   ::mixerGetLineInfo(  
  (HMIXEROBJ)mixer,  
  &lineinfo_Connector,    
  MIXER_GETLINEINFOF_SOURCE);  
   
   
  if   (rLevelPercent)  
  {  
   
  //   get   volume   control   ID  
  MIXERCONTROL   mxc;  
  MIXERLINECONTROLS   mxlc;  
  mxlc.cbStruct   =   sizeof(MIXERLINECONTROLS);  
  mxlc.dwLineID   =   lineinfo_Connector.dwLineID;  
  mxlc.dwControlType   =   MIXERCONTROL_CONTROLTYPE_VOLUME;  
  mxlc.cControls   =   1;  
  mxlc.cbmxctrl   =   sizeof(MIXERCONTROL);  
  mxlc.pamxctrl   =   &mxc;  
  ::mixerGetLineControls(  
  reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxlc,  
  MIXER_OBJECTF_HMIXER|MIXER_GETLINECONTROLSF_ONEBYTYPE);  
   
  //   get   volume   value   range   now  
  MIXERCONTROLDETAILS_UNSIGNED   mxcdVolume;  
  MIXERCONTROLDETAILS   mxcd;  
  mxcd.cbStruct   =   sizeof(MIXERCONTROLDETAILS);  
  mxcd.dwControlID   =   mxc.dwControlID;  
  mxcd.cChannels   =   1;  
  mxcd.cMultipleItems   =   0;  
  mxcd.cbDetails   =   sizeof(MIXERCONTROLDETAILS_UNSIGNED);  
  mxcd.paDetails   =   &mxcdVolume;  
  mixerGetControlDetails(  
  reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxcd,  
  MIXER_GETCONTROLDETAILSF_VALUE);  
   
  //   set   volume  
  MIXERCONTROLDETAILS_UNSIGNED   mxcdVolume_Set   =   {    
  mxc.Bounds.dwMaximum   *   (*rLevelPercent)   /   100   };  
  MIXERCONTROLDETAILS   mxcd_Set;  
  mxcd_Set.cbStruct   =   sizeof(MIXERCONTROLDETAILS);  
  mxcd_Set.dwControlID   =   mxc.dwControlID;  
  mxcd_Set.cChannels   =   1;  
  mxcd_Set.cMultipleItems   =   0;  
  mxcd_Set.cbDetails   =   sizeof(MIXERCONTROLDETAILS_UNSIGNED);  
  mxcd_Set.paDetails   =   &mxcdVolume_Set;  
  mixerSetControlDetails(reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxcd_Set,  
  MIXER_OBJECTF_HMIXER   |  
  MIXER_SETCONTROLDETAILSF_VALUE);  
  }  
   
   
   
  //////////////////////  
  //   selected   control  
   
  if   (rSelected)  
  {  
  //   get   dwControlID  
  MIXERCONTROL   mxc;  
  MIXERLINECONTROLS   mxlc;  
  mxlc.cbStruct   =   sizeof(MIXERLINECONTROLS);  
  mxlc.dwLineID   =   lineinfo_Dest.dwLineID;  
  DWORD   m_dwControlType   =   MIXERCONTROL_CONTROLTYPE_MIXER;  
  mxlc.dwControlType   =   m_dwControlType;  
  mxlc.cControls   =   1;  
  mxlc.cbmxctrl   =   sizeof(MIXERCONTROL);  
  mxlc.pamxctrl   =   &mxc;  
  if   (::mixerGetLineControls(reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxlc,  
  MIXER_OBJECTF_HMIXER   |  
  MIXER_GETLINECONTROLSF_ONEBYTYPE)  
  !=   MMSYSERR_NOERROR)  
  {  
  //   no   mixer,   try   MUX  
  mxlc.cbStruct   =   sizeof(MIXERLINECONTROLS);  
  mxlc.dwLineID   =   lineinfo_Dest.dwLineID;  
  m_dwControlType   =   MIXERCONTROL_CONTROLTYPE_MUX;  
  mxlc.dwControlType   =   m_dwControlType;  
  mxlc.cControls   =   1;  
  mxlc.cbmxctrl   =   sizeof(MIXERCONTROL);  
  mxlc.pamxctrl   =   &mxc;  
  if   (::mixerGetLineControls(reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxlc,  
  MIXER_OBJECTF_HMIXER   |  
  MIXER_GETLINECONTROLSF_ONEBYTYPE)  
  !=   MMSYSERR_NOERROR)  
  {  
  return   FALSE;  
  }  
  }  
   
  //   store   dwControlID,   cMultipleItems  
  //m_dwSelectControlID   =   mxc.dwControlID;  
  //m_dwMultipleItems   =   mxc.cMultipleItems;  
   
  if   (mxc.cMultipleItems   ==   0)  
  {  
  return   -1;  
  }  
   
  //   get   all   the   values   first  
  MIXERCONTROLDETAILS_BOOLEAN   *pmxcdSelectValue   =  
  new   MIXERCONTROLDETAILS_BOOLEAN[mxc.cMultipleItems];  
   
  if   (pmxcdSelectValue   !=   NULL)  
  {  
  MIXERCONTROLDETAILS   mxcd;  
  mxcd.cbStruct   =   sizeof(MIXERCONTROLDETAILS);  
  mxcd.dwControlID   =   mxc.dwControlID;  
  mxcd.cChannels   =   1;  
  mxcd.cMultipleItems   =   mxc.cMultipleItems;  
  mxcd.cbDetails   =   sizeof(MIXERCONTROLDETAILS_BOOLEAN);  
  mxcd.paDetails   =   pmxcdSelectValue;  
  if   (::mixerGetControlDetails(reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxcd,  
  MIXER_OBJECTF_HMIXER   |  
  MIXER_GETCONTROLDETAILSF_VALUE)  
  ==   MMSYSERR_NOERROR)  
  {  
  //   MUX   restricts   the   line   selection   to   one   source   line   at   a   time.  
  if   (m_dwControlType   ==   MIXERCONTROL_CONTROLTYPE_MUX)  
  {  
  ::ZeroMemory(pmxcdSelectValue,  
  mxc.cMultipleItems   *   sizeof(MIXERCONTROLDETAILS_BOOLEAN));  
  }  
   
  //   set   the   want   line   value  
  pmxcdSelectValue[mxc.cMultipleItems   -1   -   rLineIndex].fValue   =   TRUE;  
   
  mxcd.cbStruct   =   sizeof(MIXERCONTROLDETAILS);  
  mxcd.dwControlID   =   mxc.dwControlID;  
  mxcd.cChannels   =   1;  
  mxcd.cMultipleItems   =   mxc.cMultipleItems;  
  mxcd.cbDetails   =   sizeof(MIXERCONTROLDETAILS_BOOLEAN);  
  mxcd.paDetails   =   pmxcdSelectValue;  
  if   (::mixerSetControlDetails(reinterpret_cast<HMIXEROBJ>(mixer),  
  &mxcd,  
  MIXER_OBJECTF_HMIXER   |   MIXER_SETCONTROLDETAILSF_VALUE)  
  !=   MMSYSERR_NOERROR)  
  {  
  delete   []pmxcdSelectValue;  
  ::mixerClose(mixer);  
  return   -2;  
  }  
  }  
   
  delete   []pmxcdSelectValue;  
  }  
   
   
  }  
   
   
  //   close   mixer  
  ::mixerClose(mixer);  
   
  return   0;  
  }


    摘要: private sub cmdsend_click() dim byout() as byte dim buf$, i%, j%, buf1$ if a = 0 then buf = trim("90") & chr(13) & chr(10) cmdsend.caption = "结束" a = 1 elseif a = 1 the......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE