【问题标题】:Oboe Systrace are non full buffers considered as underruns or not?双簧管 Systrace 是否被视为欠载的非完整缓冲区?
【发布时间】:2021-04-08 18:47:19
【问题描述】:

我正在使用oboe 库来制作音乐应用程序。在那里,我通过将 PCM 浮点值写入给定的指针来制作音乐。我很少听到我能听到的underruns。我还使用以下双簧管 API 验证了这一点:

managedStream->getXRunCount();

文档说如下:

 * An XRun is an Underrun or an Overrun.
 * During playing, an underrun will occur if the stream is not written in time
 * and the system runs out of valid data.
 * An underrun or overrun can cause an audible "pop" or "glitch".

我正在尝试调试问题。我发现这个awesome tutorial 是唐的。我使用以下内容捕获了 10 秒的 systrace,请注意,在这 10 秒内,我听到了 0 个可听的欠载弹出/点击声音:

systrace.py --time=10 -o trace.html -a com.example.app 音频调度 频率

aaRdy 调用的结果如下(蓝色框高度显示缓冲区中有多少样本,需要的样本越多高度越高): 这只是 aaRdy 调用的一小部分。我的缓冲区永远不会有 0 个样本。我检查了所有的。在唐写的文章中,他说:

但随后缓冲区开始为空,首先下降到 96 帧, 然后……哦,亲爱的……归零!在零时,我们保证有音频 出现故障,因为缓冲区中没有数据。

这是文章的截图:

我的问题是看这篇文章,我可以保证如果蓝框是空的,那么就会出现欠载。但是,在我的 systrace 中,它永远不会为空,而且我没有听到过低的弹出点击,但 managedStream->getXRunCount();call 实际上返回了 12。我不确定是否存在欠载。

蓝框的减少是否意味着即使不是0也存在欠载?

【问题讨论】:

  • 我对音频处理一无所知,但您可以看到aaRdy systrace 计数器的值是如何在 Android 源代码中测量的:cs.android.com/android/platform/superproject/+/…。本质上,它是数据缓冲区队列中的完整帧数。当它为 0 时,可能意味着缓冲区已满。
  • 我想你的意思是说'当它为 0 时,缓冲区是空的'
  • 这是可用的完整帧数 (mAudioEndpoint->getFullFramesAvailable()),表示可用于写入的缓冲区帧数。当它为 0 时,缓冲区完全被占用,必须丢弃一些东西。

标签: android systrace oboe


【解决方案1】:

不要在这里:)

跟踪中的缓冲区未满是什么意思。

这意味着此时音频硬件从缓冲区读取(和删除)数据的速度比您的应用写入数据的速度要快。

如果您的应用使用大量 CPU 来生成音频数据,这是一种相当正常的情况。可能系统上的某些其他进程优先于音频线程,而您的应用无法足够快地生成所需数量的音频帧。

只有在缓慢写入的情况持续足够长的时间以使缓冲区完全清空,并且音频设备在缓冲区为空时从缓冲区读取,这才会成为问题。在这种情况下,您将遇到欠载,并且 XRuns 计数器将递增。

正如您所说的那样,XRuns 计数器将记录流生命周期内的欠载(或记录流的溢出)的数量。

【讨论】:

  • 感谢您的解释。顺便说一句,我真的很欣赏双簧管。这太棒了,并且使处理低级音频比记录不充分的低级原生 IOS 音频框架要容易得多。双簧管有很好的文档记录,到目前为止使用双簧管非常有趣。继续出色的工作:)
  • ? 感谢您的客气话,真的很高兴您发现它很有用。
【解决方案2】:

我深入研究发现

managedStream->getXRunCount();

返回流整个生命周期的 XRun 数。我认为它会返回相对于先前调用的值。所以显然我得到了 12,但没有欠载,因为这是来自之前欠载的会话。

但是,我希望看到关于在跟踪中具有非完整缓冲区意味着什么的解释。

【讨论】:

    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多