api 层实现语音录制

api 层实现语音录制

ID:15493312

大小:47.50 KB

页数:6页

时间:2018-08-03

api 层实现语音录制_第1页
api 层实现语音录制_第2页
api 层实现语音录制_第3页
api 层实现语音录制_第4页
api 层实现语音录制_第5页
资源描述:

《api 层实现语音录制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、API层实现语音录制我从前出于需要,上网寻找了关于录音部分的源代码,收获不大,现在把自己摸索的部分源代码公开出来吧,希望对部分人有用。其实要实现声音的录制,可以用多种的方式(例如mci),我这里介绍的是在API的层面来实现,你可以对其中进行更多的控制。比方说,要音频裸数据存到你指定的内存中去。先说一下要用到的API,录音通常都是使用waveInXXX一类API的,最主要的是waveInStart(顾名思义就是开始录音),然后是waveInStop(它能够在你指定的缓冲满的时候返回);如果不用waveInStop可以使用waveInReset(不同于S

2、top的是该函数不等缓冲满就马上返回那样你才可以终止录音),不过最好跟waveInGetPosition配合使用。说完这些函数,不得不提的是为以上几个函数做准备工作的函数(注意配对使用),waveInOpen和waveInClose配对(waveInOpen里面指定音频的格式,比方说立体声和16位音质等);waveInPrepareHeader和waveInUnprepareHeader配对(waveInPrepareHeader里面指定用来录音缓冲的大小和首地址),紧跟着waveInPrepareHeader要例行公事调用waveInAddBuff

3、er(作用未详,不多说了)。 详细调用过程可以看下面(之前最好调用waveInGetNumDevs看看有没有可用的设备)waveInOpen(该处用WAVEFORMATEX结构指定音频格式)waveInPrepareHeader(该处用WAVEHDR结构的lpData成员指定缓冲首地址)waveInAddBufferwaveInStart(录制中....)waveInStop(warning:一定要缓冲满了才返回)waveInUnprepareHeaderwaveInClose需要指出的是,上面的代码你不能随心所欲的停止录音过程(如果你指定的缓冲非常

4、大,比方说足够录音一个小时,那么你就要乖乖的等上一个小时),如果希望马上停止,请使用下面的方法。waveInStart(录制中....)(n时间后,用户提出停止请求)waveInGetPosition(保留该值,用来设置WAVEHDR结构的dwBytesRecorded成员)waveInReset(重新设置WAVEHDR结构的dwBytesRecorded成员)整个过程就是如此的几句,下面将给出源程序以验证。需要说明一下,正常情况下录音以后,总共耗费的内存(以字节算)会保存在WAVEHDR结构的dwBytesRecorded成员中,可用的音频裸数据当

5、然就放进你指定的内存缓冲中去了,你大可不必等waveInUnprepareHeader就可以马上拿来用了。(补充一个内容,粗略讲解一下.wav文件的文件头格式)看下面的结构,一开始的八个字节是一个结构,第一个四字节是标志,刚好等于ascii的"RIFF",第二个四字节是总的文件长度减去8。你可以验证一下。(参照16进制阅读数字的方法)跟着是第二个数据结构,占12个字节。如果你是标准的wave格式的文件,那么就是紧接着两个标志,第一个四字节的标志是ascii的"WAVE",第二个四字节的标志就是ascii的"fmt"(注意,有一个空格),然后剩下的四字

6、节里面藏的是WAVEFORMATEX5结构的大小(参照MSDN),应该是18个字节。然后,当然就是18个字节的WAVEFORMATEX结构里面的值。详细的就不说了,自己查一下MSDN。(需要注意的是,这个WAVEFORMATEXEX的末一个成员,讲了可能的长度扩充)在这18个字节后面(按照旧时候的方法),应该是跟着一个8字节的结构的,然后就是"裸数据"的开始地址了,这八字节结构的开始四字节是标志,应该等于ascii的"data",然后紧跟着的四字节就是裸数据的大小了,也就是最重要的部分。好了,如此一来,你就可以得到音频裸数据的起始位置(紧紧跟在含"d

7、ata"标志的数据结构的后面),还有就是音频数据的长度了。应该是所有的问题都很容易解决的。不过,还要注意,就是现在的很多.wav文件都会外加一个数据结构(12字节),就插在WAVEFORMATEX的后面和含"data"的数据结构前面。这个外加的结构第一个四字节是标志,等于ascii码的"fact",然后第二个四字节的值在大部分情况下都等于4,第三个四字节的值也是等于音频裸数据的长度。基本上就是这样了。下面给出的源程序文件只要加进新建的VCwin32工程中,编译即可,执行效果是录音三秒后自动生成mytest.wav文件供播放测试(记得选好默认录音通道)

8、。废话不多说,给出源程序//*******************FileName:WinMain.cpp*

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。