LINUX.ORG.RU

Pipewire - неизбежная... победа!

 , ,


4

1

Есть snap, flatpak, wayland. Вроде хорошее дело, но - они добавляют изоляцию между приложениями, и такие штуки как jack, pulseaudio уже не могут работать как раньше. Надо что-то решать. И тут появляется надежда - pipewire. Но надежда ложная, потому что это катастрофа!

Нет, надежда все-таки есть.

Вот мои претензии (которые в итоге разрешились):

1. Обязательный ресемплинг. Как известно, pulseaudio поддерживало две частоты дискретизации микшера - основную и альтернативную. Это позволяло, в случае воспроизведения например только музыки со spotify переключать микшер на частоту дискретизации потока и УБРАТЬ ресемплинг! Если воспроизводит только одно приложение, ресемплинга быть НЕ ДОЛЖНО! Потому что он не нужен. Pipewire не позволяет, и похоже что реализовать это в той архитектуре, которую заложили, будет весьма непросто. На практике он всегда делает ресемплинг и всегда портит звук.

Последняя версия pipewire поддерживает до 16 значений частоты дискретизации и будет переключаться на нужную, когда это возможно.

Переключение РАБОТАЕТ уже сейчас, на версии из Git! На релизе 0.3.33 у меня не работает.

КАК СДЕЛАТЬ:

В pipewire.conf пишем:

default.clock.rate          = 48000
default.clock.allowed-rates = [ 44100, 48000 ]

Можно перечислить в allowed-rates до 16 значений. Все!

ТЕПЕРЬ - если воспроизведения не было, и запустить на воспроизведение ОДНО приложение, pipewrire будет переводить себя и звуковую карту на частоту дискретизации этого приложения, и ресемплинга НЕ БУДЕТ.

2. При работе с jack клиентами может меняться размер буфера. Занавес! То есть я играю на гитаре, и тут мне меняют размер буфера? А ничего что это приведет к слышимому и чувствуемому изменению задержки звука? Как играть??? Так НЕЛЬЗЯ ДЕЛАТЬ, а надо делать ровно наоборот. Я уже молчу про то, что изменение на лету размера буфера может просто крашануть jack приложение, которое такого бреда не ожидало!

3. Для того, чтобы вообще хоть как-то задать размер буфера для jack клиентов, надо запускать приложение с переменной окружения PIPEWIRE_LATENCY. То есть мне теперь все приложения из консоли стартовать? Или все desktop файлы править? С настоящим jack это решается элементарно - программой управления типа qjackctl. Там просто выбирается какой буфер, и все приложения используют его. Должно быть ВОТ ТАК.

Решение:

pw-metadata -n settings 0 clock.force-quantum <size>

устанавливает фиксированный размер буфера.

Или в jack.conf:

node.lock-quantum = true

4. Нельзя нормальным образом поменять частоту дискретизации при работе с jack клиентом. Используется та, на которую настроен pipewire своим конфигом. С нормальным jack частота просто выбирается в qjackctl. А с pipewire что, мне править конфиг и перезапускать его, или как?

Решение, можно менять на лету:

pw-metadata -n settings 0 clock.force-rate <samplerate>

В итоге, имеем огромные практически нерешаемые проблемы на уровне архитектуры, из-за которых pipewire идет в противоположную от нужной сторону.

Последний релиз и коммиты, которые делаются прямо сейчас показывают, что развитие пошло именно в нужную сторону.

Для того, чтобы вообще хоть как-то задать размер буфера для jack клиентов, надо запускать приложение с переменной окружения PIPEWIRE_LATENCY.

Тебе в любом случае запускать jack клиенты через pw-jack. Так что это не проблема.

eternal_sorrow ★★★★★ ()
Ответ на: комментарий от sergej

jack не будет работать вообще. Например, во flatpak пакетах он принципиально работать не может. Не позволяет архитектура. А вместо него pipewire работает, но там вот такие проблемы.

James_Holden ()
Ответ на: комментарий от eternal_sorrow

Тебе в любом случае запускать jack клиенты через pw-jack

Не делай меня лоллировать. Ты вот сколько используешь pipewire? Я минут десять. И я уже знаю что никакой pw-jack не нужен. Если удалить обычный jack, что и будет в итоге, все будет работать сразу с pipewire. Без pw-jack.

А вообще это аргумент - вы мне машину поцарапали! Да что ты паришься, мы там еще и битами стекла расквасили, царапина не проблема.

James_Holden ()
Ответ на: комментарий от bhfq

Для гномоящеров и девушек с розовыми волосами такие настройки излишне и по этому их никогда не будет в гноме (в базе для ред хат).

Возможно это и есть источник катастроф.

James_Holden ()
Ответ на: комментарий от James_Holden

Это я поковырял pipewire.

Так ты тоже молодец — удумал на ночь глядя что-то поковырять. С утра надо новые дела начинать, с бодрым расоположением духа, тогда будешь замечать только положительные моменты, а это всё, что ты написал, окажется мелочью и чепухой. Ложись баиньки. Утро вечера мудренее.

anonymous ()
Ответ на: комментарий от xDShot

Ну расскажи. Где в конфиге пайпвайра включается вторая альтернативная частота дискретизации? Как ты при работе jack приложения задаешь фиксированный размер буфера? Как не залазя в конфиги меняешь частоту дискретизации пайпвайра?

Что у тебя работает? Голова - пока не заметно чтобы работала. Или лишь бы ляпнуть? Форум все стерпит?

James_Holden ()

Обязательный ресемплинг

ЕМНИП, там сложнее. Ресемплинг не осуществляется, если он не нужен.

Для того, чтобы вообще хоть как-то задать размер буфера для jack клиентов, надо запускать приложение с переменной окружения PIPEWIRE_LATENCY

Не только, допустимый размер буффера может контролироваться в конфиге и в клиентах.

fernandos ★★ ()
Ответ на: комментарий от anonymous

Чушь. Какая мелочь, это катастрофа десятилетия. Я работать не смогу, развивать дальше свои проекты не смогу, вообще буду опозорен из-за этих баранов малолетних, когда мои программы на этом развалятся. А я же не виноват что они неправильно все сделали.

James_Holden ()
Ответ на: комментарий от fernandos

Ресемплинг не осуществляется, если он не нужен.

На практике так не получится. Ты не поставишь у пайпвайра частоту 44100 Гц, чтобы музыка шла без ресемплинга, потому что тогда будет ресемплиться видео 48000 -> 44100 что еще хуже. И 48000 пайпвайру ставить нет смысла, у меня например jack софт на 96000 работает всегда. В итоге, вся музыка неизбежно будет ресемплироваться. А с пульсой - нет.

James_Holden ()
Ответ на: комментарий от James_Holden

Ты не поставишь у пайпвайра частоту 44100 Гц, чтобы музыка шла без ресемплинга, потому что тогда будет ресемплиться видео 48000 -> 44100 что еще хуже

Автоотключения ресемплинга нет (при таких запросах), можете помочь им в этом, проект достаточно юный.

А можете править конфиг, что уж там.

fernandos ★★ ()
Ответ на: комментарий от anonymous

А Джек, кстати, тоже только с одной частотой работает и чтобы её поменять надо демона перезапускать.

Так она меняется из GUI и перезапускается демон из GUI одной кнопкой. Ну я могу конечно запилить софтину которая будет в конфиге пайпвайра менять. Это один из путей решения проблемы.

James_Holden ()
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от fernandos

можете помочь им в этом

Я хотел, но выяснилось что там сделано настолько по-тупому что я даже не знаю как тут быть. Ресемплинг осуществляется совсем не в том месте где должен.

А можете править конфиг

Лучше атомный джихад.

James_Holden ()
Ответ на: комментарий от fernandos

В пайвайре клиент может указать желаемый размер буфера.

Нет, я же в ОП объяснял. Надо указывать фиксированный размер буфера, как и делается в jack. Он не должен меняться налету, никогда. Нельзя записывать звук, играть на инструменте со сменой размера буфера на лету. За это кастрировать надо. Это делает такой сервер вообще непригодным к использованию.

Едем на машине, и вдруг колеса на 5 дюймов больше стали. Внезапно. На повороте, под мостом когда навстречу грузовик выскакивал из-за бетонной стены.

Что будем с инженерами, разработавшими такой автомобиль делать? Я предлагаю березами четвертовать.

James_Holden ()
Ответ на: комментарий от James_Holden

Лучше атомный джихад.

А что, запилите гуи-утилиту, где будете менять частоту (изменяя конфиг), а перезапускайте демон одной кнопкой.

Серьёзно, у них вот только недавно стабилизировался АПИ/АБИ.

fernandos ★★ ()
Ответ на: комментарий от James_Holden

Пайпвайр — не только джек, а и пульса, не забывайте об этом.

К слову, не думаю, что он меняет размер буфера прямо так, думаю, это при запросе клиентом какого-то определённого размера.

fernandos ★★ ()
Ответ на: комментарий от fernandos

А что, запилите гуи-утилиту, где будете менять частоту (изменяя конфиг), а перезапускайте демон одной кнопкой.

Конфиги под рутом лежат. Это же линукс любимый. И как менять GUI утилитой файл который под рутом? Уже проблема.

Второе. Менять надо по разному. Если я работаю в DAW мне нужна частота, выставленная вручную. Если смотрю видео, слушаю музыку она должна меняться сама, на лету. Ну вручную понятно, некой утилитой. А сама чтобы менялась сделать не получится, перезапуск демона это уже не на лету.

Ресемплинг, вроде, делается не в микшере, а в прослойке для пульсовых приложений, что сильно осложняет реализацию автоматической смены частоты на лету. Хотя может и не все так плохо, надо разбираться еще.

James_Holden ()
Ответ на: комментарий от fernandos

Я давно предлагаю за каждый лишний запрос пароля отрубать руку разработчику. А когда кончатся руки - остальное из торчащего.

Паролей вообще быть не должно нигде, так не хватало еще для настройки звука пароли вводить. Даже Торвальдс лет десять назад столкнувшись с запросом пароля для настройки принтера, орал что линукс дно. Я с ним тут согласен.

James_Holden ()
Ответ на: комментарий от fernandos

К слову, не думаю, что он меняет размер буфера прямо так, думаю, это при запросе клиентом какого-то определённого размера.

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

James_Holden ()
Ответ на: комментарий от peregrine

Так это и до пипевире была проблема

В том и дело что была, из-за чего и делают pipewire. Но не туда пошли.

дна из причин почему всё кроме родного пакетного менеджера - извращенство.

Ты лечишь головную боль отрубанием головы. Это бред. Пакетный менеджер это только лишние проблемы. Об этом еще Патрик говорил изначально, когда только начинался линукс.

James_Holden ()
Ответ на: комментарий от James_Holden

Пакетный менеджер и централизованное управление программами - единственное преимущество линукса перед windows или osx. А теперь похоже одна FreeBSD адекватная осталась, но это не точно.

peregrine ★★★★★ ()
Ответ на: комментарий от fernandos

Еще раз - jack приложение ничего не запрашивает. И никак не может запрашивать, это в корне не сочетается с логикой работы jack. Ты не можешь иметь разную величину буфера у разных приложений подключенных к одному серверу jack. Потому что в этом нет никакого смысла.

Это настраивается при запуске сервера.

James_Holden ()
Ответ на: комментарий от kott

Истеричный бред

Такой же бред, как невозможность купить хлеб без маски на лице. 5 лет назад. Но сегодня это не бред.

Просто надо немного смотреть вперед, а не голову в песок.

James_Holden ()
Ответ на: комментарий от peregrine

Пакетный менеджер и централизованное управление программами

Это две несвязанные вещи. Классический пакетный менеджер как раз очень мешает централизованному управлению программами, настолько что ломает его и скатывает в винду. Странно этого не видеть.

Поэтому чтобы раскрыть преимущества линукса надо использовать вещи типа флатпака. Тут преимущества встают в полный рост. На винде например такое не реализуемо никак.

James_Holden ()
Ответ на: комментарий от fernandos

Джек приложение написано для джека и ни про какой пайпвайр оно знать не знает. И ничего запрашивать не будет.

К тому же я нигде не вижу гарантий, что через родное API пайпвайра можно что-то запросить и будет фиксированный буфер.

Можно запросить максимальный буфер.

James_Holden ()
Ответ на: комментарий от James_Holden

Джек приложение написано для джека и ни про какой пайпвайр оно знать не знает. И ничего запрашивать не будет.

Тогда оно будет работать на пайпвайре штатным образом с динамическим выбором размера буфера.

Можно запросить максимальный буфер.

Applications can specify a desired buffer size with the node.latency property.

fernandos ★★ ()
Ответ на: комментарий от James_Holden

Тут преимущества встают в полный рост

Ну вот они и встали. Pipewire, Вялый в котором запись экрана и скриншоты прикрутить не могут, даже с рутом, так как ломает безопасность 1111 (на самом деле копирастам очень DRM нормального хочется), наслаждайся как говорится.

peregrine ★★★★★ ()