zoukankan      html  css  js  c++  java
  • windows 录音程序(二)

    (二)录音流程

    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。

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

  • 相关阅读:
    Struts2中ModelDriven的使用
    Android 如何让 app 自行处理 power key M
    url后面带斜杠与不带斜杠的区别
    Http Request Method:options
    org.springframework.boot.builder.SpringApplicationBuilder.<init>
    Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL
    git将多个commit合并成一个
    idea error:Command line is too long
    java使用zxing插件绘制二维码
    git解决冲突插件之Beyond Compare
  • 原文地址:https://www.cnblogs.com/wanghoney/p/3478619.html
Copyright © 2011-2022 走看看