Как избежать пропусков обратного вызова 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

Снова столкнулся с этим и наконец-то получил правильный ответ на вопрос, почему происходят xruns.

Со страницы JACKS:

Укажите количество кадров между вызовами JACK process(). [b]Это значение должно быть степенью 2[/b], а значение по умолчанию — 1024. Если вам нужна низкая задержка, установите -p настолько низким, насколько это возможно без появления xruns. Больший
размер периода приводит к большей задержке, но снижает вероятность xruns. Задержка захвата JACK в секундах равна --period, деленной на --rate

Вам нужно установить свой sample rate, frames/periodи periods/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/список_настроек_периода_рамки_джека_идеально_для_интерфейса_usb

Связанный контент