有关录音缓冲区的问题~
2004-06-14 14:35
295 查看
Q:waveIn 系列api函数开发录音程序,怎么用双缓冲来保存数据
A:对于录音的基本过程伪代码如下
rec_start{
alloca(buffer1)
alloca(buffer2)
waveInOpen // 打开录音设备
InitBuffer(buffer1)
InitBuffer(buffer2)//设置waveHdr,录音缓冲区格式
waveInPrepareHeader(buffer1)//这个函数必须在addbufer前调用
waveInprepareHeader(buffer2)
waveInaddBuffer(buffer1)
waveInaddBuffer(buffer2)
waveInStart()
}
三个消息
MM_WIM_OPEN
MM_WIM_DATA
wParam = (WPARAM) hInputDev
lParam = (LONG) lpwvhdr //录音缓冲区指针
MM_WIM_CLOSE
处理MM_WIM_DATA消息
//当开始录音时,系统自作选择一个缓冲作为录音数据保存区,当该缓冲区满时将该缓冲区置满标志位,发送MM_WIM_DATA消息,将该缓冲区控制权归还给程序。同时自动启用下一个缓冲区录音。
当我们处理完缓冲区数据时,应该再次调用waveInAddBuffer()将缓冲区还给系统,以循环利用。
OnMM_WIM_DATA{
saveData((PWAVEHDR)lparam)//保存处理缓冲区数据
waveInAddbuffer((PWAVEHDR)lparam);
}
ps:Time(saveData) < Time(buffer),不然就丢失数据了。
A:对于录音的基本过程伪代码如下
rec_start{
alloca(buffer1)
alloca(buffer2)
waveInOpen // 打开录音设备
InitBuffer(buffer1)
InitBuffer(buffer2)//设置waveHdr,录音缓冲区格式
waveInPrepareHeader(buffer1)//这个函数必须在addbufer前调用
waveInprepareHeader(buffer2)
waveInaddBuffer(buffer1)
waveInaddBuffer(buffer2)
waveInStart()
}
三个消息
MM_WIM_OPEN
MM_WIM_DATA
wParam = (WPARAM) hInputDev
lParam = (LONG) lpwvhdr //录音缓冲区指针
MM_WIM_CLOSE
处理MM_WIM_DATA消息
//当开始录音时,系统自作选择一个缓冲作为录音数据保存区,当该缓冲区满时将该缓冲区置满标志位,发送MM_WIM_DATA消息,将该缓冲区控制权归还给程序。同时自动启用下一个缓冲区录音。
当我们处理完缓冲区数据时,应该再次调用waveInAddBuffer()将缓冲区还给系统,以循环利用。
OnMM_WIM_DATA{
saveData((PWAVEHDR)lparam)//保存处理缓冲区数据
waveInAddbuffer((PWAVEHDR)lparam);
}
ps:Time(saveData) < Time(buffer),不然就丢失数据了。
相关文章推荐
- 3.C语言凯撒密码(有关缓冲区)以及数组越界问题
- ACM做音频传输的时候,有严重的延迟问题,这个控件来自网络,添加了4个录音缓冲区,解决延迟问题
- 有关图像入理的问题
- SUM()求和时的精度问题,跟数据表字段定义有关
- 关于Android中图片compress的有关问题
- 单例模式再讨论(有关序列化的单例问题)
- 有关AES加密的问题
- 操作系统--死锁应对的有关问题(1)
- 关于EXT的性能有关问题
- 有关SAP中等于空的问题
- 有关Struts和Spring框架整合时出现的问题
- Dcef3与Flash有关的两个问题以及解决方式
- 一个有关扑克牌牌型分析的问题
- 有关 VCL 控件的常见问题 (安装、卸载、升级BCB版本等)
- 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题
- IB专访:有关万兆铜缆布线方案应用相关问题
- 有关Oracle中ORA-12560:TNS:协议适配器出错的问题
- Eclipse有关编码的一些问题
- 使用 Request.QueryString 接受参数时,跟编码有关的一些问题
- C语言中缓冲区中数据的一些常见问题