您的位置:首页 > 其它

有关录音缓冲区的问题~

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),不然就丢失数据了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: