我正在使用双簧管库来制作音乐应用程序。在那里,我通过将 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".
我正在尝试调试问题。我发现了 Don 的这个很棒的教程。我使用以下内容捕获了 10 秒的 systrace,请注意,在这 10 秒内,我听到了 0 个可听的欠载弹出/点击声音:
systrace.py --time=10 -o trace.html -a com.example.app 音频调度频率
调用结果如下aaRdy
(蓝色框高度显示缓冲区中有多少样本,需要的样本越多高度越高):
这只是 aaRdy 调用的一小部分。我的缓冲区永远不会有 0 个样本。我检查了所有的。在唐写的文章中,他说:
但随后缓冲区开始为空,首先下降到 96 帧,然后……哦,天哪……到零!在零时,我们保证会出现音频故障,因为缓冲区中没有数据。
我的问题是看这篇文章,我可以保证如果蓝框是空的,那么就会出现欠载。但是,在我的 systrace 中,它永远不会是空的,而且我没有听到没有运行不足的弹出点击,但managedStream->getXRunCount();
实际上返回了调用12
。我不确定是否存在欠载。