Windows的录音流程大致如下:
1 先查看本地机器是否拥有声音输入设备。
2 获取声音输入设备的信息
一般上面的两部不是很必要,毕竟现在的电脑基本都拥有集成声卡。不过从稳定性和通用性看,还是很必要的。
3 打开设备,获取设备句柄,传入对应的事件句柄。
4 准备一个异步线程专门用于录音完成后的处理工作,并等待事件。
5 通过设备句柄为其准备缓冲区
6 将准备好的缓冲区通过句柄添加到设备中
接下来属于系统的工作,正常情况下,在缓冲区被填满后,将会触发事件,来通知异步线程进行处理。获取声音信息后,要再次添加缓冲区,才能继续录音。
有时在缓冲区的建立上,一般会采取栈分配或者堆分配的方式。栈分配内存的析构处理通过退栈完成,用户不用手动处理。但是堆分配的时候就会遇到麻烦,具体如下:
在准备缓冲区的时候会调用waveInPrepareHeader函数,这个函数调用后,为其分配的内存就无法通过delete或者free来释放了,因为在该函数调用后这块内存区域被锁定了。此时必须调用waveInUnprepareHeader函数才能解锁定,然后才能释放。
但是在调用waveInPrepareHeader函数后,再接着调用了waveInAddBuffer函数,在该缓冲区未被填满的时候,尝试使用waveInUnprepareHeader函数解锁定,就会返回失败码33。这里的解决方案就是在决定释放空间前,首先调用一个函数:waveInReset。这个函数调用后,就可以将内存从waveInAddBuffer函数的限定中释放,然后再常规使用waveInUnprepareHeader释放,最后调用delete或者free释放内存空间。
易语言录音
易语言 录音音波
易语言录音实时播放
易语言+声卡+录制
易语言API录音源码