gpt4 book ai didi

audio - WASAPI GetNextPacketSize 什么时候返回 0

转载 作者:行者123 更新时间:2023-12-02 23:07:19 27 4
gpt4 key购买 nike

sample code of WASAPI capture on MSDN , 循环直到 GetNextPacketSize 返回 0。
我只是想了解什么时候会发生这种情况:

  • 如果麦克风上注册了静音,会发生这种情况吗? (在这种情况下,如果我一直在麦克风上发出噪音,它会无限循环吗?)
  • 这取决于我缺少的一些音频捕获基本概念(我对音频 API 很陌生 :))。
  • 最佳答案

    API 有助于确定要捕获的数据缓冲区的大小,以便 API 客户端无需猜测或分配过多的缓冲区等。当没有数据要捕获(不是单帧)时,API 将返回零.当/如果您过早调用 API 时,这可能会在正在进行的音频捕获 session 中发生,并且基本上预计调用者稍后会再次尝试,因为仍然可以生成新数据。

    在某些情况下,零返回可能表示流的结束。具体来说,如果您从环回设备捕获并且没有事件的回放 session 可以为环回传递生成数据,则捕获 API 可能会一直不传递任何数据,直到出现新的回放 session 。

    示例代码循环与 Sleep 一起检查零数据包大小。称呼。这样,循环期望在 sleep 时间期间至少生成一些数据,并且在连续生成音频数据的正常条件下,外循环内的每次第一次调用都不会返回零长度。内部循环尝试读取尽可能多的非空缓冲区,直到零表示已准备好交付的所有数据都已返回给客户端。

    外循环一直运行,直到接收器通过 bDone 传递捕获结束事件多变的。这里有一个问题,根据示例代码,内部循环可能会以某种方式滚动而不会进入外部循环 - 并且捕获未正确停止。该示例假设 sink 处理数据的速度足够快,因此内部循环可以处理所有当前可用的数据并突破到 Sleep。称呼。也就是说,WASAPI 调用都是非阻塞的,假设这些循环运行得非常快,这个想法是音频数据的处理速度比捕获的速度快,并且循环将大部分线程时间花在 Sleep 中。称呼。对于初学者来说,也许不是最好的示例代码。您可以通过检查 bDone 来改进它。在内循环中也是如此,以使其更可靠。

    关于audio - WASAPI GetNextPacketSize 什么时候返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40586895/

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