用Mixer API函数调节控制面板的音频设置


所属类别:vc

文章作者:智慧的鱼

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


摘要:本文通过实例代码演示了如何通过Mixer API函数在程序中调节控制面板的音频设备性能的设置。

关键词:Mixer函数,控制面板,音频设备调节

如果你用过Windows的音频设备,比如播放音乐或者录音,聊天,调节麦克或者声音的大小,以及设置静音,都可以通过控制面板中的音频设置面板来调节,你对于下面的两个设置面板肯定不陌生。

播放时调节音量大小和左右声道的控制板,还可以通过它将某个设备设置为静音。

另一个就是录音时控制面板,在这里我们可以选择声音输入设备,以及调节录音时左右声道音量大小

这两个控制板是windows提供给我们的,这两个控制板是让windows用户在播放声音或者录音时莱调节音频设备的,通过这两个控制板,我们可以选择播放或者录音的音频设备,设置音量的大小,调整左右声道。但是如果我们自己开发的程序中也要用到这个功能该怎么办,比如你开发的程序想给用户提供一个调节音频设备的界面,可以让用户很方便的通过你的程序提供的功能来调节和选择相应的音频设备,而不是每次都要转到系统的控制面板中来调节它们,当用户通过我们提供的接口对设备进行的调整,在系统的控制面板中的音频设备设置要相应的发生改变,并且当用户通过系统控制面板调整音频设置后,在我们程序的界面上也会发生相应的改变。我最近在开发过程中就遇到这个问题,通过仔细的查阅msdn以及其他的资料,终于解决了这个问题,下面我将我的经验总结一下,如果你也遇到相类似的问题,希望能对你有所帮助。

如何来控制系统中任何的音频输出和输入,比如波形音频,MIDI ,CD音频,合成语音等音频输出以及Line in ,麦克等输入,windows给我们提供了一组API接口函数,称为Mixer系列的函数,mixer也称为混音器,通过混音器可以实现混音和音量控制。最基本的混音器结构单元是音频线路,比如microphone ,line in ,cd,midi等都是一个音频线路。音频线路包含一个或者多个发源于单一音源或系统资源的声道,例如,一个立体声音频线路有两个声道,但仍然被看成是一个音频线路,因为它发源于一个音源。

下面我要先简单的介绍一下Mixer函数,其实反正总共也没有几个,使用起来很简单的。

mixerOpen

mixerClose

mixerGetDeVCaps

mixerGetLineControls

mixerGetLineInfo

mixerGetControlDetails

mixerSetControlDetails

mixerGetID

mixerGetNumDevs

看到了吧,就这么简单的几个函数,通过这9个API,我们就可以来控制音频的输入和输出设备了,其实有关这几个函数的定义你可以在C:\Program Files\Microsoft Visual Studio\VC98\Include\mmsystem.h文件中找到。下面我简单介绍一下这几个函数,详细地介绍你可以参见msdn。

mixerOpen和mixerClose函数用来打开和关闭混音器设备

mixerGetNumDevs可以确定系统中有多少混音器设备

mixerGetDevCaps函数可以确定混音器设备的能力

mixerGetLineInfo可以检索指定音频线路的信息

mixerGetLineControls用于检索一个或者多个与音频线路相关的控制的通用信息

mixerGetControlDetails用于检索与某个音频线路相关的一个控制的属性

mixerSetControlDetails用于设置制定控制的属性。

其实我们主要用到的就是后面的四个函数,希望大家重点研究一下。混音器还提供了窗口回调服务,用户在调用mixeropen的时候,可以将一个窗口句柄作为参数传递给mixer,这样,当mixer设备发生变化时就会给回调窗口发送消息通知,比如用户通过控制面板调整了音量的大小,或者选择了某个录音设备。消息的类型就两个MM_MIXM_LINE_CHANGE和MM_MIXM_CONTROL_CHANGE。

下面就不多说了,我用一个例子告诉你如何在程序中对音频设备进行设置。

这里播放和录音我都只是选择了几个常用的设备,当然系统提供的设备比我这里的举例用到的设备要多,你可以根据我提供的方法来对其他的设备进行控制。还有说明一下,具有两个滑动条的表示左右声道。但是像麦克风只有一个声道。

通过我们的程序界面我们就可以像在控制面板里一样可以调节左右声道的音量,以及选择某个设备进行录音,或者对某个音频线路进行静音,相应的系统的设置也会被改变,如果你通过系统的控制面板进行设置,在我们的程序界面也上同步的可以反映出来变化。

关于工程的建立我就不多少了,很简单的,就是一个基于对话框的工程,上面放了一些控件。下面我主要讲一下每个功能是如何实现的。主要有三个功能1 如何调整左右声道音量的大小,2 如何将某个设备静音,3 如何选择录音设备。

这里关于mixer函数的用法还要先唠叨几句。一般来说,对音频线路的操作流程如下:

1、通过GetLineInfo获取指定音频线路的信息,返回一个MIXERLINE结构

2、然后通过GetLineControl获取音频线路相关的控制的通用信息,通过MIXERCONTROL结构返回。

3、通过GetConrolDetails获取指定控制的属性值

4、通过SetControlDetails设置指定控制的属性值,

对于每个线路设备,mixer都用一个类型值来标示,比如:

Volume 1f40 对应的值 MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

CD 对于的值 MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC

Midi对应的值为 MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER

Wave对应的值为 MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT

Line in对应的值为 MIXERLINE_COMPONENTTYPE_SRC_LINE

Microphone对应的值为 MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE

我们可以通过音频线路的类型值获得相应的线路的信息,也可以通过音频线路的设备ID来获取相应的线路的信息。

下面开始我们编程吧。

首先定义三个变量

然后就是要打开mixer,可以在对话的初始化中作这些工作。

接着我先演示一下如何获取和设置录音设备的左右声道的音量值,以及如何静音放音设备,这里以Volume为例,其他的设备类似,你可以照着我的代码,套用即可。

1、如何获取Volume设备的音量大小

2、如何根据滑动条的位置来调整系统音量的大小

3、下面演示一下如何设置Volume设备的静音

这里提供了两个函数,GetMute用来获取系统设置中是否对某个音频线路进行了静音操作,SetMute是用来对系统的某个音频线路进行静音操作。

如果用这两个函数呢,下面我演示了如何设置和获取Volume音频线路的静音操作。

4、下面看看当系统的设置改变时,mixer是如何通知我们的吧。

还记得我前面讲过的,当我们调用mixeropen时可以传递一个窗口的句柄作为回调窗口,当系统的设置改变,比如音量改变,某个音频线路被静音时,mixer都会给我们的回调窗口发送消息的。

一般只有两个消息,如下

相关信息

·  Windows Server 2003 计算机上安装 Windows Server 2003 SP 2 后可能遇到网络相关问题

· session和viewstate的比较

· 利用SQL Server 2005数据库邮件发送电子邮件

· JavaScript创建命名空间(namespace)的最简实现








....

86070 33754