音频设备操作(静音,音量调节,麦克风音量)

原创 2007年09月13日 20:31:00

音频设备操作(静音,音量调节,麦克风音量)
// GTVolumeMute.h: interface for the CGTVolumeMute class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GTVOLUMEMUTE_H__AFD7D44E_54A3_48B6_A87E_7CFD0A17D148__INCLUDED_)
#define AFX_GTVOLUMEMUTE_H__AFD7D44E_54A3_48B6_A87E_7CFD0A17D148__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include   <mmsystem.h>  
#include   <mmreg.h>


class CGTVolumeMute 
{
public:
 CGTVolumeMute();
 virtual ~CGTVolumeMute();

public:
 unsigned   WINAPI   GetVolume(int   dev);
 bool   WINAPI   SetVolume(long   dev,long   vol);
 bool   WINAPI   SetMute(long   dev,bool   vol);
 bool   WINAPI   GetMute(long   dev);

private:
 bool   GetVolumeControl(HMIXER  hmixer,long  componentType, long ctrlType,MIXERCONTROL* mxc);
 long   GetMuteValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc);
 unsigned   GetVolumeValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc);
 bool   SetMuteValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc,   bool   mute);
 bool   SetVolumeValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc,   long   volume);
 
};

#endif // !defined(AFX_GTVOLUMEMUTE_H__AFD7D44E_54A3_48B6_A87E_7CFD0A17D148__INCLUDED_)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// GTVolumeMute.cpp: implementation of the CGTVolumeMute class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Dlg.h"
#include "GTVolumeMute.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGTVolumeMute::CGTVolumeMute()
{
 
}

CGTVolumeMute::~CGTVolumeMute()
{
 
}

bool  CGTVolumeMute::GetVolumeControl(HMIXER   hmixer   ,long   componentType,long   ctrlType,MIXERCONTROL*   mxc)  
{  
 MIXERLINECONTROLS   mxlc;  
 MIXERLINE   mxl;  
 mxl.cbStruct   =   sizeof(mxl);  
 mxl.dwComponentType   =   componentType;  
 if(!mixerGetLineInfo((HMIXEROBJ)hmixer,   &mxl,   MIXER_GETLINEINFOF_COMPONENTTYPE))  
 {  
  mxlc.cbStruct   =   sizeof(mxlc);  
  mxlc.dwLineID   =   mxl.dwLineID;  
  mxlc.dwControlType   =   ctrlType;  
  mxlc.cControls   =   1;  
  mxlc.cbmxctrl   =   sizeof(MIXERCONTROL);  
  mxlc.pamxctrl   =   mxc;  
  if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE))  
   return   0;  
  else  
   return   1;  
 }  
 return   0;  
}    
//---------------------------------------------------------------------------  
long   CGTVolumeMute::GetMuteValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc)  
{  
 MIXERCONTROLDETAILS   mxcd;  
 MIXERCONTROLDETAILS_BOOLEAN   mxcdMute;  
 mxcd.hwndOwner   =   0;  
 mxcd.cbStruct   =   sizeof(mxcd);  
 mxcd.dwControlID   =   mxc->dwControlID;  
 mxcd.cbDetails   =   sizeof(mxcdMute);  
 mxcd.paDetails   =   &mxcdMute;  
 mxcd.cChannels   =   1;  
 mxcd.cMultipleItems   =   0;    
 if   (mixerGetControlDetails((HMIXEROBJ)hmixer,   &mxcd,MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))    
  return   -1;  
 return   mxcdMute.fValue;  
}    

//---------------------------------------------------------------------------    
unsigned   CGTVolumeMute::GetVolumeValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc)  
{  
 MIXERCONTROLDETAILS   mxcd;  
 MIXERCONTROLDETAILS_UNSIGNED   vol;   vol.dwValue=0;    
 mxcd.hwndOwner   =   0;  
 mxcd.cbStruct   =   sizeof(mxcd);  
 mxcd.dwControlID   =   mxc->dwControlID;    
 mxcd.cbDetails   =   sizeof(vol);  
 mxcd.paDetails   =   &vol;  
 mxcd.cChannels   =   1;  
 if(mixerGetControlDetails((HMIXEROBJ)hmixer,   &mxcd,   MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))  
  return   -1;    
 return   vol.dwValue;    
}  

//---------------------------------------------------------------------------  
bool   CGTVolumeMute::SetMuteValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc,   bool   mute)  
{  
 MIXERCONTROLDETAILS   mxcd;  
 MIXERCONTROLDETAILS_BOOLEAN   mxcdMute;mxcdMute.fValue=mute;  
 mxcd.hwndOwner   =   0;  
 mxcd.dwControlID   =   mxc->dwControlID;  
 mxcd.cbStruct   =   sizeof(mxcd);  
 mxcd.cbDetails   =   sizeof(mxcdMute);  
 mxcd.paDetails   =   &mxcdMute;    
 mxcd.cChannels   =   1;  
 mxcd.cMultipleItems   =   0;  
 if   (mixerSetControlDetails((HMIXEROBJ)hmixer,   &mxcd,   MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))    
  return   0;  
 return   1;  
}    

//---------------------------------------------------------------------------  

bool   CGTVolumeMute::SetVolumeValue(HMIXER   hmixer   ,MIXERCONTROL   *mxc,   long   volume)  
{  
 MIXERCONTROLDETAILS   mxcd;  
 MIXERCONTROLDETAILS_UNSIGNED   vol;vol.dwValue   =   volume;  
 mxcd.hwndOwner   =   0;  
 mxcd.dwControlID   =   mxc->dwControlID;  
 mxcd.cbStruct   =   sizeof(mxcd);  
 mxcd.cbDetails   =   sizeof(vol);  
 mxcd.paDetails   =   &vol;  
 mxcd.cChannels   =   1;  
 if(mixerSetControlDetails((HMIXEROBJ)hmixer,   &mxcd,   MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))  
  return   0;  
 return   1;  
}  


//---------------------------------------------------------------------------  
unsigned   WINAPI   CGTVolumeMute::GetVolume(int   dev)//&micro;&Atilde;&micro;&frac12;&Eacute;è±&cedil;&micro;&Auml;&Ograve;&ocirc;&Aacute;&iquest;dev=0&Ouml;÷&Ograve;&ocirc;&Aacute;&iquest;&pound;&not;1WAVE   ,2MIDI   ,3   LINE   IN  
{  
   
 long   device;unsigned   rt=0;  
 MIXERCONTROL   volCtrl;  
 HMIXER   hmixer;    
 switch   (dev)  
 {  
 case   1:    
  device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;   break;  
 case   2:    
  device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;   break;    
 case   3:  
  //   device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;   break;   //   cd   &Ograve;&ocirc;&Aacute;&iquest;    
  //   device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;   break;   //&Acirc;ó&iquest;&Euml;·&ccedil;&Ograve;&ocirc;&Aacute;&iquest;  
  //   device=MIXERLINE_COMPONENTTYPE_SRC_LINE;   break;   //PC   &Ntilde;&iuml;&Eacute;ù&AElig;÷&Ograve;&ocirc;&Aacute;&iquest;    
  device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;   break;    
 case   4:  
  device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;break;  
 default:  
  device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;    
 }  
   
 if(mixerOpen(&hmixer,   0,   0,   0,   0))   return   0;  
 if(!GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))    
  return   0;  
 rt=GetVolumeValue(hmixer,&volCtrl)*100/volCtrl.Bounds.lMaximum;  
 mixerClose(hmixer);  
 return   rt;  
   
}  

//---------------------------------------------------------------------------  
bool   WINAPI   CGTVolumeMute::SetVolume(long   dev,long   vol)
{  
 //   dev   =0,1,2   ·&Ouml;±&eth;±í&Ecirc;&frac34;&Ouml;÷&Ograve;&ocirc;&Aacute;&iquest;,&sup2;¨&ETH;&Icirc;,MIDI   ,LINE   IN  
 //   vol=0-100   ±í&Ecirc;&frac34;&Ograve;&ocirc;&Aacute;&iquest;&micro;&Auml;&acute;ó&ETH;&iexcl;   ,   &Eacute;è&Ouml;&Atilde;&Oacute;&euml;·&micro;&raquo;&Oslash;&Ograve;&ocirc;&Aacute;&iquest;&micro;&Auml;&Ouml;&micro;&Oacute;&Atilde;&micro;&Auml;&Ecirc;&Ccedil;°&Ugrave;·&Ouml;±&Egrave;&pound;&not;&frac14;&acute;&Ograve;&ocirc;&Aacute;&iquest;&acute;&Oacute;0   -   100&pound;&not;&para;&oslash;&sup2;&raquo;&Ecirc;&Ccedil;&Eacute;è±&cedil;&micro;&Auml;&frac34;&oslash;&para;&Ocirc;&Ouml;&micro;  
 //   retrun   false   ±í&Ecirc;&frac34;&Eacute;è&Ouml;&Atilde;&Ograve;&ocirc;&Aacute;&iquest;&micro;&Auml;&acute;ó&ETH;&iexcl;&micro;&Auml;&sup2;&Ugrave;×÷&sup2;&raquo;&sup3;&Eacute;&sup1;&brvbar;  
 //   retrun   true   ±í&Ecirc;&frac34;&Eacute;è&Ouml;&Atilde;&Ograve;&ocirc;&Aacute;&iquest;&micro;&Auml;&acute;ó&ETH;&iexcl;&micro;&Auml;&sup2;&Ugrave;×÷&sup3;&Eacute;&sup1;&brvbar;  
   
 long   device;  
 bool   rc=false;  
 MIXERCONTROL   volCtrl;  
 HMIXER   hmixer;  
 switch   (dev)  
 {  
 case   1:  
  device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;   break;  
 case   2:  
  device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;   break;  
 case   3:  
  device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;   break;  
 case   4:  
  device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;break;  
 default:  
  device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;  
 }  
   
 if(mixerOpen(&hmixer,   0,   0,   0,   0))   return   0;  
   
 if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))  
 {  
  vol=vol*volCtrl.Bounds.lMaximum/100;    
  if(SetVolumeValue(hmixer,&volCtrl,vol))  
   rc=true;  
 }  
 mixerClose(hmixer);    
 return   rc;    
}  

//---------------------------------------------------------------------------  

bool   WINAPI   CGTVolumeMute::SetMute(long   dev,bool   vol)//&Eacute;è&Ouml;&Atilde;&Eacute;è±&cedil;&frac34;&sup2;&Ograve;&ocirc;  
{  
 //   dev   =0,1,2   ·&Ouml;±&eth;±í&Ecirc;&frac34;&Ouml;÷&Ograve;&ocirc;&Aacute;&iquest;,&sup2;¨&ETH;&Icirc;,MIDI   ,LINE   IN  
 //   vol=0,1   ·&Ouml;±&eth;±í&Ecirc;&frac34;&Egrave;&iexcl;&Iuml;&ucirc;&frac34;&sup2;&Ograve;&ocirc;,&Eacute;è&Ouml;&Atilde;&frac34;&sup2;&Ograve;&ocirc;  
 //   retrun   false   ±í&Ecirc;&frac34;&Egrave;&iexcl;&Iuml;&ucirc;&raquo;ò&Eacute;è&Ouml;&Atilde;&frac34;&sup2;&Ograve;&ocirc;&sup2;&Ugrave;×÷&sup2;&raquo;&sup3;&Eacute;&sup1;&brvbar;  
 //   retrun   true   ±í&Ecirc;&frac34;&Egrave;&iexcl;&Iuml;&ucirc;&raquo;ò&Eacute;è&Ouml;&Atilde;&frac34;&sup2;&Ograve;&ocirc;&sup2;&Ugrave;×÷&sup3;&Eacute;&sup1;&brvbar;  
   
 long   device;  
 bool   rc=false;  
 MIXERCONTROL   volCtrl;  
 HMIXER   hmixer;  
 switch   (dev)  
 {  
 case   1:  
  device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;   break;  
 case   2:  
  device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;   break;  
 case   3:  
  device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;   break;  
 case   4:  
  device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;break;  
 default:    
  device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;  
 }    
   
 if(mixerOpen(&hmixer,   0,   0,   0,   0))   return   0;    
 if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_MUTE,&volCtrl))  
  if(SetMuteValue(hmixer,&volCtrl,(bool)vol))  
   rc=true;  
  mixerClose(hmixer);  
  return   rc;  
}  

//---------------------------------------------------------------------------  

bool   WINAPI   CGTVolumeMute::GetMute(long   dev)
{  
 //dev   =0,1,2   ·&Ouml;±&eth;±í&Ecirc;&frac34;&Ouml;÷&Ograve;&ocirc;&Aacute;&iquest;&pound;&not;&sup2;¨&ETH;&Icirc;,MIDI   ,LINE   IN  
 //   retrun   false   ±í&Ecirc;&frac34;&Atilde;&raquo;&Oacute;&ETH;&frac34;&sup2;&Ograve;&ocirc;  
 //   retrun   true   ±í&Ecirc;&frac34;&frac34;&sup2;&Ograve;&ocirc;  
 long   device;  
 bool   rc=false;  
 MIXERCONTROL   volCtrl;  
 HMIXER   hmixer;  
 switch   (dev)  
 {  
 case   1:  
  device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;   break;  
 case   2:  
  device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;   break;  
 case   3:  
  device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;   break;  
 case   4:  
  device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;break;  
 default:  
  device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;  
 }  
   
 if(mixerOpen(&hmixer,   0,   0,   0,   0))   return   0;  
   
 if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_MUTE,&volCtrl))  
  rc = GetMuteValue(hmixer,&volCtrl) == 0 ? false : true;

 mixerClose(hmixer);  
 return   rc;  
   

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Windows下Core Audio APIS 音频应用开发(二)

对于一个音频应用程序,最基本也是最重要的两个点就是:音频数据的采集;音频数据的播放。下面我们来看下如何用Core Audio APIS进行音频数据的采集。     最权威的学习资料无疑是微软的MSD...
  • lwsas1
  • lwsas1
  • 2015-07-13 14:38
  • 1245

Core Audio APIS in Vista/Win7实现

应用范围:Vista / win7, 不支持XP 1. 关于Windows Core Auido APIs       在Windowss Vista及Windows 7操作系统下,微软为应用...

Windows下Core Audio APIS 音频应用开发(一)

http://msdn.microsoft.com/en-us/library/dd370784(v=vs.85).aspx文章翻译 译文转载自http://www.cppblog.com/shen...
  • lwsas1
  • lwsas1
  • 2015-07-13 11:01
  • 1103

Core Audio APIs 技术笔记一(扬声器音量设置)

最近在做winsows上音频方面的程序,用到Core Audio APIs系列API来设置相关音频设备参数,所以对用到这方面的知识做一个总结。Core Audio APIs是Windows Vista...

Core Audio APIs 技术笔记二(麦克风音量和增强设置)

Core Audio APIs 技术笔记二(麦克风音量和增强设置) 2013-12-09 09:43 718人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博...

Windows下Core Audio APIS 音频应用开发(四)

前面说了音频数据的采集和播放,接下来我们说说如何利用Core Audio APIS来控制音量。     从官网文档的编排上看,在介绍Volume Controls之前,文档上先给我们介绍了一个比较重要...
  • lwsas1
  • lwsas1
  • 2015-08-04 16:15
  • 1245

Core Audio 枚举电脑上音频设备.

代码来源: https://github.com/skitaoka/windows-core-audio-api-samples   默认配置是 VS2015编译,如果没有安装,编译会失败, 通过  ...

在 ASP.NET 中执行 URL 重写

发布日期: 8/23/2004 | 更新日期: 8/23/2004Scott Mitchell4GuysFromRolla.com适用范围:Microsoft® ASP.NET摘要:介绍如何使用 Mi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)