2

我正在使用 Windows 多媒体 API 来记录和处理波形音频(waveInOpen和朋友)。我想以循环方式使用少量缓冲区。

我知道您应该waveInPrepareHeader在向设备添加缓冲区之前使用,并且您应该waveInUnprepareHeader在 wave 设备“将缓冲区返回给应用程序”之后以及在您解除分配之前调用。

我的问题是,我是否必须取消准备并重新准备才能重新使用缓冲区?或者我可以将以前使用的缓冲区添加回设备吗?

另外,我在哪个线程上执行此操作有关系吗?我正在使用回调函数,它似乎是在属于音频系统的工作线程上调用的。在回调期间,我可以在该线程上调用waveInUnprepareHeaderwaveInPrepareHeader和吗?waveInAddBuffer

4

2 回答 2

2

是的,我的经验是您每次都需要调用准备和取消准备。从内存中,如果您尝试重复使用相同的错误,它会返回错误。

您通常在处理回调的任何线程上调用准备和取消准备。

于 2010-11-21T17:18:01.027 回答
0

创建缓冲区时,调用waveInPrepareHeader. 然后,您可以在调用从设备返回的缓冲区之前简单地设置准备好的标志。waveInAddBuffer

pHdr->dwFlags = WHDR_PREPARED;

您可以在回调线程(或消息处理程序)上执行此操作。

于 2010-11-21T21:31:58.027 回答