为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 多媒体类源码 正文

易语言API实时录音源码(winmm.dll)

三叶资源网 2019-09-19 19:05:54 多媒体类源码 2695 ℃ 5 评论

Windows的录音流程大致如下:

1 先查看本地机器是否拥有声音输入设备。

2 获取声音输入设备的信息

一般上面的两部不是很必要,毕竟现在的电脑基本都拥有集成声卡。不过从稳定性和通用性看,还是很必要的。

3 打开设备,获取设备句柄,传入对应的事件句柄。

4 准备一个异步线程专门用于录音完成后的处理工作,并等待事件。

5 通过设备句柄为其准备缓冲区

6 将准备好的缓冲区通过句柄添加到设备中

接下来属于系统的工作,正常情况下,在缓冲区被填满后,将会触发事件,来通知异步线程进行处理。获取声音信息后,要再次添加缓冲区,才能继续录音。


有时在缓冲区的建立上,一般会采取栈分配或者堆分配的方式。栈分配内存的析构处理通过退栈完成,用户不用手动处理。但是堆分配的时候就会遇到麻烦,具体如下:

在准备缓冲区的时候会调用waveInPrepareHeader函数,这个函数调用后,为其分配的内存就无法通过delete或者free来释放了,因为在该函数调用后这块内存区域被锁定了。此时必须调用waveInUnprepareHeader函数才能解锁定,然后才能释放。

但是在调用waveInPrepareHeader函数后,再接着调用了waveInAddBuffer函数,在该缓冲区未被填满的时候,尝试使用waveInUnprepareHeader函数解锁定,就会返回失败码33。这里的解决方案就是在决定释放空间前,首先调用一个函数:waveInReset。这个函数调用后,就可以将内存从waveInAddBuffer函数的限定中释放,然后再常规使用waveInUnprepareHeader释放,最后调用delete或者free释放内存空间。

@猫乐

文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

已有5位网友发表了看法:

  • API完成

    API完成  评论于 [2020-03-07 00:51:05]  回复

    易语言 录音音波

  • sql语句

    sql语句  评论于 [2020-04-17 20:42:09]  回复

    易语言录音实时播放

  • fiddler

    fiddler  评论于 [2022-03-26 18:22:55]  回复

    易语言API录音源码

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
go语言python对比块级元素比心APP登录枚举IE插件鼠标录制PDO数据Flutter技术入门与实战魔鬼作坊极速文件分割类Signature精易论坛post登录彩票开奖遗漏组合分析Hook信息框API源码火山视窗软件京东登陆js例子英雄联盟多线程拨号代码采集国密算法
最新评论