能够处理多媒体信息的个人计算机称为“多媒体个人计算机”,英文简写是MPC。为了使计算机能够正确处理多媒体信息,Microsoft公司联合一些其他公司制定了多媒体个人计算机标准,该标准是以Intel处理器为基础构成多媒体计算机的最低硬件规范。计算机多媒体涉及以下技术。 一、声卡 声卡(也叫音频卡)是MPC的必要部件,它是计算机进行声音处理的适配器。声卡有三个基本功能:一是音乐合成发音功能;二是混音器(Mixer)功能和数字声音效果处理器(DSP)功能;三是模拟声音信号的输入和输出功能。 音乐合成有两种方法。一种是调频(FM)合成法,FM合成方式是将多个频率的简单声音合成复合音来模拟各种乐器的声音。FM合成方式是早期使用的方法,用这种方法产生的声音音色少、音质差。另一种是波形表(Wavetable)合成法。这种方法是先把各种真正乐器的声音录下来,再进行数字化处理形成波形数据,然后将各种波形数据存储在只读存储器中。发音时通过查表找到所选乐器的波形数据,再经过调制、滤波、再合成等处理形成立体声送去发音。存储声音样本的ROM容量的大小对波表合成效果影响很大。 混音器的作用是将来自音乐合成器、CD-ROM、话筒输入(MIC)等不同来源的声音组合在一起再输出,混音器是每种声音卡都有的。数字声音效果处理器是对数字化的声音信号进行处理以获得所需要的音响效果(混响、延时、合唱等),数字声音效果处理器是高档声卡具备的功能。 模拟声音输入输出功能 主要是A/D、D/A转换。一般声音信号是模拟信号,计算机不能对模拟信号进行处理。声音信号输入后要将模拟信号转换成数字信号再由计算机进行处理。由于扬声器只能接受模拟信号,所以声卡输出前要把数字信号转换成模拟信号。 常用于表示声卡性能的两个参数是采样率和模拟量转换成数字量之后的数据位数(简称量化位数)。采样率决定了频率响应范围,对声音进行采样的三种标准以及采样频率分别为:语音效果(11 kHz)、音乐效果(22 kHz)、高保真效果(44.1 kHz),目前声卡的最高采样率为44.1KHz。对声波每次采样后存储、记录声音振幅所用的位数称为采样位数,16位声卡的采样位数就是16。量化位数决定了音乐的动态范围,量化位数有8位和16位两种。8位声卡的声音从最低音到最高音只有256个级别,16位声卡有65536个高低音级别。 MIDI是数字乐器接口的国际标准,它定义了电子音乐设备与计算机的通讯接口,规定了使用数字编码来描述音乐乐谱的规范。常见的MIDI设备有电子琴等。计算机中以MID为扩展名的文件称为MIDI文件,其中存放的是对MIDI设备的命令,即每个音符的频率、音量、通道号等指示信息。最后播出的声音是由MIDI设备根据这些信息产生的。MIDI声音可以用于配音。 MIDI与声波形式的声音不同,MIDI技术不是对声波进行编码,而是把MIDI乐器上产生的每一活动编码记录下来存储在MIDI文件中,放在MIDI消息中。MIDI 传输的不是声音信号, 而是音符、控制参数等指令, 它指示MIDI 设备要做什么,怎么做, 如演奏哪个音符、多大音量等。它们被统一表示成MIDI 消息(MIDI Message) .MIDI文件中的音乐可通过音频处理卡中声音合成器或与PC机连接的外部MIDI声音合成器来产生高质量的音乐效果。MIDI技术的优点是可以节省大量的存储空间,并可方便地配乐。
自然声是声波信号,录制自然声时,需要将模拟量转换成数字信息。采样频率越高,声音就越真,但形成的数字信息就越多,占用的存储量也越大。所以一般都需要采用压缩技术。 声卡处理的声音信息在计算机中以文件的形式存储。Windows使用的标准数字音频文件称为波形文件,扩展名为WAV;扩展名为VOL的声音文件主要用于DOS程序;扩展名为MID的文件用于存储MIDI类声音信息;它比WAV文件更节省空间。声音文件的存储量等于采样频率×采样位数×声道数。 声卡使用的总线有ISA总线和PCI总线。 声卡工作应有相应的软件支持,包括驱动程序、混频程序(mixer)和CD播放程序等。 二、CD-ROM CD-ROM是MPC的常用外存之一。CD-ROM包括光盘和光盘驱动器(简称光驱)两部分。 光盘上用“平地”和“凹坑”来表示二进制信息,通过激光的反射来读出其中存储的信息。光盘上无论是“平地”上还是“凹坑”内都表示数字“0”,而在凹凸变化之处才表示数字“1”。 从光盘上读出的数字还要通过处理才能变换成为实际输入的信息。光盘上的信息沿光道存放。光道是一条螺旋线,从内到外存放信息。光盘的光道上分为三个区:导入区、信息区、导出区。目前常用的光盘都是单面只读光盘。光盘的优点是存储量大,制作成本低,不怕磁和热,寿命长。光盘有三种类型。一种是只读型光盘CD-ROM,这种光盘盘片由生产厂家预先写入信息,用户使用时只能读出不能写入。第二种是只写一次型光盘WORM(Write Once ,Read Many),这种光盘可以由用户写入信息,但是只能写一次,以后只能读出。第三种是可擦写型光盘,这种光盘类似磁盘,可以重复读写,这种光盘使用的盘片材料与前两种不同。 光盘片的直径一般是5.25英寸。目前一般用户使用的光盘是CD-ROM。CD-ROM驱动器的速度通常以数据传输率来衡量。数据传输率以150KB/S为一倍速(与音乐CD相当),目前已经达到40倍速。 光盘上存储信息必须标准化,目前国际上已经有种光盘存储信息标准,主要有用于存储音频信息的CD-DA(CD-Digital Audio)标准,按照该标准每张光盘可以存储60分钟的音乐信息;用于存储计算机文件信息的ISO9660标准,按照该标准每张光盘的容量为650MB;根据MPEG-1压缩技术标准制定的,用于存储视频信息的Video CD标准,按照该标准每张光盘可以存储74分钟的VCD内容;根据MPEG-2压缩标准制定的DVD标准可录制2小时以上的影片,容量可达4.7GB以上。 光驱是对光盘上存储的信息进行读写操作的设备。光驱由光盘驱动部件和光盘转速控制电路、读写光头和读写电路、聚焦控制、寻道控制、接口电路等部分组成。 光驱的接口有AT总线型、IDE型(包括增强IDE型)、SCSI型等。 三、视频卡 多媒体计算机中处理活动图像的适配器称为视频卡。视频卡是一种统称,视频卡有视频叠加卡、视频捕获卡、电视编码卡、电视选台卡、压缩/解压卡等。 视频叠加卡的作用是将计算机的VGA信号与视频信号叠加,然后把叠加后的信号在显示器上显示。视频叠加卡用于对连续图像进行处理,产生特技效果。 视频捕获卡的作用是从视频信号中捕获一幅画面,然后存储起来供以后使用。这种卡用于从电视节目、录相带中提取一幅静止画面存储起来供编辑或演示使用。 电视编码卡的作用是将计算机VGA信号转换成视频信号。这种卡一般用于把计算机的屏幕内容送电视机或录相设备。 电视选台卡相当于电视机的高频头,起选台的作用。电视选台卡和视频叠加卡配合使用就可以在计算机上观看电视节目。现在又将这两种卡合二为一,称为电视卡。 压缩/解压卡用于将连续图像的数据压缩和解压。 连续图像的数据量很大,这样的存储容量是目前计算机所没有的。为了解决这个问题,人们对连续图像的数据进行压缩以减少存储量。数据压缩就是把重复的数据去掉,图像压缩后便于存储。图像在重放时要进行解压以便重现图像,解压方法和压缩方法相反。 图像压缩和解压方法有多种。比较具有权威的压缩/解压技术是MPEG技术。MPEG技术又分为MPEG-I和MPEG-II两种,这两种技术都是国际标准。目前比较流行的是MPEG-I标准压缩/解压技术。一般VCD盘中的图像都采用MPEG-I标准压缩。 四、触摸屏 为了操作方便,人们用触摸屏代替鼠标或键盘,根据手指触摸的图标或菜单位置来定位选择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器,然后把接受的信息送主机。 触摸屏根据所用的介质以及工作原理,可分为电阻式、电容式、红外线式和声表面波式多种。 电阻式 触摸屏用两层高透明的导电层组成触摸屏,两层之间距离仅为2.5微米。当手指按在触摸屏上时,该处两层导电层接触,电阻发生变化,在X和Y两个方向上产生信号,然后送触摸屏控制器。 电容式 触摸屏把透明的金属层涂在玻璃板上,当手指触摸在金属层上时,电容发生变化,使得与之相连的振荡器频率发生变化,通过测量频率变化可以确定触摸位置获得信息。 红外线式 在屏幕周边成对安装红外线发射器和红外线接受器,接受器接受发射器发射的红外线,形成红外线矩阵。当手指按在屏幕上时,手指阻挡了红外线,这样在X、Y两个方向接受信息送给主机。 声表面波式 由触摸屏、声波发生器、反射器和声波接受器组成。声波发生器发出声波在触摸屏表面传递,经反射器传递给声波接受器,声波转换成电信号送给主机。声表面波式触摸屏效果比较好,目前应用比较广泛。 五、图形图像文件 图形是指用计算机绘制工具绘制的画面,包括直线、曲线,圆/圆弧,方框等成分。图形一般按各个成分的参数形式存储,可以对各个成分进行移动、缩放、旋转和扭曲等变换,可以在绘图仪上将各个成分输出。图像是由输入设备捕捉的实际场景或以数字化形式存储的任意画面。图像可以用位图或矢量图形式存储。 位图 就是按图像点阵形式存储各像素的颜色编码或灰度级;位图适于表现含有大量细节的画面,并可直接、快速地显示或印出。位图存储量大,一般需要压缩存储。Windows下位图格式扩展名为BMP。 矢量图 用一组指令或参数来描述其中的各个成分,易于对各个成分进行移动、缩放、旋转和扭曲等变换。矢量图适于描述由多种比较规则的图形元素构成的图形,但输出图像画面时将转换成位图形式。 矢量图形文件格式有:3DS,DXF,WMF等。其中GIF格式主要用于在不同平台上进行图像交换。GIF文件最大64MB,颜色数最多256色。TIF格式文件有压缩和非压缩两大类。这种格式文件是许多图像应用软件所支持的主要文件格式之一。BMP格式是Windows 3.X使用的图形文件格式,图形以位图方式存储。JPG格式的文件压缩比较高,文件比较小。AVI 格式的文件将视频信号和音频信号混合存储。MPG格式是运动图像文件常用文件格式。 图形和图像以文件形式存储。图形和图像文件格式分两大类:一类是静态图像文件格式,一类是动态图像文件格式。静态图像文件格式有:GIF,TIF,BMP,PCX,JPG,PCD等;动态图像文件格式有AVI,MPG等。 多媒体技术随着半导体制造技术、计算机技术、网络技术、通信技术等各相关产业的发展,多媒体计算机技术必将给人类带来更新颖、更丰富、更方便的学习、工作和生活。音频采样 解释
数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样频率或采率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率就越高。采样率决定声音频率的范围(相当于音调),可以用数字波形表示。以波形表示的频率范围通常被称为带宽。要正确理解音频采样可以分为采样的位数和采样的频率。 1.采样的位数 采样位数可以理解为采集卡处理声音的解析度。这个数值越大,解析度就越高,录制和回放的声音就越真实。我们首先要知道:电脑中的声音文件是用数字0和1来表示的。所以在电脑上录音的本质就是把模拟声音信号转换成数字信号。反之,在播放时则是把数字信号还原成模拟声音信号输出。采集卡的位是指采集卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采集卡的位客观地反映了数字声音信号对输入声音信号描述的准确程度。8位代表2的8次方--256,16位则代表2的16次方--64K。比较一下,一段相同的音乐信息,16位声卡能把它分为64K个精度单位进行处理,而8位声卡只能处理256个精度单位,造成了较大的信号损失,最终的采样效果自然是无法相提并论的。
如今市面上所有的主流产品都是16位的采集卡,而并非有些无知商家所鼓吹的64位乃至128位,他们将采集卡的复音概念与采样位数概念混淆在了一起。如今功能最为强大的采集卡系列采用的EMU10K1芯片虽然号称可以达到32位,但是它只是建立在Direct Sound加速基础上的一种多音频流技术,其本质还是一块16位的声卡。应该说16位的采样精度对于电脑多媒体音频而言已经绰绰有余了。 2.音频采样级别(音频采样频率) 数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样频率或采率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率就越高。
采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。在当今的主流采集卡上,采样频率一般共分为22.05KHz、44.1KHz、48KHz三个等级,22.05 KHz只能达到FM广播的声音品质,44.1KHz则是理论上的CD音质界限,48KHz则更加精确一些。对于高于48KHz的采样频率人耳已无法辨别出来了,所以在电脑上没有多少使用价值。
5kHz的采样率仅能达到人们讲话的声音质量。
11kHz的采样率是播放小段声音的最低标准,是CD音质的四分之一。
22kHz采样率的声音可以达到CD音质的一半,目前大多数网站都选用这样的采样率。
44kHz的采样率是标准的CD音质,可以达到很好的听觉效果。 3. 位速说明
位速是指在一个数据流中每秒钟能通过的信息量。您可能看到过音频文件用 “128–Kbps MP3” 或 “64–Kbps WMA” 进行描述的情形。Kbps 表示 “每秒千字节数”,因此数值越大表示数据越多:128–Kbps MP3 音频文件包含的数据量是 64–Kbps WMA 文件的两倍,并占用两倍的空间。(不过在这种情况下,这两种文件听起来没什么两样。原因是什么呢?有些文件格式比其他文件能够更有效地利用数据,64–Kbps WMA 文件的音质与 128–Kbps MP3 的音质相同。)需要了解的重要一点是,位速越高,信息量越大,对这些信息进行解码的处理量就越大,文件需要占用的空间也就越多。
为项目选择适当的位速取决于播放目标:如果您想把制作的 VCD 放在 DVD 播放器上播放,那么视频必须是 1150 Kbps,音频必须是 224 Kbps。典型的 206 MHz Pocket PC 支持的 MPEG 视频可达到 400 Kbps—超过这个限度播放时就会出现异常。 比特率和采样率【转贴】 收藏
我们在转换音频格式时常见到“比特率、采样率”这样的专业术语,它们代表什么意思呢? 数码录音最关键一步就是要把模拟信号转换为数码信号。就电脑而言是把模拟声音信号录制成为Wave文件,这个工作Windows自带的录音机也可以做到,但是它的功能十分有限,不能满足我们的需求,所以我们用其他专业音频软件代替,如Sound Forge等。录制出来的文件就是Wave文件,描述Wave文件主要有两个指标,一个是采样精度,另一个是比特率。这是数字音频制作中十分重要的两个概念,下面就来看一下吧。 什么是采样精度?因为Wave是数码信号,它是用一堆数字来描述原来的模拟信号,所以它要对原来的模拟信号进行分析,我们知道所有的声音都有其波形,数码信号就是在原有的模拟信号波形上每隔一段时间进行一次“取点”,赋予每一个点以一个数值,这就是“采样”,然后把所有的“点”连起来就可以描述模拟信号了,很明显,在一定时间内取的点越多,描述出来的波形就越精确,这个尺度我们就称为“采样精度”。采样率类似于动态影像的帧数,比如电影的采样率是24赫兹,PAL制式的采样率是25赫兹,NTSC制式的采样率是30赫兹。当我们把采样到的一个个静止画面再以采样率同样的速度回放时,看到的就是连续的画面。同样的道理,把以44.1kHZ采样率记录的CD以同样的速率播放时,就能听到连续的声音。我们最常用的采样精度是44.1kHz/s。它的意思是每秒取样44100次,之所以使用这个数值是因为经过了反复实验,人们发现这个采样精度最合适,低于这个值就会有较明显的损失,而高于这个值人的耳朵已经很难分辨,而且增大了数字音频所占用的空间。一般为了达到“万分精确”,我们还会使用48k甚至96k的采样精度,实际上,96k采样精度和44.1k采样精度的区别绝对不会象44.1k和22k那样区别如此之大,我们所使用的CD的采样标准就是44.1k,目前44.1k还是一个最通行的标准,有些人认为96k将是未来录音界的趋势。显然,采样率越高,听到的声音和看到的图像就越连贯。当然,人的听觉和视觉器官能分辨的采样率是有限的,基本上高于44.1kHZ采样的声音,绝大部分人已经觉察不到其中的分别了。
比特率是指二元数字码流的信息传输速率,单位是bit/s,表示每秒可传输多少个二元比特,是一种数字音乐压缩效率的参考性指标,通常我们使用kbps(通俗地讲就是每秒钟1000比特)作为单位。CD中的数字音乐比特率为1411.2kbps(也就是记录1秒钟的CD音乐,需要1411.2×1024比特的数据)。音乐文件的比特率越高,意味着在单位时间(1秒)内需要处理的数据量(Bit)越多,也就表明音乐文件的音质越好。但是,比特率高时文件大小变大,会占据很多的存储容量,MP3音乐文件最常用的bit rate是128kbps,MP3文件可以使用的比特率一般是8~320kbps。 现在你知道该如何设置音频文件的比特率和采样率了吧?愿你转换出音质极佳的乐曲!
MP3其中的VBR,ABR,CBR及相关解释
VBR(Variable Bitrate)动态比特率。也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率。这是Xing发展的算法,他们将一首歌的复 杂部分用高Bitrate编码,简单部分用低Bitrate编码。主意虽然不错,可惜Xing编码器的VBR算法很差,音质与CBR相去甚远。幸运的是, Lame完美地优化了VBR算法,使之成为MP3的最佳编码模式。这是以质量为前提兼顾文件大小的方式,推荐编码模式。 ABR(Average Bitrate)平均比特率,是VBR的一种插值参数。Lame针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。ABR也 被称为“Safe VBR”,它是在指定的平均Bitrate内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量。举 例来说,当指定用192kbps ABR对一段wav文件进行编码时,Lame会将该文件的85%用192kbps固定编码,然后对剩余15%进行动态优化:复杂部分用高于192kbps 来编码、简单部分用低于192kbps来编码。与192kbps CBR相比,192kbps ABR在文件大小上相差不多,音质却提高不少。ABR编码在速度上是VBR编码的2到3倍,在128-256kbps范围内质量要好于CBR。可以做为 VBR和CBR的一种折衷选择。 CBR(Constant Bitrate),常数比特率,指文件从头到尾都是一种位速率。相对于VBR和ABR来讲,它压缩出来的文件体积很大,但音质却不会有明显的提高。
对MP3来说Bitrate是最重要的因素,它用来表示每秒钟的音频数据占用了多少个bit(bit per second,简称bps)。这个值越高,音质就越好。 当音乐CD的数据被读到电脑后,他的存储将成为一大难题,我们可以来算一下,44100Hz采样率16bit位率的立体声数据数据一秒钟有多少?44100Hz * (16 / 8)Byte * 2Channel = 176400字节,也就是0.17M,一分种就是10.5M,一般CD可以存70多分钟的音乐,那么一张CD算下来就是700多M,对于一般百余G的硬盘空间,这还是比较难以承受的,所以很多年以前有人就提出了有损压缩的办法,采用了类似于快速傅利叶变换的算法,对数据进行处理,可以把WAVE压缩到很小,一秒钟100-300K,这样就很好的解决了存储的问题,但这是以牺牲了一部分音质为代价的。混音器原理及Mixer API函数介绍 系统中每个声卡都有一个与其相连的混音器设备。声卡上所有的组件都由与声卡关联的混音器设备控制。Windows Mixer API就是用来访问声卡的混音器设备的一组函数。Mixer API有一组函数,可以获取声卡上所有的组件并调整它们的参数。这是Win95/98和WinNT (4.X 及以上版本)新增的一组API,虽然加入到windows 3.1及更早的版本中也可以使用。打开一个混音器设备
怎样在你的程序中选择一个混音器设备来进行操作?这里有很多种方法,具体要看你想做多炫、多灵活的程序了。如果你只是想简单的打开首选的混音器设备,那么您可以使用mixerOpen函数,并使设备ID值0,如下:
unsigned long err;
HMIXER mixerHandle; /* 打开与默认的Audio/MIDI声卡相连的混音器 */
err = mixerOpen(&mixerHandle, 0, 0, 0, 0);
if (err)
{
printf("ERROR: Can't open Mixer Device! -- %08Xn", err);
}
else
{
/*混音器已打开,你可以此混音器句柄mixerHandle用在其它Mixer API中*/
} 当然,如果没有安装混音器,上述调用将会返回一个错误值,因此要始终检查那个返回值。(调
用Mixer API返回的预期错误值已列在头文件MMSYSTEM.H中。不幸的是,不像其它WAVE和MIDI
那些更低级的API,这里没有将这些错误值代码转换为描述字符串的API函数).
但是,什么是首选混音器设备?好,让我来告诉你,那就是第一个安装在系统中的混音器设备。
如果系统中只有一个声卡,那么你得到的混音器设备肯定就是首选混音器设备。但是,如果你
尝试着去使用第二块声卡上的Wave Output组件,那该怎么做?你肯定不希望使用第一块声卡的
混音器设备去控制第二块声卡上的Wave Out组件的音量。(第一块声卡的混音器当然控制不了
第二块声卡的Wave Output组件了). 但是,你怎样打开与你想要的那块声卡关联的混音器?幸运的是,mixerOpen()函数允许你传递
与这个声卡关联的其它设备的ID或句柄来打开混音器。在这种情况下,mixerOpen()函数将会准
确无疑的返回与那个声卡的其它设备关联的混音器设备。以下是一个样例程序,展示了如何通过
打开默认的WAVE OUT设备(默认声卡上的WAVE OUT设备)获取混音器设备的句柄:
unsigned long err;
HMIXER mixerHandle;
WAVEFORMATEX waveFormat;
HWAVEOUT hWaveOut;
/*
打开默认的WAVE Out设备, 指定回调函数,确保waveFormat已被正确的初始化
*/
err = waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormat,
(DWORD)WaveOutProc, 0, CALLBACK_FUNCTION);if(err)
{
printf("ERROR: Can't open WAVE Out Device! -- %08Xn", err);
}
else
{
/*
已打开与WAVE OUT设备关联的混音器.
注意我传递的是通过waveOutOpen()返回的句柄
*/
err = mixerOpen(&mixerHandle, hWaveOut, 0, 0, MIXER_OBJECTF_HWAVEOUT);
if(err)
{
printf("ERROR: Can't open Mixer Device! -- %08Xn", err);
}
}
上述代码的关键不仅仅是传递waveOutOpen()(或者waveInOpen(), 或者midiOutOpen(),
或者midiInOpen())返回的句柄,同样要注意的是mixerOpen()的最后一个参数必须是
MIXER_OBJECTF_HWAVEOUT (或者MIXER_OBJECTF_HWAVEIN,或者MIXER_OBJECTF_HMIDIOUT,
或者MIXER_OBJECTF_HMIDIIN),用于指明传递的是哪一类设备句柄。
如果你知道你想要打开的WAVE OUT设备的ID(但是还未通过waveOutOpen()获取它的句柄),
你可以传递这个ID并在mixerOpen的最后一个参数中指定MIXER_OBJECTF_WAVEOUT。
mixerOpen()将会找到与这个ID关联的混音器。 你可以通过混音器的句柄获取它的ID,
按如下方式使用mixerGetID():unsigned long mixerID;
err = mixerGetID(mixerHandle, &mixerID, MIXER_OBJECTF_HMIXER);
if(err)
{
printf("ERROR: Can't get Mixer Device ID! -- %08Xn", err);
}
else
{
printf("Mixer Device ID = %dn", mixerID);
}2。列举所有的混音器设备
如果你想写一个能列举系统中所有混音器的程序,windows有一个函数可以确定列表中有多少个混音器,这个函数就是mixerGetNumDevs()。它返回系统中混音器的个数。切记设备ID是从0开始并以1递增。因此,如果windows显示列表中有3个混音器,那么你就应该知道它们的ID分别是0、1、2。然后你可以将这些ID用于其他windows函数中。例如,这里有一个函数可以用来获取列表中的设备信息,包括它的名称和其它特征——比如它包含多少个组件及每个组件的类型,等等。你可以传递你想获取信息的混音器设备ID(和一个指向类型为MIXERCAPS的结构体的指针,windows将设备信息填入此结构体),然后调用获取混音器设备信息的函数mixerGetDevCaps()。3.使用mixerGetDevCaps()函数获取一个打开的混音器设备的能力特征,它的第一个参数为uMxId(Identifier or handle of an open mixer device),是一个打开的混音器设备的ID号。第二个参数是一个传出参数,将返回一个MIXERCAPS的结构。此结构中包含有此混音器设备的信息,其中有用的是cDestinations成员(member)(The number of audio line destinations available through the mixer device)它表示此混音器设备的audio line目标的数量。Realtec AC97 Audio有两个audio line目标(audio line destination),一个audio line目标为“音量控制”,另一个audio line目标为“录音控制”。
MIXERCAPS mixercaps;
mixerGetDevCaps(id,&mixercaps,sizeof(MIXERCAPS));
如果打开的混音器设备是Realtec AC97 Audio,可以看到mixercaps.cDestinations将等于2.4.混音器包含许多音频线路(mixer line)。
音频线路(mixer line),一条音频线路可能是目的线路(destination line),也可能是源线路(source line),一条目的线路可能和一或多条源线路绑定(attach)在一起,一条目的线路可以对应多条源线路。
每一条音频线路都由控制(control)来进行设置,程序通过配置他的参数来实现对线路的控制。
目的线路的控制:音量、静音、低音、颤抖等,都是输出的设置。
源线路的控制:线路输入、合成器、CD音频等。
MIXERLINE包含了由一条音频线路的信息, 可能是destinaton line,也可能是source line 。信息要么是一条源线路,要么是一条目的线路,从数据成员的命名也能分开出来。
typedef struct {
DWORD cbStruct; //结构大小
DWORD dwDestination; //目的线路索引
DWORD dwSource; //源线路索引
?/P>
DWORD dwLineID; //这条线路的ID
DWORD fdwLine;
DWORD dwUser;
DWORD dwComponentType; //组件类型,两种线路又分为若干个类型
DWORD cChannels; //声道数
DWORD cConnections; //源线路所连接的目的线路数目
DWORD cControls; //线路所绑定的相应控制数目
CHAR szShortName[MIXER_SHORT_NAME_CHARS];
CHAR szName[MIXER_LONG_NAME_CHARS];
struct {
DWORD dwType;
DWORD dwDeviceID;
WORD wMid;
WORD wPid;
MMVERSION vDriverVersion;
CHAR szPname[MAXPNAMELEN];
} Target;
} MIXERLINE;具体细节参考Windows混音器API使用和混音器原理及Mixer API函数介绍这两个帖子具体