(二)录音流程
Waveform APIs,流程如下:
a.打开录音设备waveInOpen;
b.准备wave数据头waveInPrepareHeader;
c.准备数据块waveInAddBuffer;
d.开始录音waveInStart;
e.停止录音(waveInStop);
f.关闭录音设备(waveInClose);
g.当开始录音后当buffer已满时,将收到MM_WIM_DATA消息,处理该消息可以保存已录好数据.
注意:
1.waveInPerpareHeader,此函数功能就是定位缓冲区的数据区地址和数据大小,以便为系统所用;
2.当通过 waveInAddBuffer送入的缓冲区被录满后,Windows就会通过你在waveInOpen中指定的方式进行回调,在回调中把录好的语音数据取出来;并且,如果还想继续录音的话,得将下一个缓冲区添加进去,考虑到这个处理是有时间延迟的,而且音频对时间很敏感,一般都要先预加入若干个缓冲区,比如,一共定义了8个缓冲区,而为了保险起见,最好保证任一时刻至少有3个缓冲区可被录音使用,那么在开始录音时,则先加入4个缓冲区,然后在回调中,如果当前录好的缓冲区第n个,则对第(n+4)%8调用waveInAddBuffer,这时,还有第(n+1)%8,(n+2)%8, (n+3)%8这三个缓冲区可用,即基本上就可以保证所录得音频中不会有断开的间隔;
3.想结束录音时,最好在waveInClose之前调用一下waveInReset,这样可以清掉尚在等待录音的缓冲区,这里常见的问题是等待的缓冲区清理了,可是正在用的缓冲区怎么办;如果这个时候就用waveInClose,那么系统会出错;解决方法一:在回调函数中注意,一个缓冲区满后,不要再用waveInAddBuffer增加缓存,当缓冲区用到1的时候调用waveInReset清掉尚在等待录音的缓冲区继续waveInClose。