博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows 录音程序(二)
阅读量:4578 次
发布时间:2019-06-08

本文共 907 字,大约阅读时间需要 3 分钟。

(二)录音流程

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。

版权申明:本站文章均来自网络,如有侵权,请评论 ,收到后立即删除,谢谢! 

转载于:https://www.cnblogs.com/wanghoney/p/3478619.html

你可能感兴趣的文章
AI2(App Inventor 2)离线版服务器(2019.04.28更新)
查看>>
oracle的wm_concat函数实现行转列
查看>>
微软对外披露两个0day漏洞详情
查看>>
C语 三子棋小游戏
查看>>
[BZOJ 1861] 书架
查看>>
Unity NGUI 批量点击跳转场景
查看>>
送给毕业生的一个学习建议
查看>>
基于redis+lua实现高并发场景下的秒杀限流解决方案
查看>>
Oracle 块修改跟踪 (Block Change Tracking) 说明
查看>>
阿里云 Redis 服务遇到的问题
查看>>
Jwt Token 安全策略使用 ECDSA 椭圆曲线加密算法签名/验证
查看>>
Window2008通过web.config进行限制ip访问
查看>>
浅析门户网站体育赛事CDN加速解决方案
查看>>
启动/关闭xp_cmdshell
查看>>
[PY3]——内置数据结构(8)——解构与封装
查看>>
进程、单线程和多线程
查看>>
python入门(3)python的解释器
查看>>
maven入门(1-3)构建简单的maven项目
查看>>
git 清除本地无效的分支
查看>>
poj1001--Exponentiation
查看>>