我已经多次阅读过有关它们的内容,并且在将缓冲区大小设置得太低jack
或退出音频应用程序时自己也遇到过它们。但没有人解释 XRun 是什么。有人可以澄清并给出 XRun 的定义吗?它是什么以及它们是如何引起的?
以下是 XRun 错误的示例:
Mon Mar 16 12:32:23 2015: ERROR: JackEngine::XRun: client = <AUDIO APPLICATION> was not finished, state = Running
Mon Mar 16 12:32:23 2015: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
请注意,我将应用程序替换为<AUDIO APPLICATION>
答案1
这是一个缓冲区不足或溢出,X 代表低于或超过。这表明您的系统没有及时处理某些缓冲区,因此丢失了一些数据。当您以非常低的缓冲区大小运行时尤其如此,声卡应该非常快地处理传入缓冲区(溢出)。有些芯片无法处理较小的缓冲区大小,因此您必须增加缓冲区长度以减轻声音芯片所做的工作。
答案2
添加一些官方文档阿尔莎维基:
“xrun”可以是缓冲区欠载或缓冲区溢出。在这两种情况下,音频应用程序要么不够快,无法将数据传送到 ALSA 音频缓冲区,要么不够快,无法处理来自 ALSA 音频缓冲区的数据。通常,xrun 的声音为爆裂声或爆裂声。
可以使用各种内核补丁和策略来最大限度地减少 Jack 下的 xruns,例如。内核抢占和实时 Linux 安全模块。在撰写本文时(2004 年 7 月),这些策略正处于不断变化的状态 - 请参阅http://jackit.sourceforge.net/docs/faq.php#a5最新的。
Alsa 的最新版本提供了一种通过 proc 树记录和调试 xrun 的方法。
调试 xruns 的链接已损坏,但我找到了一些信息这里。