WindowWindows环境下麦克风录音系统.docx
- 文档编号:2418297
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:15
- 大小:100.60KB
WindowWindows环境下麦克风录音系统.docx
《WindowWindows环境下麦克风录音系统.docx》由会员分享,可在线阅读,更多相关《WindowWindows环境下麦克风录音系统.docx(15页珍藏版)》请在冰豆网上搜索。
WindowWindows环境下麦克风录音系统
WindowWindows环境下的麦克风录音系统
简介
本文简单介绍了声卡的工作原理、录音的原理以及数字音频的基本知识并且利用Windows提供的WaveformAduioAPIs以及MultimediaFileI/OAPIs实现一个Windows环境下的麦克风录音以及将录音文件保存成*.wav文件的简单系统。
关键字
WaveformAduioAPIs,MultimediaFileI/OAPIs,waveInXXX,mmioXXX,麦克风,录音,波形文件,VC6++
要深入的了解麦克风录音的实现,我们必须了解声卡的工作原理,麦克风录音的原理以及了解相关的编程接口。
1.声卡的工作原理
麦克风和喇叭所用的都是模拟信号,而电脑所能处理的都是数字信号,两者不能混用,声卡的作用就是实现两者的转换。
从结构上分,声卡可分为模数转换电路和数模转换电路两部分,模数转换电路负责将麦克风等声音输入设备采到的模拟声音信号转换为电脑能处理的数字信号,而数模转换电路负责将电脑使用的数字声音信号转换为喇叭等设备能使用的模拟信号。
上图就是一块典型的声卡,Mic插口用于连接麦克风,通过它可以录制外界的声音
2.数字音频基础知识
麦克风录音的过程其实就是将模拟信号转化成数字信号的过程,其中涉及的概念如下:
1.采样率(SamplingRate)
采样率指声卡在一秒之中对声音(波形)作记录的次数,根据研究声音播出时的质量常常只能达到采样率的一半,因此必须采取双倍的采样率才能将声音标准重现,也就是只要采样率大于原始信号频率的两倍以上即可减低错误,达到和原始声音差不多的质量。
人的听力大概是20KHZ,所以高品质的采样率应为其两倍以上。
当声音来源为音乐时,因为它所横跨的频率变化极为宽广,通常以44.1KHZ的频率为CD音乐采样率的标准,但是若以语言为主由于人说话的语音大概是10KHZ,因此加倍采样,只取22KHZ即可,采样率越高所记录下来的音质就越清晰,越高的采样所记录下的文件就越大。
2.采样位
解析度决定了采样的音波是否能保持原来的形状,越接近原型则需解析度越高,若以8位来采样的话其能表达的组合种类是2的8次方,即256,表示用8位的采样大小能分辨出256个层次的声音,若用16位来采样,则能分辨的差异将高2的16次方,为65536,其精度自然大为提高。
16位、8位采样的差别在于动态范围的宽窄,动态范围宽广,音量起伏的大小变化就能够更精细的被记录下来,如此一来不论是细微的声音或是强烈的动感震撼,都可以表现的淋漓尽致,而CD音质的采样规格正式16位采样的规格。
3.量化误差(Quantizationerror)
在采样的过程中,不断连续变化的模拟信号要用数字化的数值来表示,这样的过程就会发生所谓的量化误差(Quantizationerror)。
所谓的量化误差指的是实际的信号的振幅(smplitude)和数字化之后所的数字之间的差异。
如果用将数字信号还原成模拟信号的角度看,量化误差就是失真(Distortion)。
我们可以用增加采样大小的方式来降低量化误差,也就是更多的位(bits)来表示一个采样信号,这样可以提高精度。
4.量化(Quantization),线性量化法(Linearquantization)和非线性量化法(Nonlinearquantization)
所谓的量化(Quantization)就是将模拟信号所代表的连续范围分成一段一段的区间(Interval),每一段区间我们定义一个数字化的值。
区间的数目是跟采样大小有关,举例来说,有一种最简单的量化法称为“线性量化法”(Linearquantization),这种量化法采用等距离的间隔空间,架设一个讯号它的最大值是5.0,采样大小为3位,则每个量化区间就时5.0/2^3,也就是0.625单位。
另外一种相反的量化方法就是“非线性量化法”(Nonlinearquantization),这种量化法采用不同的间隔空间。
以“对数量化法”(Logarithmquantization)为例。
低振幅范围的量化区间就比高振幅的范围的区间较为接近,用这种量化的法产生的结果就是在低振幅时我们会得到佳好的效果。
通常如果使用同样的采样大小,非线性量化法会比线性量化法得到更好的声音品质。
但是如果是要对声音做滤波(filtered)或一些运算的时候,使用线性量化法会比较容易处理。
5.声音强度
波形振幅的平方。
两个声音强度上的差常以分贝(db)为单位来度量,计算公式如下:
20*log(A1/A2)分贝,A1,A2为两个声音的振幅。
a.如果采样大小为8位,则采样的动态范围为20*log(256)分贝=48db;
b.如果样本大小为16位,则采样动态范围为20*log(65536)大约是96分贝,接近了人听觉极限和痛苦极限,是再现音乐的理想范围,windows同时支持8位和16位的采样大小。
6.音频编码方法
目前已经发展了许多音频编码的方法用以减少存储量或是传输的时间,以下所列为两种较普遍的编码方法:
a.PCM(Pulsecodemodulation);
脉冲编码调制,即对波形按照固定周期频率采样。
为了保证采样后数据质量,采样频率必须是样本声音最高频率的两倍,这就是Nyquist频率。
b.ADPCM(Adaptivedeltapulsemodulation)。
3.RIFF文件结构和WAVE文件格式
Windows支持两种:
RIFF(ResourceInterchangeFileFormat,"资源交互文件格式")格式的音频文件—MIDI的RMID文件和波形音频文件格式WAVE文件,其中在计算机领域最常用的数字化声音文件格式是后者,它是微软专门为Windows系统定义的波形文件格式(WaveformAudio),由于其扩展名为"*.wav",因而该类文件也被称为WAVE文件。
本文涉及到的声音文件所指的就是WAVE文件。
常见的WAVE语音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。
这里的采样率是指声音信号在进行"模→数"转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(shortint00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。
在进行声音编程处理以前,首先让我们来了解一下RIFF文件和WAVE文件格式。
RIFF文件结构可以看作是树状结构,其基本构成是称为"块"(Chunk)的单元,每个块有"标志符"、"数据大小"及"数据"所组成,块的结构如图2所示:
块的标志符(4BYTES)
数据大小(4BYTES)
数据
图2
从上图可以看出,其中"标志符"为4个字符所组成的代码,如"RIFF","LIST"等,指定块的标志ID;数据大小用来指定块的数据域大小,它的尺寸也为4个字符;数据用来描述具体的声音信号,它可以由若干个子块构成,一般情况下块与块是平行的,不能相互嵌套,但是有两种类型的块可以嵌套子块,他们是"RIFF"或"LIST"标志的块,其中RIFF块的级别最高,它可以包括LIST块。
另外,RIFF块和LIS块与其他块不同,RIFF块的数据总是以一个指定文件中数据存储格式的四个字符码(称为格式类型)开始,如WAVE文件有一个"WAVE"的格式类型。
LIST块的数据总是以一个指定列表内容的4个字符码(称为列表类型)开始,例如扩展名为".AVI"的视频文件就有一个"strl"的列表类型。
RIFF和LIST的块结构如下:
RIFF/LIST标志符
数据1大小
数据1
格式/列表类型
数据
图3
WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。
RIFF块包含两个子块,这两个子块的ID分别是"fmt"和"data",其中"fmt"子块由结构PCMWAVEFORMAT所组成,其子块的大小就是sizeofof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据。
WAVE文件的结构如下图4所示:
标志符(RIFF)
数据大小
格式类型("WAVE")
"fmt"
Sizeof(PCMWAVEFORMAT)
PCMWAVEFORMAT
"data"
声音数据大小
声音数据
图4
PCMWAVEFORMAT结构定义如下:
typedefstruct
{
WAVEFORMATwf;//波形格式,前面已经提过了;
WORDwBitsPerSample;//WAVE文件的采样大小;
}PCMWAVEFORMAT
"data"子块包含WAVE文件的数字化波形声音数据,其存放格式依赖于"fmt"子块中wFormatTag成员指定的格式种类,在多声道WAVE文件中,样本是交替出现的。
如16bit的单声道WAVE文件和双声道WAVE文件的数据采样格式分别如图5所示:
16位单声道:
采样一
采样二
……
低字节
高字节
低字节
高字节
……
16位双声道:
采样一……
左声道
右声道
……
低字节
高字节
低字节
高字节
……
图5
4.硬件抽象层(HAL,HardwareAbstractionLayer)
HAL是一个可加载的核心模块(HAL.dll),它为运行在WindowsNT架构(包括WindowsNT4.0,Windows2000,WindowsXP)上的硬件平台提供低级接口,HAL隐藏各种与硬件有关的细节,例如:
I/O接口、中断控制器、声卡…如果用户需要访问声卡硬件只能通过该声卡的驱动程序来实现,声卡驱动程序再调用HA中的相应例程来实现,下图显示了HAL、声卡驱动程序、WaveformAudioAPIs、麦克录音程序之间的关系:
图6
5.WaveformAudio
WaveformAudioAPIs是Microsoft提供给Win32程序员用来给应用程序添加声音支持的一套强大的API,它提供的功能如下:
1.打开/关闭/查询声音设备;
2.播放波形文件;
3.设置播放速度;
4.播放进度控制;
5.录音;
6.得到当前的播放位置;
7.调节音量。
API提供的主要函数:
●打开录音设备函数
MMRESULTwaveInOpen(LPHWAVEINphwi,//输入设备句柄
UINTuDeviceID,//输入设备ID
LPWAVEFORMATEXpwfx,//录音格式指针
DWORDdwCallback,//处理MM_WIM_***消息的
回调函数或窗
//口句柄,线程ID
DWORDdwCallbackInstance,
DWORDfdwOpen//处理消息方式的符号位
);
●为录音设备准备缓存函数
MMRESULTwaveInPrepareHeader(HWAVEINhwi,LPWAVEHDRpwh,UINTbwh);
●给输入设备增加一个缓存
MMRESULTwaveInAddBuffer(HWAVEINhwi,LPWAVEHDRpwh,UINTcbwh);
●开始录音
MMRESULT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WindowWindows 环境 麦克风 录音系统