EVC录音详解

来源:互联网 发布:mac mpv 安装教程 编辑:程序博客网 时间:2024/05/21 06:32

//===========================================
//TITLE:
//  EVC录音详解
//AUTHOR:
//  norains
//DATE:
//  Friday 9-June-2006
//===========================================
  借助evc在wince下实现录音不是一件难事.恩,的确不是一件难事.本文主要解释如何使用wavein,并且把声音以wave文件形式保存到储存器中.
 
  最先,我们要分配两个缓冲区.因为数据首先要保存到内存中,两个内存缓存区间可以较快进行切换,可以避免录音有断断续续的现象.

接下来需要设置录音的方式,需要用到WAVEFORMATEX结构.声道数,采样位和采样率都可以在这结构中设置.

设置完毕之后,就可以用waveInOpen函数打开输入设备.

设备可以打开后,就需要初始化两个输入缓存区的声音文件头了.声音文件头主要是在录音时,记录相关的数据,以方便后期的处理.

 在对PWAVEHDR进行赋值时,本程序中需要设置的其实只有lpData和dwBufferLength.接下来将pWaveHdr2同pWaveHdr1进行相关处理(略).
 
  
  由于我们是要将录音数据以文件形式保存到非易失性存储器上,所以在开始录音之前我们需要先建立文件,并且把相关的文件头信息写入(WriteWaveFileHeader是自写函数,代码附在文章最后). 

一切准备就绪之后,就可以调用函数waveInStart()来进行真正的录音了:
  waveInStart(hWaveIn);
  在录音过程中,有三个回调函数系统会自动调用,分别是:OnMM_WIM_OPEN(),OnMM_WIM_DATA()和OnMM_WIM_CLOSE().顾名思义,这三个函数分别在这三种情况下调用:开始录音时;缓冲区用完时;录音关闭时.其中OnMM_WIM_OPEN()和OnMM_WIM_CLOSE()只调用一次.本程序最重要是对OnMM_WIM_DATA()函数进行处理.
  相关代码如下:

录音完毕则调用OnMM_WIM_CLOSE(),我们在此函数体里进行相关的收尾清除工作

 至此,整个录音程序结束.
  
  
  附录:相关文件函数

原创粉丝点击