声音调节器

来源:互联网 发布:管家婆软件厦门专卖店 编辑:程序博客网 时间:2024/04/29 20:00
 
1.包含文件
#include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")
2.定义变量
UINT m_nNumMixers;
HMIXER m_hMixer;
MIXERCAPS m_mxcaps;
CString m_strDstLineName,m_strVolumeControlName;
DWORD m_dwMinimum,m_dwMaximum;
DWORD m_dwVolumeControlID;
3.初始化:
BOOL CVolumeCtrl::amdInitialize()
{
m_nNumMixers = ::mixerGetNumDevs();
m_hMixer = NULL;
::ZeroMemory(&m_mxcaps,sizeof(MIXERCAPS));
if(m_nNumMixers != 0) {
  if(::mixerOpen(&m_hMixer,
      0,
      (DWORD)m_hParent->GetSafeHwnd(),
      NULL,
      MIXER_OBJECTF_MIXER|CALLBACK_WINDOW)
   != MMSYSERR_NOERROR) {
   return FALSE;
  }
  if(::mixerGetDevCaps((UINT)m_hMixer,&m_mxcaps,sizeof(MIXERCAPS))
   != MMSYSERR_NOERROR) {
   return FALSE;
  }
}
else {
  return FALSE;
}
return TRUE;
}
­
4.设置声音
BOOL CVolumeCtrl::SetVolume(DWORD dwVol)
{
if(m_hMixer == NULL ||
  m_strDstLineName.IsEmpty() ||
  m_strVolumeControlName.IsEmpty()
  ) {
  return FALSE;
}
MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = {dwVol};
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = m_dwVolumeControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = &mxcdVolume;
if(::mixerSetControlDetails((HMIXEROBJ)m_hMixer,
    &mxcd,
    MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE)
   != MMSYSERR_NOERROR) {
  return FALSE;
}
return TRUE;
}
­
5.获取声音:
BOOL CVolumeCtrl::GetVolume(DWORD &dwVol)
{
if(m_hMixer == NULL ||
  m_strDstLineName.IsEmpty() ||
  m_strVolumeControlName.IsEmpty()
  ) {
  return FALSE;
}
MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = {dwVol};
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = m_dwVolumeControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = &mxcdVolume;
if(::mixerGetControlDetails((HMIXEROBJ)m_hMixer,
    &mxcd,
    MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE)
   != MMSYSERR_NOERROR) {
  return FALSE;
}
dwVol = mxcdVolume.dwValue;
return TRUE;
}
6.
­
BOOL CVolumeCtrl::amdGetVolumeControl()
{
m_strDstLineName.Empty();
m_strVolumeControlName.Empty();
if(m_hMixer == NULL) {
  return FALSE;
}
MIXERLINE mxl;
mxl.cbStruct = sizeof(MIXERLINE);
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if(::mixerGetLineInfo((HMIXEROBJ)m_hMixer,
    &mxl,
    MIXER_OBJECTF_HMIXER |
    MIXER_GETLINEINFOF_COMPONENTTYPE)
   != MMSYSERR_NOERROR) {
  return FALSE;
}
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) {
  return FALSE;
}
m_strDstLineName = mxl.szName;
m_strVolumeControlName = mxc.szName;
m_dwMinimum = mxc.Bounds.dwMinimum;
m_dwMaximum = mxc.Bounds.dwMaximum;
m_dwVolumeControlID = mxc.dwControlID;
return TRUE;
}
原创粉丝点击