首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WASAPI捕获缓冲区大小

WASAPI捕获缓冲区大小
EN

Stack Overflow用户
提问于 2013-12-04 09:04:44
回答 2查看 3.7K关注 0票数 2

我在wp8中使用WASAPI,就像我每次在共享模式下使用Getbuffer方法返回不同大小的缓冲区一样,我以8000 the /16位捕获,有时Getbuffer返回80个样本的缓冲区,有时用400个样本返回缓冲区,这是一种正常的行为,而将不同的hnsBufferDuration发送到IAudioClient::Initialize时对缓冲区大小没有任何影响。

EN

回答 2

Stack Overflow用户

发布于 2013-12-04 10:13:35

是的,这是正常行为。我不知道具体的windows,但至少在windows桌面上,这是共享模式捕获应该工作的方式,所以我怀疑它在wp8上并没有什么不同。在处理WASAPI捕获缓冲区时,需要注意3件事。

  • 在IAudioClient::Initialize中指定为hnsBufferDuration的缓冲区的总大小。WASAPI将创建一个请求大小或较大的缓冲区。调用IAudioClient::GetBufferSize以获得实际的总缓冲区大小。
  • 周期性(也是IAudioClient::Initialize的一个参数)。此参数指定WASAPI处理缓冲区的频率,例如,您可以设置一个由WASAPI每3毫秒处理一次的30 ms缓冲区。周期性仅在排他性模式下使用。
  • 包的大小,这就是你要处理的。所发生的情况是,内部WASAPI缓冲区的大小实际上并没有改变(这是GetBufferSize报告的),它只是在不同大小的小部分中处理。

如果您想提前知道下一个块的大小,请调用IAudioCaptureClient::GetNextPacketSize (只在共享模式下工作)。如果您想要做的只是预先分配您自己的缓冲区,这样您就不必在每个调用上重新分配到GetBuffer,那么您只需设置您自己的缓冲区,其大小与IAudioClient::GetBufferSize相同。

票数 3
EN

Stack Overflow用户

发布于 2013-12-04 10:21:34

As 记录在MSDN上

IAudioClient::Initialize方法分配缓冲区。客户端在传递给Initialize方法的hnsBufferDuration参数值中指定缓冲区长度。..。 对于捕获客户端,缓冲区长度确定音频引擎在单个处理传递期间可以从端点缓冲区读取的捕获数据的最大数量。客户端应该始终在调用Initialize 之后调用,以确定所分配缓冲区的实际大小,而可能与请求的大小不同。

API以一种对捕获层有意义的方式实现它,并以最小的API开销为目标。它不会无缘无故地在内部积累数据。如果您需要固定大小的缓冲区,您可以自由地将数据堆在您管理的缓冲区上。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20371033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档