LINUX.ORG.RU

История изменений

Исправление AEP, (текущая версия) :

У PulseAudio наоборот, цель — максимизировать задержки: накормить аудиоадаптер двумя секундами данных, чтобы он не беспокоил основной CPU. Как они это вместе смешивать собрались?

Никак. «Накормить аудиоадаптер двумя секундами данных, чтобы он не беспокоил основной CPU» - это ложная экономия, от которой PipeWire отказался.

А ложная она, поскольку не имеет смысла без возможности сказать «ой, я имел в виду совсем другое, замени вот эти посланные, но не проигранные две секунды на другой звук». PulseAudio говорит «ой» (а по-научному - отматывает буфер назад) каждый раз, когда изменяется громкость или когда при проигрывании чего-нибудь появляется еще и звук системного уведомления. Ведь иначе это самое изменение громкости или системное уведомление проиграется через две секунды. Вот только сделать такую отмотку корректно у PulseAudio уже десять лет, как не получается, так как задача, оказывается, очень сложная, если есть хоть какая-то обработка звука. Тот же ресемплинг (https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/163) или, что еще хуже, кодирование для пересылки по bluetooth. Даже запись с monitor source при этом получается неправильная. И еще новые звуковые карты (в том числе встроенные от Intel) агрессивно кешируют содержимое своего буфера, т.е. отмотать там не всегда получится.

В итоге решено принять тот же подход, что в Chrome OS: динамическое управление задержкой в рамках того максимума, что мы можем себе позволить без возможности отмотать буфер.

Вот моя презентация на эту тему: http://lac.linuxaudio.org/2015/download/rewind-slides.pdf http://lac.linuxaudio.org/2015/video.php?id=8

Исходная версия AEP, :

У PulseAudio наоборот, цель — максимизировать задержки: накормить аудиоадаптер двумя секундами данных, чтобы он не беспокоил основной CPU. Как они это вместе смешивать собрались?

Никак. «Накормить аудиоадаптер двумя секундами данных, чтобы он не беспокоил основной CPU» - это ложная экономия, от которой PipeWire отказался.

А ложная она, поскольку не имеет смысла без возможности сказать «ой, я имел в виду совсем другое, замени вот эти посланные, но не проигранные две секунды на другой звук». PulseAudio говорит «ой» (а по-научному - отматывает буфер назад) каждый раз, когда изменяется громкость или когда при проигрывании чего-нибудь появляется еще и звук системного уведомления. Ведь иначе это самое изменение громкости или системное уведомление проиграется через две секунды. Вот только сделать такую отмотку корректно у PulseAudio уже десять лет, как не получается, так как задача, оказывается, очень сложная, если есть хоть какая-то обработка звука. Тот же ресемплинг (https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/163) или, что еще хуже, кодирование для пересылки по bluetooth. Даже запись с monitor source при этом получается неправильная. И еще новые звуковые карты (в том числе встроенные от Intel) агрессивно кешируют содержимое своего буфера, т.е. отмотать там не всегда получится.

В итоге решено принять тот же подход, что в Chrome OS: динамическое управление задержкой в рамках того максимума, что мы можем себе позволить без возможности отмотать буфер.