找回密码
 立即注册
函数缓冲区调用句柄 | 易语言编程 2023-05-31 122 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
Windows的录制过程大致如下:

1 首先检查本机是否有声音输入设备。

2 获取声音输入设备信息

一般上面这两个都不是很需要,毕竟现在大部分电脑都集成了声卡。但从稳定性和通用性的角度来看,还是很有必要的。

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

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

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

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

接下来就属于系统的工作了。一般情况下,缓冲区被填满后,会触发一个事件,通知异步线程进行处理。获取到声音信息后,必须重新添加缓冲区才能继续录音。



有时在缓冲区的建立中,一般采用栈分配或堆分配的方法。栈分配内存的销毁过程是通过出栈完成的,不需要用户手动处理。但是在堆分配的时候会遇到麻烦,如下:

waveInPrepareHeader 函数在准备缓冲区时被调用。调用该函数后,为其分配的内存无法通过delete或free释放,因为调用该函数后内存区域被锁定。这时必须调用waveInUnprepareHeader函数解锁,然后释放。

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

09113137909[下载].rar

091131f2b979fs52fgs9bf.jpg


上一篇:百度朗读引擎易语言易语言源码
下一篇:易语言酷我音乐下载器源码