我在wp8中使用WASAPI,就像我每次在共享模式下使用Getbuffer
方法返回不同大小的缓冲区一样,我以8000 the /16位捕获,有时Getbuffer
返回80个样本的缓冲区,有时用400个样本返回缓冲区,这是一种正常的行为,而将不同的hnsBufferDuration发送到IAudioClient::Initialize
时对缓冲区大小没有任何影响。
发布于 2013-12-04 10:13:35
是的,这是正常行为。我不知道具体的windows,但至少在windows桌面上,这是共享模式捕获应该工作的方式,所以我怀疑它在wp8上并没有什么不同。在处理WASAPI捕获缓冲区时,需要注意3件事。
如果您想提前知道下一个块的大小,请调用IAudioCaptureClient::GetNextPacketSize (只在共享模式下工作)。如果您想要做的只是预先分配您自己的缓冲区,这样您就不必在每个调用上重新分配到GetBuffer,那么您只需设置您自己的缓冲区,其大小与IAudioClient::GetBufferSize相同。
发布于 2013-12-04 10:21:34
As 记录在MSDN上
IAudioClient::Initialize
方法分配缓冲区。客户端在传递给Initialize方法的hnsBufferDuration参数值中指定缓冲区长度。..。 对于捕获客户端,缓冲区长度确定音频引擎在单个处理传递期间可以从端点缓冲区读取的捕获数据的最大数量。客户端应该始终在调用Initialize 之后调用,以确定所分配缓冲区的实际大小,而可能与请求的大小不同。
API以一种对捕获层有意义的方式实现它,并以最小的API开销为目标。它不会无缘无故地在内部积累数据。如果您需要固定大小的缓冲区,您可以自由地将数据堆在您管理的缓冲区上。
https://stackoverflow.com/questions/20371033
复制相似问题