如何避免 XRUN 回调跳过

如何避免 XRUN 回调跳过

设置 QjackCtrl 和 Arour 后,我可以正常录音,但 XRUN 回调跳过很烦人。

这是我的 QjackCtrl 配置:

在日志中我看到:

18:37:22.041 XRUN callback (97).
18:37:22.793 XRUN callback (42 skipped).
18:37:24.794 XRUN callback (111 skipped).
18:37:26.795 XRUN callback (111 skipped).
18:37:28.796 XRUN callback (111 skipped).
18:37:30.798 XRUN callback (75 skipped).
18:38:45.359 XRUN callback (552).
Mon Oct 20 18:38:45 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Running
Mon Oct 20 18:38:45 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:38:45 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:38:46 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Triggered
Mon Oct 20 18:38:46 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:38:46 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Triggered
Mon Oct 20 18:38:46 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
18:38:46.833 XRUN callback (3 skipped).
Mon Oct 20 18:38:46 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Triggered
Mon Oct 20 18:38:46 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:38:46 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:38:46 2014: ERROR: JackEngine::XRun: client = PulseAudio JACK Sink was not finished, state = Triggered
Mon Oct 20 18:38:46 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
18:38:48.834 XRUN callback (23 skipped).
18:40:28.031 XRUN callback (580).
Mon Oct 20 18:40:28 2014: ERROR: JackEngine::XRun: client = PulseAudio JACK Sink was not finished, state = Running
Mon Oct 20 18:40:28 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
18:40:28.884 XRUN callback (1 skipped).
Mon Oct 20 18:40:28 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Triggered
Mon Oct 20 18:40:28 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = PulseAudio JACK Sink was not finished, state = Running
Mon Oct 20 18:40:29 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = PulseAudio JACK Sink was not finished, state = Triggered
Mon Oct 20 18:40:29 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = PulseAudio JACK Sink was not finished, state = Triggered
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client PulseAudio JACK Source finished after current callback
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Running
Mon Oct 20 18:40:29 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = PulseAudio JACK Sink was not finished, state = Running
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = PulseAudio JACK Source was not finished, state = Triggered
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Triggered
Mon Oct 20 18:40:29 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Triggered
Mon Oct 20 18:40:29 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:40:29 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
Mon Oct 20 18:40:29 2014: ERROR: JackEngine::XRun: client = ardour was not finished, state = Triggered
Mon Oct 20 18:40:29 2014: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
18:40:30.885 XRUN callback (32 skipped).
18:40:32.887 XRUN callback (89 skipped).

什么是XRUN回调跳过?我该如何解决这些问题?

使用低延迟内核运行 Ubuntu 14.04:

$ uname -a
Linux laptop 3.13.0-38-lowlatency #65-Ubuntu SMP PREEMPT Thu Oct 9 12:04:28 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

答案1

再次遇到这个问题并最终找到了为什么会发生 xrun 的正确答案。

来自 JACKS 页面:

指定 JACK process() 调用之间的帧数。[b]此值必须是 2 的幂[/b],默认值为 1024。如果您需要低延迟,请将 -p 设置为尽可能低,而不会看到 xruns。
更大的周期大小会产生更高的延迟,但会使 xruns 的可能性更小。JACK 捕获延迟(以秒为单位)是 --period 除以 --rate

您需要设置sample rateframes/periodperiods/buffer正确。以下是最佳的USB 设备

(Frames [or buffer] / Sample Rate ) * Periods = Latency in ms

( 16 / 48000 ) * 3 = 1
( 32 / 48000 ) * 3 = 2
( 64 / 48000 ) * 3 = 4
( 128 / 48000 ) * 3 = 8
( 256 / 48000 ) * 3 = 16
( 512 / 48000 ) * 3 = 32
( 1024 / 48000 ) * 3 = 64
( 2048 / 48000 ) * 3 = 128
( 32 / 96000 ) * 3 = 1
( 64 / 96000 ) * 3 = 2
( 128 / 96000 ) * 3 = 4
( 256 / 96000 ) * 3 = 8
( 512 / 96000 ) * 3 = 16
( 1024 / 96000 ) * 3 = 32
( 2048 / 96000 ) * 3 = 64
( 64 / 192000 ) * 3 = 1
( 128 / 192000 ) * 3 = 2
( 256 / 192000 ) * 3 = 4
( 512 / 192000 ) * 3 = 8
( 1024 / 192000 ) * 3 = 16
( 2048 / 192000 ) * 3 = 32

我选了最优的,全部都在这里: http://wiki.linuxaudio.org/wiki/list_of_jack_frame_period_settings_ideal_for_usb_interface

相关内容