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

原创 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环境下的声音系统

Windows环境下的麦克风录音系统简介   好多年前写的所谓的大学毕业设计,贴出来以资怀念自己的纯真年代吧。   本文简单介绍了声卡的工作原理,录音的原理以及数字音频的基本知识并且利用Windows...
  • jonfei
  • jonfei
  • 2007年05月10日 13:40
  • 1349

【VS开发】【智能语音处理】Windows下麦克风语音采集

简介    这是我很早以前的大学毕业设计,忽然间找到贴出来以纪念自己的纯真年代...但是因为CSDN不给面子所以导致短短的一篇文章贴了足足7次..他老提时说文章超过了64K,老大,拜托,那是算上了里...
  • LG1259156776
  • LG1259156776
  • 2016年07月07日 22:19
  • 3616

webrtc直播音频调节失效(小米等部分机型)

在使用webrtc集成到工程进行二次开发的过程中,由于机型适配情况的复杂性,很多问题在某些机型上不会出现,但是在另一些机型上可能就出现重大的或致命的错误,尤其在中国,手机厂商众多,每个厂家的rom都会...
  • duguju
  • duguju
  • 2016年06月19日 13:59
  • 1616

获取与设置windows系统下音频设备音量

一、获取设备音量 /** * @brief GetAudioOutputVolumn用于获取设备输出音量 * @remark 不指定设备可能导致获取的音量为0 */ int DeviceMana...
  • yixianfeng41
  • yixianfeng41
  • 2016年07月22日 01:09
  • 3683

自定义实现MPVolumeView音量控件

http://blog.csdn.net/theonezh/article/details/8158420 http://www.cnblogs.com/cate/ios/ http://www.cn...
  • l_ch_g
  • l_ch_g
  • 2013年08月17日 12:39
  • 10097

一个利用windows api控制放音音量和录音麦克风音量实现类(c++代码)

1、头文件(Mixer.h)// Mixer.h: interface for the CMixer class. // ///////////////////////////////////...
  • CometNet
  • CometNet
  • 2011年06月11日 08:57
  • 10130

麦克风声音直接输出到音响

1.首先检查声卡驱动,右击我的电脑--属性--硬件--设备管理器--声音.视频和游戏控制器--右击--ReaItek--更新或扫描,卸载重新安装。(如没有驱动包就下载驱动精灵2009 B1版--驱动更...
  • chenzhanhai
  • chenzhanhai
  • 2011年08月27日 17:40
  • 3520

android笔记:android系统各种音量的获取与设置

Android笔记 Android系统声音 AudioManager java Android xiaoyu940601
  • xiaoyu940601
  • xiaoyu940601
  • 2017年07月14日 10:45
  • 1168

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

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

IOS 通过麦克风检测声音分贝

1.  引入框架:AVFoundation.framework 2.  部分源码如下:
  • u011124373
  • u011124373
  • 2014年08月26日 20:46
  • 7688
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:音频设备操作(静音,音量调节,麦克风音量)
举报原因:
原因补充:

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