我正在使用Windows多媒体API来logging和处理波形audio( waveInOpen
和朋友)。 我想以循环方式使用less量的缓冲区。
我知道你应该在向设备添加一个缓冲区之前使用waveInPrepareHeader
,并且在波形设备已经“将缓冲区返回给应用程序”并且释放之前,你应该调用waveInUnprepareHeader
。
我的问题是,为了重新使用缓冲区,我必须做好准备并重新准备吗? 或者我可以只将以前使用的缓冲区添加回设备?
另外,这是什么线程我这样做? 我正在使用callback函数,似乎在属于audio系统的工作线程上调用。 我可以在callback期间在该线程上调用waveInUnprepareHeader
, waveInPrepareHeader
和waveInAddBuffer
吗?
是的,我的经验是你需要每次都打电话给准备和毫无准备。 从内存中,如果您尝试重复使用相同的内存,则会返回错误。
而且你通常在任何你正在处理回调的线程上调用prepare和unspare。
当您创建缓冲区时,请调用waveInPrepareHeader
。 然后,您可以简单地设置准备好的标志,然后在从设备返回的缓冲区上调用waveInAddBuffer
。
pHdr->dwFlags = WHDR_PREPARED;
你可以在回调线程上(或者在消息处理程序中)做到这一点。