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

原创 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;  
   

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

上一节我们重点介绍了Core Audio APIs扬声器方面的设置,这一节我们重点介绍麦克风方面的设置,包括麦克风音量大小以及麦克风增强的设置,麦克风音量大小的设置也包括系统音量的设置和应用程序会话音...

一个函数实现调节录音麦克风输入音量

头文件包含:#include "mmsystem.h" #pragma comment(lib, "winmm.lib")BOOL SetMicrPhoneVolume(DWORD dwVolume)...
  • Augusdi
  • Augusdi
  • 2013年04月04日 23:29
  • 2369

麦克风增强音量调节

  • 2017年08月17日 15:32
  • 13KB
  • 下载

音频技术之调节音量及设置静音

本文主要介绍如何使用混音器Mixer API函数实现系统音量调节,以及设置静音。 1.混音器的作用及结构 1.1混音器的作用   声卡(音频卡)是计算机进行声音处理的适配器,具有三个...
  • wishfly
  • wishfly
  • 2015年12月21日 20:18
  • 1343

VC++音频技术之调节音量及设置静音

本文主要介绍如何使用混音器Mixer API函数实现系统音量调节,以及设置静音。 1.混音器的作用及结构 1.1混音器的作用   声卡(音频卡)是计算机进行声音处理的适配器,具有三个基本功能: ...

Android视频编辑器(五)音频编解码、从视频中分离音频、音频混音、音频音量调节等

前言      这篇博客,主要讲解的是android端的音频处理,在开发Android视频编辑器的时候,有一个非常重要的点就是音频的相关处理。比如如何从视频中分离音频(保存为mp3文件),然后分离出来...

获得与设置系统默认设备主音量音量大小以及静音控制函数

CoreApi::CoreApi(void) {  CoInitializeEx(NULL, COINIT_MULTITHREADED);   } CoreApi::~CoreApi(vo...
  • wishfly
  • wishfly
  • 2015年12月22日 18:32
  • 1376

都客win7音量调节助

  • 2014年02月20日 15:14
  • 130KB
  • 下载

前级音量调节PCB设计档

  • 2014年06月08日 09:30
  • 218KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:音频设备操作(静音,音量调节,麦克风音量)
举报原因:
原因补充:

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