LINUX.ORG.RU

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

 , ,


5

2

Есть 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 идет в противоположную от нужной сторону.

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

★★★★

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

Он не нужен, если я просто слушаю музыку из одного приложения. Зачем его делать?

Зачем плодить постояные флеймы по поводу влияет/не влияет, портит линукс звук или не портит, если можно решить проблему на корню и забыть?

Покупаете булку, на ней написано - 0,01% смертельной дозы цианида. А на другой написано «нет цианида, вообще тупо нету». Цена одинаковая. Какую выберем? Если подойдет человек в белом халате и начнет объяснять, что такая доза цианида она вообще никак не ощущается и ты не заметишь, так что пофиг, это как-то повлияет на решение?

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

Да, вот в этом и катастрофа. Что из-за такой фигни ось однопроцентная. И из-за невменяемых пользователей.

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

Ну допили.

Заодно сделай, чтобы виндовый SolidWorks на Raspberry Pi первом работал.

А ещё что мне для тебя сделать? Спинку тебе вареньем помазать?

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

Подавай поток на частоте одинаковой с pipewire и не будет ресемплинга

Это не «не будет ресемплинга», а это ресемплинг 1:1. Как бы тоже но не то, ты сам тут объяснил почему. Оно должно переключаться на частоту потока, а не наоборот.

no-such-file ★★★★★
()
Ответ на: комментарий от James_Holden

Зачем ты с зеркалом разговариваешь?

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

Нет, это просто у тебя извилин недостает это понять.

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

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

Он не нужен, если я просто слушаю музыку из одного приложения. Зачем его делать?

Чтобы не усложнять архитектуру постоянным переключением частоты дискретизации. Не вижу в этом никакой катастрофы. Все так делают.

Цена одинаковая.

Не одинаковая.

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

Это одинаковые сущности. Мы в юникс системе, прикинь. «Все есть файл» тебе ни о чем не говорит? Ты вендузятник?

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

Он не нужен, если я просто слушаю музыку из одного приложения. Зачем его делать?

А что будет если в это время запустить программу с другой частотой дискретизации? Если её постоянно менять, то заикаться будет.

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

Чтобы не усложнять архитектуру постоянным переключением частоты дискретизации. Не вижу в этом никакой катастрофы

А я вижу. Что делают не та как правильно а так как осилили, оправдывая это тем что якобы сложна. Хотя на самом деле нифига не сложно.

Не одинаковая.

Для пользователя разницы нет. И то, и то - СПО.

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

Для пользователя разницы нет. И то, и то - СПО.

А для разработчиков есть. Хотите чтобы вам сделали переключение частоты – платите разработчикам.

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

что будет если в это время запустить программу с другой частотой дискретизации?

Один из потоков начнет ресемплироваться.

Если её постоянно менять, то заикаться будет.

Пульса же не заикается как-то. У нас есть готовое опенсорсное решение. Какие проблемы сделать как там сделано уже много лет, отлажено, код открыт?

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

Хотите чтобы вам сделали переключение частоты – платите разработчикам.

Я не то что готов платить, я готов сам сделать. Только пока это не кажется простым в той архитектуре, которую они сделали. К тому же это несколько противоречит философии которую они заложили.

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

Один из потоков начнет ресемплироваться.

Какой именно? Второй? Если так и если у первого низкая частота дискретизации, то у второго будет плохое качество воспроизведения. В общем кривой это подход.

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

Ядро системы и пакетный менеджер это одинаковые сущности? Ахаха што.

Тогда флатпак тоже монолитный - все его пакеты в /var/lib/flatpak лежат.

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

то у второго будет плохое качество воспроизведения

Это по барабану, все равно потоков уже не один и все смешается.

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

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

Это по барабану, все равно потоков уже не один и все смешается.

У большинства другое мнение. А вы хотите странного. Качество воспроизведения не должно зависеть от количества и порядка запуска программ.

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

Ядро системы и пакетный менеджер это одинаковые сущности? Ахаха што.

Вот то, что извилин у тебя маловато, либо ты виндузятник. Это одно и то же. Модули ядра такие же «пакеты». Они так же имеют зависимости, так же кидаются в общее адресное пространство ядра как файлы классическим пакетным менеджером в /usr/bin. У них есть свой менеджер который отслеживает зависимости.

Тогда флатпак тоже монолитный - все его пакеты в /var/lib/flatpak лежат.

Ну да. Мы с тобой на одной планете лежим, поэтому мы одно целое. В одной вселенной живем.

Монолитность определяется не так. Попробуй пошевелить мозгами еще раз.

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

Качество воспроизведения не должно зависеть от количества и порядка запуска программ.

Нет, должно! Именно что должно!

Оно должно зависеть от того, что конкретно и в какой ситуации выводится. Если я слушаю flac то должно быть качество. Если я говорю по скайпу то на ресемплинг пофиг, я не симфонический оркестр транслирую по скайпу. Когда я говорю по скайпу, на качество воспроизведения flac на фоне мне тоже становится пофиг - за разговором я не обращу на это внимание.

Вот это характерный пример того о чем я с @fornlr говорил. Все должно проектироваться исходя из потребностей пользователя. То есть надо делать анализ, КАК пользователь использует систему, при разных вариантах использования - какие у него требования. А потом продумывать архитектуру исходя из этого.

Аргументы «так проще для разработчика», «не будем усложнять архитектуру», «так логичнее потому что в моем языке программирования это делается проще» тут вообще не канают. Они должны сразу отметаться!

У большинства другое мнение

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

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

Вариант не пользоваться этими всеми хипсторскими снапами и флатпаками конечно же не рассматривается?

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

Код из модулей ядра выполняется в общем адресном пространстве и с общими привилегиями. Бинарники программ из пакетов выполняются в разных изолированных процессах. Бинарники программ из твоих флатпаков тоже выполняются в изолированных процессах, но с дополнительными глупыми и ненужными ограничениями. ТС - упорот. Предлагаю попить таблеточек.

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

Нет. Я против маргинализации. Да и лучше флатпака пока ничего нет (хотя надо бы делать). Отказываться от него просто смешно. Я же не мазохист. Только нормально на линуксе работать можно стало без этих идиотских пакетов с зависимостями и распаковки всего прямо в корень в кучу, и опять в болото?

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

По мне так твой флатпак и есть маргинальщина.

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

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

Я бы сознательно всё перенастроил если бы звук бы работал как вы предлагаете. По мне ваше предложение – это просто баг.

Мультиплексирование ресурсов на равных основаниях – одно из основных назначений ОС. Монопольное управление звуком одной программой – это подход DOS.

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

и распаковки всего прямо в корень в кучу

Почему тебя это беспокоит? В корне в куче они хранятся как файлы, принадлежающие руту. Когда они запущены от юзера, лазить и портить чужие файлы они всё равно не могут.

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

ТС - упорот

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

Код из модулей ядра выполняется в общем адресном пространстве и с общими привилегиями

Нет, у них могут быть разные привилегии, в зависимости от лицензии на модуль.

Бинарники программ из пакетов выполняются в разных изолированных процессах.

Какая разница, они в общей файловой системе лежат и видят ее. Мы в юниксе, «все есть файл» ты про это тоже не слышал? Если все есть файл, и доступ ко всем файлам есть у всех - значит всем доступно все. Простая логика уровня детского сада. Неужели надо это объяснять…

но с дополнительными глупыми и ненужными ограничениями

Они выполняются в изолированных файловых системах. Поэтому это уже не монолит.

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

Я конечно дико извеняюсь, но «А какая к чёрту разница?»

З.Ы. не являюсь аудиофилом.

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

и как выясняется элементарной матчасти не знаете.

Давай, называй свою матчасть с авторами и названиями публикаций :)

Нет, у них могут быть разные привилегии, в зависимости от лицензии на модуль.

facepalm.jpg

Какая разница, они в общей файловой системе лежат и видят ее. Мы в юниксе, «все есть файл» ты про это тоже не слышал? Если все есть файл, и доступ ко всем файлам есть у всех - значит всем доступно все. Простая логика уровня детского сада. Неужели надо это объяснять…

По дефолту они имеют только права на чтение. Какие от этого проблемы?

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

Нет, у них могут быть разные привилегии, в зависимости от лицензии на модуль.

В общем адресном пространстве для программ на Си привилегии бесполезны и элементарно обходятся.

Если все есть файл, и доступ ко всем файлам есть у всех - значит всем доступно все.

4.2. Про атрибуты прав у файлов слышали?

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

Если все есть файл, и доступ ко всем файлам есть у всех - значит всем доступно все.

чуваак, ты про MAC слышал вообще?

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

Ну тогда ты туповат просто, потому и страдаешь, так и должно быть. Смирись.

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

распаковки всего прямо в корень в кучу

ты там на слаке сидишь чтоли?

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

Если все есть файл, и доступ ко всем файлам есть у всех - значит всем доступно все.

А про права на чтение, запись, исполнение, пользователей, группы и прочее из букваря для юникоспользователей детского сада младшей группы ты не слышал?

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

Мультиплексирование ресурсов на равных основаниях – одно из основных назначений ОС. Монопольное управление звуком одной программой – это подход DOS.

При всем уважении - это полный бред.

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

То же самое для остальных подсистем.

Монопольное управление звуком одной программой

Это современная винда. Лидер в этой области. Они тупые? Не думаю.

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

Давай, называй свою матчасть с авторами и названиями публикаций :)

www.linux.org.ru, мои посты.

По дефолту они имеют только права на чтение. Какие от этого проблемы?

Самые разные. Гигантские. И не надо писать ерунду, все что нужно и создает проблемы доступно на чтение, запись и выполнение.

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

Про атрибуты прав у файлов слышали?

Они есть как инструмент, но их никто не ставит там где следовало бы. В итоге в любом обычном линуксе всем доступно все.

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

Они есть как инструмент, но их никто не ставит там где следовало бы. В итоге в любом обычном линуксе всем доступно все.

Откуда такие вызывающе неверные утверждения?

Harald ★★★★★
()

Это и приведет нас всех к катастрофе.

Да какая еще катастрофа, если линупсом пользуется 1,5 юзера ? Отряд не заметит потери бойца.

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

А про права на чтение, запись, исполнение, пользователей, группы и прочее из букваря для юникоспользователей детского сада младшей группы ты не слышал?

Проблема не в том когда не слышал. А в том когда слышал, но ничего не понял как ты.

Эти инструменты есть, но они не используются в обычном, старом десктопном линуксе. Группы когда-то использовались, года до 2010 если не путаю, но потом и это выкинули.

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

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

Это чисто криворукость ядра Линукса. В Haiku такого нет не смотря на отсутствие расстановки приоритетов обращения к диску.

Это современная винда.

По умолчанию там всё микшируется и ресемплится. Для монопольного доступа нужны специальные манипуляции. Через специальные манипуляции это и в Линуксе можно.

X512 ★★★★★
()

Предлагаю топикстартеру прочитать собрание сочинений Таненбаума и «The Art of Unix Programming» Э. Реймонда. И не возвращаться на ЛОР до полного просветления и публичного отречения от ереси флатпаков.

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

Откуда такие вызывающе неверные утверждения?

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

Давай начнем с этого, самого простого.

James_Holden ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.