双簧管 Systrace 是否被视为欠载的非满缓冲区? 蓝色框的减少是否意味着即使不是 0 也存在欠载?但是,我很想看到有关在跟踪中具有非满缓冲区意味着什么的解释

问题描述

我正在使用 oboe 库来制作音乐应用。在那里我通过将 PCM 浮点值写入给定的指针来制作音乐。我很少有我能听到的欠载。我还使用以下双簧管 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".

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

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

aaRdy 调用的结果如下(蓝色框高度显示缓冲区中有多少样本,需要更多高度更多样本):

enter image description here

这只是 aaRdy 调用的一小部分。我的缓冲区永远不会有 0 个样本。我检查了所有这些。在 Don 撰写的文章中,他说了以下内容:

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

这是文章的截图:

enter image description here

我在看文章时提出的问题,我可以保证,如果蓝色框为空,则表示存在欠载。但是,在我的 systrace 中,它永远不会为空,而且我没有听到未满载的弹出点击但 managedStream->getXRunCount();call 实际上返回了 12。我不确定是否存在欠载。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)