如果我为录音准备了多缓冲:
for( i = 0; i < 10; i++ )
{//增加录音内存 if( MMSYSERR_NOERROR != waveInPrepareHeader( g_hWaveIn, &g_WaveHdrIn[i], sizeof(WAVEHDR)) )
{//无法锁定该内存
return FALSE;
} if( MMSYSERR_NOERROR != waveInAddBuffer( g_hWaveIn, &g_WaveHdrIn[i], sizeof(WAVEHDR)))
{//无法增加该内存
return FALSE;
}
}当我在WIM_DATA消息下处理数据时(使用的是CALLBACK_FUNCTION),而录音还在继续时,系统会自动使用下一个我为其准备的缓冲数据块吗?
如果是的话,那么我想问第二个问题,在我准备了我认为足够多的数据块缓冲的情况下,比如10个数据块,
当我正在WIM_DATA消息下处理数据时(如果够慢的话),下一个WIM_DATA消息来了,会出现什么情况?或者是,还是要等waveInProc退出了,才发送下一个WIM_DATA消息?
如果是的话,那么我想问第三个问题了,呵呵,见笑见笑,我喜欢钻牛角尖。会不会系统刷一下,把我提供的数据块都填满了,而我的第一个数据块的处理都没结束?(有这么快吗?)
请各位朋友帮忙解答一下,谢谢!
for( i = 0; i < 10; i++ )
{//增加录音内存 if( MMSYSERR_NOERROR != waveInPrepareHeader( g_hWaveIn, &g_WaveHdrIn[i], sizeof(WAVEHDR)) )
{//无法锁定该内存
return FALSE;
} if( MMSYSERR_NOERROR != waveInAddBuffer( g_hWaveIn, &g_WaveHdrIn[i], sizeof(WAVEHDR)))
{//无法增加该内存
return FALSE;
}
}当我在WIM_DATA消息下处理数据时(使用的是CALLBACK_FUNCTION),而录音还在继续时,系统会自动使用下一个我为其准备的缓冲数据块吗?
如果是的话,那么我想问第二个问题,在我准备了我认为足够多的数据块缓冲的情况下,比如10个数据块,
当我正在WIM_DATA消息下处理数据时(如果够慢的话),下一个WIM_DATA消息来了,会出现什么情况?或者是,还是要等waveInProc退出了,才发送下一个WIM_DATA消息?
如果是的话,那么我想问第三个问题了,呵呵,见笑见笑,我喜欢钻牛角尖。会不会系统刷一下,把我提供的数据块都填满了,而我的第一个数据块的处理都没结束?(有这么快吗?)
请各位朋友帮忙解答一下,谢谢!
解决方案 »
- 实现IOleCommandTarget接口,SetSite修改成员变量,Exec中获得成员变量,发现变量没被修改
- 求高手帮助~~~~~关于VC调用CWGraph的问题
- 怎么实现间隔一定时间发包呢?
- 很菜的问题,CBitmap::LoadBitmap失败
- 在WinXP运行得好好的程序,到了Win2K下出现"无法定位程序输入点getaddrinfo于动态链接库WS2_32.dll上"的错误
- 大家探讨一下,qq的文件共享功能的实现技术,欢迎百花齐放,百家争鸣.
- 如何让对话框带分割条
- 如何判断一个网页传送的结束
- 如何截获开启一个新进程这个消息?
- 帮忙 “Run-Time Check Failure #2 - Stack around the variable 'bmpinfo' was corrupted.”
- 关于对话框的小问题
- 静态文本框上浮动一个工具条怎么实现
但是你回答我的第二个问题,意思是说如果我在前一个WIM_DATA消息下数据还没处理完,而下一个WIM_DATA消息又到来时,那么数据也将丢失吗?如果是这样,那这个waveIn系列函数还真是难以控制,尤其是用来做语音通话时,莫非我要用某种机制先将录音得到的数据先用另外一个缓存存下来,然后再在我开的发送线程里慢慢去发送么?
现在一些问题都清楚了,关于WIM_DATA消息,lsq19871207你说系统会等我处理完了再给我发,所以这里就涉及到我自己的处理速度的问题了,我必须尽快处理数据,因为我不可能准备足够大的缓存数据块,而一般来说,我都是在处理WIM_DATA消息时才会将数据块重新分配给系统,那么如果WIM_DATA消息未返回,系统会自动把数据放入我为其准备的其他的数据块,但是录音是不间断的,数据块也会很快被全部填满,这个时候,由于某种原因,我连第一个WIM_DATA都没结束,就不会有数据块重新分配给系统,系统也就没地方放数据了,那么数据就丢失了。呵呵,lsq19871207,你说我这么说对吧?
这让我感觉这个问题就像一个人想上厕所,但偏偏门口的大爷不让你进,因为所有的坑位都有人,那没办法,只好那个了,呵呵。
想实现的话,到pudn上去下工程好好研究研究