LINUX.ORG.RU

Помогите разобраться с аудио в linux

 , , ,


0

1

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

Правильно ли я понимаю, что на данный момент есть одна звуковая система alsa и три звуковых сервера: pulseaudio, pipewire и jack. Еще есть OSS, но как я понимаю, для linux ее можно не рассматривать?

Alsa отвечает за общение между процессором и звуковой картой. Главный минус в одноканальности, т.е. она может одновременно работать только с одним приложением. Правильно ли я понимаю, что в гипотетическом примере: разговор в микрофон с воспроизведением в колонках. Если используется одна программа, то будут работать оба устройства, а если используются разные программы, то только что-то одно?

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

Jack это больше для профессионального аудио. Помогает избежать задержек и настроить прямые коммутации. Если нет надобности в записи аудио, то смысла немного?

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

На компьютере можно организовать следующие режимы работы:

  • звук <-> alsa <-> pulse/pipe <-> приложение
  • звук <-> alsa <-> приложение, но только одно

С первым понятно, алса в ядре, к ней доустаналиваются ее утилиты и библиотеки, поверх чего устанавливается нужный сервер.

А как реализовывать второй вариант? Так, чтобы звуковой сервер не пришел по зависимостям. Я экспериментирую на арче, и, к примеру, при установке минимальной плазмы (plasma-desktop), мне уже подтягивают pipewire. Две пары зависимости: pipewire-jack или jack2 и pipewire-session-manager или wireplumber. У которых в свою очередь зависимость на pipewire.

Пока писал, пришло в голову, возможно мне поможет apulse? Если я ее устанавлю перед плазмой, будет ли последняя считать, что у меня стоит пульсаудио, поэтому отсутствует надобность в трубах? Или, как советуют в одной из тем, надо ставить пульсу, а потом ее отключать?

З.Ы. Вообще, после прочитанного, я склоняюсь к варианту алса+пульсаудио. Но в процессе экспериментов, словил заикания музыки. Поэтому думаю о возможности, как бы собрать три варианта и сравнить.

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

Давно уже нет.

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

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

ALSA это полноценная звуковая подсистема, отвечает за всё что с ним связано. pulseaudio и pipewire - бесполезные прослойки, не надо их ставить.

По поводу того как избавиться от этого хлама в зависимостях: создай фейковый (пустой) пакет с нужным названием и нужной «версией» и установи его себе.

firkax ★★★★★
()

В минусах, задержка в сигнале и заикания? Это задержка постоянная или плавающая?

Я ничего из этого ни разу не слышал.

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

Это может делать и одна альса, но пульса делает это более продвинуто, между более разнообразными источниками и потребителями, в т.ч. bluetooth и звук по сети. Альса всегда используется, пульса только поверх нее. Но для приложений они как бы альтернативны, потому что тут важно, на каком уровне что-то интересное происходит. На уровне пульсы проще настраивать всякие кастомные сетапы. Но приложениям никто не запрещает обращаться напрямую к альсе, обычно это можно выбрать в настройках приложения.

damix9 ★★★
()

Вот и подумай сам, вместо пульсы ты уже готов поставить апульсу. Стоит оно ковыряния в готовой системе?

Я бы посоветовал пайпварю и не париться. Смысл твоих занятий за компьютером не «борьба с системой», а осмысленная деятельность. Пусть так и остаётся.

R_He_Po6oT ★★★★
()

Если ты не музыкант, то задержка звука тебя никак не трогает. Это не означает, что будет рассинхрон с видео.

В пайпвари кстати, динамические буффера, лучше чем в пульсе.

R_He_Po6oT ★★★★
()
Ответ на: комментарий от alex1101
/etc/pipewire/pipewire.conf

фрагмент

...
    ## Properties for the DSP configuration.
    default.clock.rate          = 48000
    default.clock.allowed-rates = [ 44100 48000 96000 ]
...

Pipewire научился не делать ресемплинг если твой звуковой чип аппаратно поддерживает несколько разных clock rate. А если не поддерживает то без ресемплинга средствами pipewire тупо не обойтись никак. И ЕМНИП всё что новее стандарта ac97 минимум в три эти частоты умеет.

Подробности: https://wiki.archlinux.org/title/PipeWire#Changing_the_allowed_sample_rate(s)

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

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

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

Я хз что именно там происходит, но с пульсой в хромиуме с cs online звук норм, а с pipewire - хрипит. В настройках пульсы у меня включен avoid-resampling, поэтому грешу на ресемплинг pipewire

alex1101
()

@Dog

Давно уже нет.

Я правильно помню, что у тебя Арч и как раз на голой алсе? Чтобы проверить себя, это решается пакетом alsa-utils, в составе которого amixer? Или она уже сама по себе это умеет?

Как я понимаю, для арча:

pacman -S alsa-lib alsa-utils libpulse

Насколько правильно тестировать звук, используя виртуалки? В частности oracle virtualbox.

Пайпа замена пульсе, но не джеку никак.

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

@firkax

По поводу того как избавиться от этого хлама в зависимостях: создай фейковый (пустой) пакет с нужным названием и нужной «версией» и установи его себе.

Спасибо. Я правильно понимаю, что я просто создаю пустой архив и устанавливаю его? В условиях Арча:

mkdir ~/pulseaudio
tar -czf ~/pulseaudio/pulseaudio-16.1-1-x86_64.pkg.tar.zst ~/pulseaudio/*
pacman -U ~/pulseaudio/pulseaudio-16.1-1-x86_64.pkg.tar.zst

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

До архиваторов я еще не дошел, так что возможно в опциях что-то накосячил. Брал из соседней темы :)

Или это в сторону создания пустого пакета по правилам создания обычных пакетов? Как-то коряво звучит. Для арча pkgbuild с makepkg? На данный момент, я этого не умею. Буду благодарен, если есть инструкция по созданию именно затычки для пульсы/трубы, а если она еще и для арча, так вообще замечательно.

Предполагаю, что будет что-то по типу:

mkdir ~/pulseaudio
echo "pkgname=pulseaudio" > ~/pulseaudio/PKGBUILD
echo "pkgver=16.1" >> ~/pulseaudio/PKGBUILD
echo "pkgrel=1" >> ~/pulseaudio/PKGBUILD
cd ~/pulseaudio
makepkg -si

Но я на 99% уверен, что не все так просто.

@R_He_Po6oT

Вот и подумай сам, вместо пульсы ты уже готов поставить апульсу. Стоит оно ковыряния в готовой системе?

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

Проще всего было бы спросить что лучше, но это тот еще холивар. И если бы в интернете сразу было бы понятно, кто прав :) я бы так и поступил. А так все равно сведется: сам поставь и сам сравни, что больше нравиться.

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

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

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

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

В настройках пульсы у меня включен avoid-resampling

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

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

@firkax

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

mkdir ~/pulseaudio
echo "pkgname=pulseaudio" > ~/pulseaudio/PKGBUILD
echo "pkgver=16.1" >> ~/pulseaudio/PKGBUILD
echo "pkgrel=1" >> ~/pulseaudio/PKGBUILD
echo "arch=(`x86_64`)" >> ~/pulseaudio/PKGBUILD
cd ~/pulseaudio
makepkg -si

В таком варианте, оно хотя бы собирается и устанавливается. И при команде:

pacman -S --needed pulseaudio

Говорит, что уже установлено.

Повторил для jack2, pipwire и pipware-media-session. Трубы все равно как-то пролазят. Возможно из-за того, что в номере версии труб используется двоеточие, которое нельзя использовать в pkgbuild. И нужно собирать без него, а потом менять обратно, если правильно понял инструкцию.

Либо потому что нужно дополнительно указывать конфликтующие и зависимые пакеты.

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

Возможно есть другой способ реализации заглушки?

З.Ы. Надо будет попробовать с другой оболочкой, может xfce не будет ставить трубы/пульсу по зависимости.

ComIngSoon
() автор топика

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

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

Я правильно понимаю, что ты сначала заявил что хотел бы разобраться, но вместо этого, так и не разобравшись, не попробовав того, этого, начал ломать работающее и что то нелепое строить из палок и желудей, послушав местного дурачка-радикала? И когда оказалось что ты даже эту идиотскую затею до конца довести не можешь по причине отсутствия знаний и понимания - ты такой «ну ок, в другой раз, чёрт с ним, сломаю что нибудь другое...»

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

@Jameson Нет, неправильно. И пожалуйста, не переходите на личности, только спора о том, кто тут «дурачок-радикал» не хватает. Тем более, я все равно не понимаю, о ком вы говорите.

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

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

И когда оказалось что ты даже эту идиотскую затею до конца довести не можешь по причине отсутствия знаний и понимания - ты такой «ну ок, в другой раз, чёрт с ним, сломаю что нибудь другое…»

А что не так, к чему притензии то? Вариант не работает? Но от вас, никаких замечаний к нему не было. К тому что, мне на хватает знаний? Ну да, о чем я честно и сказал. К тому что я отложил этот вариант? А что мне еще с ним делать? Или к тому, что не бросил все и не пошел изучать?

ComIngSoon
() автор топика

Возможно кому-то будет интересно/полезно.

На данный момент, на виртуалке установлен минимальный Арч, на который установлены дополнительные пакеты:

  • для видео: xf86-video-amdgpu mesa lib32-mesa
  • для шрифтов: ttf-dejavu ttf-liberation terminus-font
  • для Х-ов: xorg-server xorg-xinit

Это считается за чистую и клонируется для опытов. Из железа есть аудиокарта и колонки. Звуковая карта, предположительно, ASUS Essence STX, система обозначает ее как C-Media CMI8788. Предположительно, потому что системник мне отдали, на самой карте обозначений не увидел.

Машина №1. Устанавливается пульса, потом плазма

pacman -S alsa-utils pulseaudio pulseaudio-alsa
pacman -S plasma-desktop
#На запрос выбираются: jack2 wireplumber phonon-qt5-gstreamer
pacman -S sddm 
systemctl enable sddm.service
pacman -S firefox smplayer dolphin konsole
reboot

Машина №2. Устанавливается труба, потом плазма

pacman -S alsa-utils pipewire pipewire-alsa pipewire-pulse
#На запрос выбирается: wireplumber
pacman -S plasma-desktop
#На запрос выбираются: jack2 phonon-qt5-gstreamer
pacman -S sddm 
systemctl enable sddm.service
pacman -S firefox smplayer dolphin konsole
reboot

Настройки по умолчанию.

Сравнение двух вариантов дает следующее:

  • Машина №1 pacman -Q | grep pipe выдает, что трубы установлены, они идут как зависимость к wireplumber. Фактически, в системе оба пакета. Кто из них конкретно работает, я хз.

Для проверки звука, используется FF с ютубом. Smplayer с островом сокровищ и пара песен. Так же подключался mpv

  • Машина №1 - отсутствует звук, нужно подшаманить в alsamixer (mm - канал отключен, 00 - включен, изменяется клавишей m, для звука необходимо включить Master и PCM). Либо установить один из пакетов plasma-pa или kmixer, что даст соответствующий виджет на панели плазмы. Машина №2 - звук по умолчанию включен.
  • Для машины №2 заметил задержку между включением и отключением звука в FF при постановке клипа на паузу. По ощущениям, около полусекунды. Для машины №1, такого не заметил. Возможно мне кажется, но если просто перескакивать с место на место в клипе, то задержка будет поменьше. Аналогично для smplayer, но задержка меньше чем в FF.
  • Разницы в воспроизведении на двух машинах, я не заметил.
  • Пробовал воспроизводить smplayer одновременнно с FF, проблем не увидел.

З.Ы. Трубы с pipewire-jack вместо jack2, тоже дают задержку между нажатием паузы и прекращением воспроизведения.

З.З.Ы. Если вдруг, кому-то надо что-то проверить и он готов объяснить как это сделать и на что смотреть, то я могу попробовать.

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

Что же не так с этим wireplumber? )

Напоминает тему Не подключаются bluetooth устройства после установки pipewire (комментарий). Там тоже, именно с ним задержки, но нет с pipewire-media-session. Наверно суть в настройках, но никто не знает каких.

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

Дальше экспериментировал с корицей и крысой.

Корица, если ее ставить до аудио, подтягивает оба звуковых сервера. Если после пульсы, то тянет трубы. А вот после труб, пульсу не подтягивает.

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

И честно говоря, в случае воспроизведения через колонки, я не заметил никакой разницы, между серверами или их отсутствием.

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

Мне кажется, что дело в обработке собственных ошибок.

Я выполнил команду wireplumber и у меня было два варианта вывода, хз почему.

В первом он мне бесконечно спамил строки:

W 19:20:01.457371           spa.alsa ../pipewire/spa/plugins/alsa/acp/alsa-mixer.c:1660:element_probe_volume: The decibel volume range for element 'Center' (-4650 dB - -2400 dB) has negative maximum. Disabling the decibel range.
W 19:20:01.457399           spa.alsa ../pipewire/spa/plugins/alsa/acp/alsa-mixer.c:1660:element_probe_volume: The decibel volume range for element 'LFE' (-4650 dB - -2400 dB) has negative maximum. Disabling the decibel range.

А во втором варианте, мне говорил про ошибки: нет xdg-portal и libcamera.

Я тупо взял и поставил, эти пакеты. И либо меня глючит, либо задержка действительно стала меньше. Т.к. помимо этого, я еще пробовал и другие варианты. Для перепроверки взял клон ВМ до изменений (арч + плазма + трубы).

pacman -S xdg-desktop-portal xdg-desktop-portal-kde

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

ComIngSoon
() автор топика

А как точно определить, через что воспроизводится звук?

Поставил linux mint 21 и получил (по дефолту):

Audio:
  Device-1: C-Media CMI8788 [Oxygen HD Audio] driver: snd_virtuoso
  Device-2: AMD Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
    driver: snd_hda_intel
  Device-3: AMD Starship/Matisse HD Audio driver: snd_hda_intel
  Sound Server-1: ALSA v: k5.15.0-52-generic running: yes
  Sound Server-2: PulseAudio v: 15.99.1 running: yes
  Sound Server-3: PipeWire v: 0.3.48 running: yes

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

ComIngSoon
() автор топика
11 мая 2023 г.
Ответ на: комментарий от ComIngSoon

Здарова!

Ты конечно красава! Благую цель преследовал. Я зарегестрировался здесь ради того чтобы тебе это сказать. Ну и интересно конечно, ты забил на затею, или продвинулся куда? Расскажи!

Если что, точно определить через что сейчас воспроизводится звук можно выполнив в терминале pactl info, там в поле Server Name будет написано что используется для воспроизведения.

Ладно, хотел бы поболтать ещё, но надо идти пить таблетки. Мир.

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

для создания музыки - джек

Джек нужен, если есть желание сделать из своей операционной системы DAW (в той же манере, как UNIX является своего рода IDE для C). А если все можно сделать в пределах одной DAW и плагинов, джек не нужен. Рипер преспокойно с алсой работает.

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

А как точно определить, через что воспроизводится звук?

Разве что сносить их по одному, пока звук не отвалится...

Audio:
  Device-1: Intel 6 Series/C200 Series Family High Definition Audio
    driver: snd_hda_intel
  Device-2: AMD Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
    driver: snd_hda_intel
  API: ALSA v: k6.1.26-1-MANJARO status: kernel-api
  Server-1: PipeWire v: 0.3.70 status: active
hargard ★★
()