gpt4 book ai didi

audio - WASAPI 捕获缓冲区大小

转载 作者:行者123 更新时间:2023-12-02 22:47:20 27 4
gpt4 key购买 nike

我在 wp8 中使用 WASAPI。每次返回不同大小的缓冲区时,我都在共享模式下使用 Getbuffer 方法。我在 8000Hz/16bit 中捕获,有时是 Getbuffer 返回包含 80 个样本的缓冲区,有时包含 400 个样本,并且。这是正常行为,同时向 IAudioClient::Initialize 发送不同的 hnsBufferDuration 对缓冲区大小没有任何影响吗?

最佳答案

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

  • 在 IAudioClient::Initialize 中指定为 hnsBufferDuration 的缓冲区总大小。 WASAPI 将创建一个请求大小或更大的缓冲区。调用 IAudioClient::GetBufferSize 以获取实际的总缓冲区大小。

  • 周期性(也是 IAudioClient::Initialize 的参数)。此参数指定 WASAPI 处理缓冲区的频率,例如,您可以设置一个 30 毫秒的缓冲区,WASAPI 每 3 毫秒处理一次。周期性仅在独占模式下使用。

  • 数据包大小,这就是您要处理的内容。发生的情况是内部 WASAPI 缓冲区的大小实际上并没有改变(这是 GetBufferSize 报告的大小),它只是以不同大小的小部分进行处理。

如果您想提前知道下一个 block 有多大,请调用 IAudioCaptureClient::GetNextPacketSize(仅适用于共享模式)。如果您只想预先分配您自己的缓冲区,这样您就不必在每次调用 GetBuffer 时重新分配,您只需设置您自己的缓冲区,其大小等于 IAudioClient::GetBufferSize。

关于audio - WASAPI 捕获缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20371033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com