LINUX.ORG.RU

Отображение уровня громкости в Pulse, при изменениях в ALSA

 , , , ,


0

2

WM: Openbox, pyxdg не установлен, pulse запускается через autostart.sh:

start-pulseaudio-x11
$ ps -A | grep pulse
 1738 ?        00:00:24 pulseaudio
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC3221 Analog [ALC3221 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
$ grep -v '^\s*;\|^\s*#\|^\s*$' /etc/pulse/daemon.conf
flat-volumes = no
$ cat /etc/asound.conf 
# ALSA system-wide config file
# By default, redirect to PulseAudio:
pcm.default pulse
ctl.default pulse

ArchWiki: PulseAudio (Русский)/Troubleshooting - смотрел, но решение так и не найдено

Что было замечено и как воспроизвести: Запускаем alsamixer и можно еще pavucontrol. Если крутить и в pavucontrol, и в alsamixer, общий звук будет меняться там-и-там, но

  • запускаем audacity или xmms, не важно, главное приложение, которое через alsa может регулировать уровень громкости. К примеру, qmmp без Использовать прогр.регулировки громкости в настройках

Если в подобном alsa-приложении будем регулировать звук, то при запущенном alsamixer или pavucontrol мы не будем видеть, что он меняется, а он меняется для всей системы. Стоит сделать:

$ pulseaudio --kill && pulseaudio --start 

и теперь если крутить ползунок звука в alsa-приложении (audacity, xmms, qmmp) мы получим, то что звук меняется и в alsamixer, и в pavucontrol для master. Еще вот такое решение напрашивается и оно работает:

start-pulseaudio-x11 && pulseaudio --kill && pulseaudio --start &
pulseaudio --start && pulseaudio --kill && pulseaudio --start &
  1. Вопрос следующий, как данное получить без pulseaudio -k?
    • А именно: почему pulseaudio, пока не сделаю pulseaudio -k игнорирует либо не видит изменений в alsa?
  2. Или лучше, можно ли без поддержки pulse в приложении сделать что бы звук для него регулировался и только для его процесса и не только через pavucontrol?
    • Вроде бы нельзя, но мало ли alsamixer-plugin может быть может данное, а я не знаю
  3. Кто pulseuadio использует (не пользуется DE, конкретизируем ситуация что бы точно), покажите как вы демон pulse запускаете.
    • И запускаете ли его в обще, или он сам запускается после запуска какого-то приложения?
★★★★★

Последнее исправление: NK (всего исправлений: 19)

В XMMS в настройках плагина ALSA по умолчанию выбрано «регулировать канал PCM», надо выключить. Ещё тут сказано, что есть плагин pulse для xmms, но лично я не встречал такого плагина.

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

Дело не в xmms, я им даже и не пользуюсь, он в качестве примера. Смотри, из расписанного нашел все таки решение вида:

start-pulseaudio-x11 && pulseaudio --kill && pulseaudio --start &

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

$ grep -v '^\s*#' /usr/bin/start-pulseaudio-x11


set -e

/usr/bin/pactl info > /dev/null 2>&1 || /usr/bin/pulseaudio --start "$@"

if [ x"$DISPLAY" != x ] ; then

    /usr/bin/pactl load-module module-x11-publish "display=$DISPLAY" > /dev/null
    /usr/bin/pactl load-module module-x11-cork-request "display=$DISPLAY" > /dev/null

    if [ x"$KDE_FULL_SESSION" = x"true" ]; then
       /usr/bin/pactl load-module module-device-manager "do_routing=1" > /dev/null
    fi

    if [ x"$SESSION_MANAGER" != x ] ; then
	/usr/bin/pactl load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" > /dev/null
    fi
fi
NK ★★★★★
() автор топика
Последнее исправление: NK (всего исправлений: 1)
Ответ на: комментарий от NK

Не совсем понятно что нужно. Регулировать уровень звука в приложении не затрагивая общий уровень?

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

Регулировать уровень звука в приложении не затрагивая общий уровень?

Да, если возможно ДЛЯ приложении, которое pulse не умеет и не через pavucontrol, но при этом что бы его уровень громкости в pavucontrol менялся, но это 2-ой пункт вопроса в шапке.

Первый, почему только после перезапуска демона pulse уровень громкости при изменении начинает отображаться в alsamixer

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

Вот ты, вроде, так подробно всё расписал, а всё равно ничерта не понятно. Повторять твои манипуляции с программами никто не будет. Запиши видео со звуком, объясни по-человечески чего ты хочешь.

Если приложение не умеет самостоятельно регулировать звук, то без пульсы или других звуковых серверов ты не сможешь регулировать его уровень отдельно от всего остального. Можно, конечно, сделать отдельное ALSA-устройство с программным регулированием уровня (softvol) и указывать таким программам выводить через него и регулировать alsamixer’ом, но тогда, если таких программ будет больше одной, то они всё равно все будут регулироваться одновременно. Не будешь же для каждой такую «крутилку» делать.

Твои «два» варианта решения через pulseaudio -k, по сути, ничем не отличаются. В альсе, насколько я помню, отображается тот же самый пульсовый уровень на софтовом устройстве pulse. И если так, то, скорее всего, проблема отображения кроется в самой пульсе. Обнови/переустанови/удали. Третье предпочтительнее.

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

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

Понятно с alsa-only-приложениями, спасибо. В принципе, вспоминая время когда я на ALSA только сидел без Pulse, меня очень радовало когда у плеера была программная регулировка громкости, наверно неспроста. Но вот почему pulseaudio, пока не сделаю pulseaudio -k игнорирует либо не видит изменений в alsa?

И по поводу pulseaudio --kill && pulseaudio --start &, тут наверно вопрос стоит так поставить:

  • Кто pulseuadio использует и не пользуется DE, покажите как вы демон pulse запускаете? И запускаете ли его в обще, или он сам запускается после запуска какого-то приложения?
NK ★★★★★
() автор топика
Последнее исправление: NK (всего исправлений: 4)
Ответ на: комментарий от NK

usr/lib/systemd/user/pulseaudio.service

или если без системд

etc/xdg/autostart/pulseaudio.desktop

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

Вот так выглядят мои настройки звука, если не вдаваться в детали:

$ systemctl --user cat pulse.service 
[Unit]
Description=PulseAudio
After=jackd.service

[Service]
Type=simple
ExecStartPre=sleep 2
ExecStart=/usr/bin/pulseaudio

[Install]
WantedBy=default.target
$ cat ~/.config/pulse/client.conf 
autospawn = no
$ cat ~/.config/pulse/default.pa | egrep -v '^(#|$)'
load-module module-native-protocol-unix
load-module module-jack-sink channels=2 sink_name="p1" client_name="p1" connect=false
load-module module-jack-source channels=2 source_name="c1" client_name="c1" connect=false
$ cat ~/.asoundrc | egrep '^[^#]*pcm.!default' 
    pcm.!default {type pulse}

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

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

Общий уровень регулирую на звуковой карте на канале Master. То есть через альсу. В приложениях — либо в самом приложении, либо в pulsemixer’е, либо в джеке через jalv+плагин, но последнее очень редко бывает нужно.

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

Сам запускается по dbus. Но сам не выключается (запрещено), а то bluetooth-наушники не сразу срабатывают, если давать пульсе выключаться. Пшшшш-аудио, как оно есть.

xaizek ★★★★★
()

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

pulseaudio --start && pulseaudio --kill && pulseaudio --start &
просто если не так запускать, alsa_какой-нибудь плеер если не умеет программно звук крутить и не умеет pulse, он крутит системный звук и это нигде не отображается, вот что мне не нравится

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

Только смотреть надо до того, как ты выполняешь эту свою магию с килянием пульсы.

anonymous
()

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

Для этого в домашнем каталоге надо создать файл .asoundrc следующего содержания

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}

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

Попробовал данный конфиг и даже, не только перезапустил демон pulse, но и перезагружался, и пробовал и так-и-так запускать pulseaudio:

start-pulseaudio-x11 &
pulseaudio --start && pulseaudio --kill && pulseaudio --start &

ситуация не изменилась

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

В продолжение старта pulseaudio (9.0) через

pulseaudio --start && pulseaudio --kill && pulseaudio --start &

уже разные приложения пересмотрел для теста, на tor-browser_9.0.10 было замечено при таком старте - нет звука, на помощь пришел

  • /usr/bin/start-pulseaudio-x11 и там строчка:
/usr/bin/pactl load-module module-x11-publish "display=$DISPLAY" > /dev/null

и теперь еще строчка в autostart.sh добавилась:

pulseaudio --start && pulseaudio --kill && pulseaudio --start && \
  /usr/bin/pactl load-module module-x11-publish "display=$DISPLAY" &

вот так, звук в tor-browser будет, не знаю, может кому-то будет интересно и пригодится

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