PulseAudio (Русский)/Examples (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи PulseAudio/Examples. Дата последней синхронизации: 16 февраля 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Настройка стандартных устройств ввода

Показать доступные устройства ввода:

$ pacmd list-sources | grep -e device.string -e 'name:'
name: <input>
 device.string = "hw:2"
name: <oss_input.dsp>
 device.string = "/dev/dsp"
name: <alsa_output.pci-0000_04_01.0.analog-stereo.monitor>
name: <combined.monitor>

Чтобы установить их как устройства по умолчанию для всей системы, добавьте названия источников в файл /etc/pulse/default.pa

set-default-source alsa_output.pci-0000_04_01.0.analog-stereo.monitor

Для временного использования

$ pacmd "set-default-source alsa_output.pci-0000_04_01.0.analog-stereo.monitor"
Совет: При использовании в командах, имя устройства по умолчанию может быть заменено как @DEFAULT_SOURCE@, например: $ pactl set-source-mute @DEFAULT_SOURCE@ toggle.

Установка стандартного устройства вывода

Определите правильное имя нового источника, который содержит * в начале индекса:

$ pacmd list-sinks | grep -e 'name:' -e 'index'
  * index: 0
	name: <alsa_output.pci-0000_04_01.0.analog-stereo>
    index: 1
	name: <combined>

Для установки его как устройства по умолчанию для всей системы, добавьте следующее в /etc/pulse/default.pa

set-default-sink alsa_output.pci-0000_04_01.0.analog-stereo

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

Примечание:
  • Устройства вывода, которые установлены по умолчанию отмечены * в начале индекса.
  • Нумерация устройств вывода не гарантируется быть постоянной, поэтому все устройства вывода в файле default.pa должны быть идентифицированы по имени.
  • Для быстрой идентификации во время выполнения (например, для управления громкости звука), вы можете использовать индекс устройства вывода вместо имени устройства вывода:
    $ pactl set-sink-volume 0 +3%
    $ pactl set-sink-volume 0 -- -3%
    $ pactl set-sink-mute 0 toggle
    
  • Чтобы избежать ненужных изменений в 100% нормальном звуке, лучше использовать альтернативные утилиты менеджмента звука. См. тему на форуме (Англ.) для доп. информации

Одновременный HDMI и аналоговый вывод

PulseAudio позволяет одновременный вывод в множество источников. В этом примере, некоторые приложения настроены использовать HDMI, в то время как некоторые настроены использовать аналоговый вывод. Отправлять звук можно в несколько приложений сразу.

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC889A Analog [ALC889A Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: ALC889A Digital [ALC889A Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

Или используя команду pacmd:

$ pacmd list-sinks  | grep -e 'name:'  -e 'alsa.device ' -e 'alsa.subdevice '
	name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
		alsa.subdevice = "0"
		alsa.device = "0"

Главное в файле конфигурации вроде этого - понять, что устройство, выбранное в pavucontrol в Configuration > Internal Audio - стандартное. Используйте pavucontrol > Configuration и выберите HDMI в качестве профиля.

Чтобы установить аналоговое утройство как вторичное устройство вывода, добавьте следующее в начало конфигурационного фала /etc/pulse/default.pa, перед тем, как начнётся загрузка модулей:

### Загрузите аналогое устройство
load-module module-alsa-sink device=hw:0,0
load-module module-combine-sink sink_name=combined
set-default-sink combined

Перезапустите PulseAudio, запустите pavucontrol и выберите пункт "Output Devices". Вы должны увидеть следующие настройки:

  1. Internal Audio Digital Stereo (HDMI)
  2. Internal Audio
  3. Simultaneous output to Internal Audio Digital Stereo (HDMI), Internal Audio

Теперь запустите программу, которая будет использовать PulseAudio, такую как MPlayer, VLC, mpd, и т.д. и переключитесь во вкладку "Воспроизведение". Выпадающий список должен предоставить выбор из трёх устройств.

Так же см. этот пост и PulseAudio FAQ для вариаций по этой теме.

Настройка HDMI вывода

Как выделено в ftp://download.nvidia.com/XFree86/gpu-hdmi-audio-document/gpu-hdmi-audio.html#_issues_in_pulseaudio, пока HDMI порт - первое устройство вывода, PulseAudio не сможет использовать любое другое аудио при использовании некоторых видеокарт с поддержкой HDMI. Это происходит из-за бага PulseAudio, из-за которого он может выбрать только первый HDMI, как устройство вывода. Обход этой проблемы, написан ниже - найти, какой HDMI вывод работает с помощью aplay из ALSA.

Проблема в основном возникает с некоторыми картами от nVidia и некоторыми другими, см. эту тему на форуме

Поиск HDMI вывода

Далее найдите рабочий вывод из списка доступных карт

# aplay -l
примерный вывод:
 **** List of PLAYBACK Hardware Devices ****
 card 0: NVidia [HDA NVidia], device 0: ALC1200 Analog [ALC1200 Analog]
   Subdevices: 1/1
   Subdevice #0: subdevice #0
 card 0: NVidia [HDA NVidia], device 3: ALC1200 Digital [ALC1200 Digital]
   Subdevices: 1/1
   Subdevice #0: subdevice #0
 card 1: NVidia_1 [HDA NVidia], device 3: HDMI 0 [HDMI 0]
   Subdevices: 1/1
   Subdevice #0: subdevice #0
 card 1: NVidia_1 [HDA NVidia], device 7: HDMI 0 [HDMI 0]
   Subdevices: 0/1
   Subdevice #0: subdevice #0
 card 1: NVidia_1 [HDA NVidia], device 8: HDMI 0 [HDMI 0]
   Subdevices: 1/1
   Subdevice #0: subdevice #0
 card 1: NVidia_1 [HDA NVidia], device 9: HDMI 0 [HDMI 0]
   Subdevices: 1/1
   Subdevice #0: subdevice #0

Проверка на правильную карту

Теперь, когда у вас есть список карт, пользователям нужно проверить, какая из них выводит на ТВ/Монитор

# aplay -D plughw:1,3 /usr/share/sounds/alsa/Front_Right.wav

Где 1 - карта, а 3 - устройство-замена в предыдущих разделах. Если звука нет, попробуйте другое устройство-замену (на моей карте пришлось использовать карту 1 устройство 7)

Ручная настройка PulseAudio, чтобы он находил HDMI Nvidia

Чтобы заставить PulseAudio находить HDMI, нужно отредактировать /etc/pulse/default.pa:

# load-module module-alsa-sink device=hw:1,7

где 1 - карта, а 7 - устройство,найденное в предыдущем разделе перезапустите pulse audio

 $ pulseaudio -k
 $ pulseaudio --start

откройте менеджер настройки аудио, убедитесь в том, что во вкладке "hardware" - графическая карта с HDMI установлена как "Digital Stereo (HDMI) Output" (Моя карта называлась "GF100 High Definition Audio Controller")

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

Автоматическое переключение звука на HDMI

Создайте скрипт для переключения на желаемый профиль при присоединении кабеля HDMI:

/usr/local/bin/hdmi_sound_toggle.sh
#!/bin/bash
USER_NAME=$(w -hs | awk -v vt=tty$(fgconsole) '$0 ~ vt {print $1}')
USER_ID=$(id -u "$USER_NAME")
HDMI_STATUS=$(</sys/class/drm/card0/*HDMI*/status)

export PULSE_SERVER="unix:/run/user/"$USER_ID"/pulse/native"

if [[ $HDMI_STATUS == connected ]]
then
   sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-card-profile 0 output:hdmi-stereo+input:analog-stereo
else
   sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-card-profile 0 output:analog-stereo+input:analog-stereo
fi

Сделайте скрипт исполняемым:

chmod +x /usr/local/bin/hdmi_sound_toggle.sh

Создайте правило udev для запуска этого сценария, когда статус HDMI изменится:

Примечание: правило udev не может напрямую запустить скрипт, обойдите это воспользовавшись .service для запуска скрипта
/etc/udev/rules.d/99-hdmi_sound.rules
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/bin/systemctl start hdmi_sound_toggle.service"

И, наконец, создайте файл .service требуемый правилом udev:

/etc/systemd/system/hdmi_sound_toggle.service
[Unit]
Description=hdmi sound hotplug

[Service]
Type=simple
RemainAfterExit=no
ExecStart=/usr/local/bin/hdmi_sound_toggle.sh

[Install]
WantedBy=multi-user.target

Для того чтобы внесённые изменения вступили в силу, не забудьте перезагрузить правила udev:

udevadm control --reload-rules

Также, вам необходимо перезагрузить компоненты systemd.

systemctl daemon-reload

Может потребоваться перезагрузка.

Настройка объёмного звука

У многих людей есть звуковая карта с поддержкой объёмного звука, но устройства воспроизведения поддерживают только 2 канала. PulseAudio не может выставить звуковую настройку для объёмного звука по умолчанию. Чтобы включить все каналы, измените /etc/pulse/daemon.conf: раскомментируйте строку default-sample-channels и выставьте значение 6 для 5.1 или 8 для 7.1 и т.д.

# Стандартное
default-sample-channels=2
# Для 5.1
default-sample-channels=6
# Для 7.1
default-sample-channels=8

Если каналы неправлено назначены или регуляция звука для отдельных каналов в pavucontrol работает неправильно, и у вас есть HDMI и аналоговая звуковая карта, попробуйте добавить эту строку в /etc/pulse/default.pa

load-module module-combine channels=6 channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe

Обратите внимание, что это пример для настройки 5.1.

После этого перезапустите PulseAudio

Разделение передний/задний

Подключите устройство к переднему аналоговому выходу и наушники - к заднему. Будет полезно разделить передний/задний устройства вывода. Добавьте следующее в /etc/pulse/default.pa:

 load-module module-remap-sink sink_name=speakers remix=no master=alsa_output.pci-0000_05_00.0.analog-surround-40 channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right
 load-module module-remap-sink sink_name=headphones remix=no master=alsa_output.pci-0000_05_00.0.analog-surround-40 channels=2 master_channel_map=rear-left,rear-right channel_map=front-left,front-right

Убедитесь, что заменили alsa_output.pci-0000_05_00.0.analog-surround-40 названием своей звуковой картой, которое можно увидеть в 'pacmd list-sinks'. Теперь у вас есть 2 дополнительных устройства вывода, которые можно использовать раздельно. Вы можете подобрать название 'sink_name' сами, важно, чтобы оно не совпадало с существующими именами. Параметр 'remix' контролирует, в каком из устройств стоит поднять/опустить стандартный звук для совпадением с каналами устройств вывода.

Совет: Если pulseaudio выдаёт ошибку master sink not found - закомментируйте строку переназначения, запустите PulseAudio и проверьте, что выход вашей звуковой карты установлен на тот, что вы указали выше (напр. analog surround 4.0). Вы также можете попробовать номер устройства вывода вместо имени.

Разделение 7.1 на 5.1+2.0

По примеру выше, вы также можете поделить 7.1 на 5.1 и стерео. Установите режим карты на 7.1, затем добавьте эти строки в /etc/pulse/default.pa:

 load-module module-remap-sink sink_name=Surround remix=no master=alsa_output.pci-0000_00_14.2.analog-surround-71 channels=6 master_channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe
 load-module module-remap-sink sink_name=Stereo remix=yes master=alsa_output.pci-0000_00_14.2.analog-surround-71 channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right

Убедитесь, что заменили alsa_output.pci-0000_00_14.2 именем своей звуковой карты, которое можно получить, запустив 'pacmd list-sinks'. Эта конфигурация будет использовать передние/задние/центральные+lfe(зелёный/черный/оранжевый) разъемы для 5.1 и боковой (серый) разъем для стерео. Это также уменьшит любое аудио до стерео для стерео выхода, но не затронет 5.1.

Совет: Если pulseaudio выдаёт ошибку master sink not found - закомментируйте строку переназначения, запустите PulseAudio и проверьте, что выход вашей звуковой карты установлен на тот, что вы указали выше (напр. analog surround 4.0). Вы также можете попробовать номер устройства вывода вместо имени.

Отключение ремиксинга LFE

По умолчанию, PusleAudio преобразует число каналов в соответствии с default-sample-channels и, начиная с версии 7, также преобразует канал LFE. Если вы хотите отключить преобразование LFE, раскомментируйте строку:

; enable-lfe-remixing = yes

и замените yes на no :

enable-lfe-remixing = no

затем перезапустите PulseAudio.

Бинауральные наушники

ladspa-bs2bAUR предоставляет плагин для симуляции объемного стереозвучания в наушниках. Для его использования найдите свои наушники с помощью команды:

$ pacmd list-sinks | grep -e 'name:'
	name: <alsa_output.pci-0000_00_1b.0.iec958-ac3-surround-51>
	name: <alsa_output.pci-0000_00_1b.0.iec958-ac3-surround-51.equalizer>
	name: <bluez_sink.00_1F_82_28_93_51>

Загрузите плагин (новое sink_name задается произвольно, master=название устройства вывода (наушников)):

pacmd load-module module-ladspa-sink sink_name=binaural master=bluez_sink.00_1F_82_28_93_51 plugin=bs2b label=bs2b control=700,4.5

Используйте pavucontrol для передачи потока на новое устройство вывода или:

pactl move-sink-input $INPUTID $BINAURALSINKNAME

PulseAudio через сеть

Одна из уникальных функций PulseAudio - возможность передачи аудио от клиентов через TCP к серверу, запущенному PulseAudio демоном в локальной сети. Убедитесь, что серверная и клиентская системы синхронизированы по времени (например, посредством NTP), в противном случае аудио поток будет 'заикаться' или вовсе не работать.

Чтобы сделать это доступным, нужно включить module-native-protocol-tcp.

Поддержка TCP (звук через сеть)

Чтобы включить TCP модуль, добавьте это (или раскомментируйте, если уже есть) в /etc/pulse/default.pa на клиенте и сервере:

load-module module-native-protocol-tcp

Чтобы это работало, клиент и сервер должны разделять общий cookie. Убедитесь, что клиент и сервер разделяют один cookie файл в ~/.config/pulse/cookie. Не важно, чей файл они используют (клиента/сервера), просто удостоверьтесь, что это один и тот же файл.

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

pacmd list-modules

Поддержка TCP с анонимными клиентами

Если отсутствует возможность копировать cookie файл с клиентских машин, анонимные клиенты могут получить доступ к серверу, если добавить следующий параметр в module-native-protocol-tcp на сервере(снова в /etc/pulse/default.pa):

 load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1

Измените LAN IP подсети для клиентов, которым вы желаете предоставить доступ.

Zeroconf (Avahi)

Чтобы удалённый PulseAudio сервер появился в списке устройств PulseAudio Device Chooser (pasystray), загрузите нужные модули zeroconf и включите Avahi daemon.

Установите на клиенте и сервере pulseaudio-zeroconf.

На обеих машинах запустите и включите systemd юнит avahi-daemon.

На сервере добавьте load-module module-zeroconf-publish в файл /etc/pulse/default.pa, на клиенте - load-module module-zeroconf-discover в /etc/pulse/default.pa. Теперь перенаправьте любой поток или весь аудио выход на удаленный сервер PulseAudio, выбрав соответствующее устройство вывода.

Если вы испытываете проблемы с удаленной синхронизацией на клиентской машине, попробуйте перезапустить демон Avahi на сервере, чтобы переотправить доступные интерфейсы.

Переключение PulseAudio сервера используя локальные клиенты Х

Чтобы переключатся между серверами на клиенте в пределах X, можно использовать команду pax11publish. Например, чтобы переключится со стандартного сервера на хост foo:

$ pax11publish -e -S foo

И чтобы вернутся обратно:

$ pax11publish -e -r

Это отредактирует переменные PulseAudio в корневом окне X11, что сообщит клиентским библиотекам PulseAudio о том, что нужно соединяться с сервером PulseAudio, а не с localhost, вместо того чтобы заставлять сервер PulseAudio вещать аудио (как описано выше). Таким образом, программы больше не будут взаимодействовать с локальным процессом pulseaudio, который затем может быть остановлен. Такие программы, как pactl, pacmd или pavucontrol также необходимо будет запустить с соответствующим PULSE_SERVER окружением/переменным X, для управления удалённым сервером PulseAudio.

Обратите внимание, что переключение станет заметным, когда программы использующие Pulse будут перезапущены, или их клиентская библиотека PulseAudio переинициализирована (может быть достаточно полной остановки и перезапуска воспроизведения). Для того чтобы эти изменения оставались постоянными, отредактируйте default-server в ~/.config/pulse/client.conf или /etc/pulse/client.conf.

Выбор сервера

Запустите программу PulseAudio Volume Control pavucontrol. Во вкладке Устройства вывода вы должны увидеть список локальных и удаленных устройств вывода. На вкладке Проигрывание, слева от кнопки "X" Заглушить звук (Mute Audio), вы должны увидеть выпадающий список устройств вывода. Список содержит доступные устройства вывода, и в нем выделено текущее устройство. Переключение устройства вывода позволит аудиопотоку сменить сервер PulseAudio, связанный с этим устройством. Данное управление остается неясным до самого момента его использования, и является особенно полезным при работы с удаленным автономным звуковым сервером.

Аналогично, на вкладке Устройства ввода отображены локальные и удаленные устройства ввода. И на вкладке Запись расположен выпадающий список, содержащий доступные устройства ввода.

Для направления аудиопотока, запускайте pavucontrol локально или на удаленной машине, в зависимости от его связей. Например, запускайте pavucontrol на удаленной машине для направления аудио вывода на локальную. И запускайте pavucontrol локально для направления аудио вывода на удаленную машину.

С настройкой одновременных выводов или вводов дело обстоит иначе. Для этого ознакомьтесь с информацией о "monitor" и "module-combine-sink".

Если всё остальное не работает

Это НЕ постоянное решение, лишь временное исправление проблемы

На сервере:

 $ paprefs 

В Network Access -> Включите доступ к локальным устройствам звука (Также включите 'Allow discover' и 'Don't require authentication').

На клиенте:

 $ export PULSE_SERVER=server.ip && mplayer test.mp3

ALSA monitor source

Чтобы иметь возможность записывать из monitor source (a.k.a. "What-U-Hear", "Stereo Mix"), используйте pactl list чтобы найти имя источника в PulseAudio (напр.alsa_output.pci-0000_00_1b.0.analog-stereo.monitor). Затем добавьте следующие строки в /etc/asound.conf или ~/.asoundrc:

pcm.pulse_monitor {
  type pulse
  device alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
}

ctl.pulse_monitor {
  type pulse
  device alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
}

Теперь вы можете выбрать pulse_monitor как устройство записи.

Как альтернативу, вы можете использовать pavucontrol.Чтобы сделать это: убедитесь, что он настроен показывать ВСЕ устройства ввода, затем выберите "Monitor of [ваша звуковая карта]" как устройство записи.

Наблюдение конкретного вывода

Есть возможность наблюдать конкретный вывод, например, чтобы передавать аудио из плеера в VOIP-приложение. Просто создайте пустое устройство вывода:

pactl load-module module-null-sink sink_name=<имя>

В Настройках Звука Pulseaudio (pavucontrol), во вкладе "Playback", измените устройство вывода приложния на <имя>, и во вкладке записи измените устройство ввода приложения на "Monitor of <имя>". Теперь аудио будет поступать из одного приложения в другое.

PulseAudio через JACK

JACK Audio Connection Kit популярен для работы со звуком и широко поддерживается аудиоприложениями Linux. Он занимает совместную с PulseAudio нишу, но с акцентом в сторону профессиональной работы со звуком. Он может предложить аудиомониторинг с низкой временной задержкой вместе с большим контролем за вводом и выводом множественных звуковых устройств ввода-вывода.

Метод KXStudio

Это рекомендуемый способ, так как он был официально одобрен разработчиками JACK.

Эта настройка работает с обоими пакетами jack2-dbus и jack2.

В текущий момент JACK обладает способностью переключаться между ALSA, PulseAudio и JACK. Это дает вам возможность одновременно запускать JACK и PulseAudio и получать их вывод без каких-либо дополнительных настроек или команд терминала.

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

Начните с установки cadence из AUR или pulseaudio-jack. Как только вы установите и запустите его, в нижнем правом углу экрана должен появиться JACK bridge configuration. ALSA audio bridge следует настроить как ALSA -> PulseAudio -> JACK и включить PulseAudio bridge. Убедитесь с помощью pavucontrol, что все устройства ввода и вывода, не относящиеся к JACK, выключены (muted). Воспользуйтесь кнопкой Force Restart для запуска JACK, и, если все запустилось успешно, вывод программ PulseAudio будет перенаправлен через JACK.

Ручная настройка устройств вывода

Этот способ позволяет обеспечить одновременную работу JACK и PulseAudio и обмен выводом между собой. В этом случае используется ручная настройка систем, которая обеспечивает связь между JACK и PulseAudio. Эта конфигурация не опирается на скрипты или команды, и полностью основана на работе с настройками.

Рассматриваемый метод работает только с jackdbus (JACK2 скомпилированный с поддержкой D-Bus). Вам также потребуется пакет pulseaudio-jack. Убедитесь, что файл /etc/pulse/default.pa содержит строку:

load-module module-jackdbus-detect options

Где options может быть любой опцией, поддерживаемой этим модулем, обычно channels=2.

Как описано на странице Jack-DBUS Packaging:

Автозапуск сервера реализован в качестве вызова D-Bus, который автоматически активирует сервис JACK D-Bus, если он еще не был запущен, и запускает сервер JACK. Правильное взаимодействие с PulseAudio обеспечивается механизмом "получения/отдачи" ("acquire/release") звуковой карты, основанным на D-Bus. Когда запускается сервер JACK, он запрашивает получение звуковой карты у данного D-Bus сервиса, и PulseAudio безоговорочно отдает управление над ней. В тот момент, когда сервер JACK заканчивает свою работу, он освобождает звуковую карту, которая вновь может быть занята PulseAudio.

module-jackdbus-detect.so динамически загружает и выгружает модули module-jack-sink и module-jack-source, когда jackdbus запускается и останавливается.

Если PulseAudio не работает, проверьте с помощью pavucontrol, появились ли соответствующие программы на вкладке воспроизведения. Если нет, то добавьте следующее в файл ~/.asoundrc или /etc/asound.conf для перенаправления ALSA на PulseAudio:

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

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

В случае, если он все также не работает, проверьте с помощью pavucontrol вкладку воспроизведения и убедитесь, что соответствующие программы осуществляют вывод через PulseAudio JACK Sink, а не через звуковую карту (которую в текущий момент контролирует JACK, и это не сработает). Также убедитесь, что на графике JACK PulseAudio JACK Source соединен с системным аудио выходом.

Настройка с помощью скриптов

Этот способ позволяет JACK и PulseAudio осуществлять вывод одновременно. Основной упор здесь делается на использование скриптов, автоматически запускаемых QJackCTL, для управления особенностями поведения устройств вывода JACK и PulseAudio.

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

Пошагово наши действия можно расписать так:

  1. PulseAudio освобождает звуковую карту
  2. запускается JACK и принимает управление звуковой картой на себя
  3. скрипт перенаправляет PulseAudio на JACK
  4. приложения PulseAudio вручную направляются на вывод JACK (pavucontrol может помочь справится с данной задачей)
  5. используются требуемые приложения JACK
  6. скриптом происходит остановка перенаправления PulseAudio на JACK
  7. останавливается JACK и освобождается звуковая карта
  8. PulseAudio возвращает управление звуковой картой и перенаправляет звук на нее напрямую

С помощью QJackCTL настройте следующие скрипты:

pulse-jack-pre-start.sh скрипт должен быть настроен как исполняемый и выполняться из скрипта запуска системы

#!/bin/bash
pacmd suspend true

pulse-jack-post-start.sh также нужно сделать исполняемым и выполнять после запуска системы

#!/bin/bash
pactl load-module module-jack-sink channels=2
pactl load-module module-jack-source channels=2
pacmd set-default-sink jack_out
pacmd set-default-source jack_in

pulse-jack-pre-stop.sh "должен выполняться при выключении системы"

#!/bin/bash
SINKID=$(pactl list | grep -B 1 "Name: module-jack-sink" | grep Module | sed 's/[^0-9]//g')
SOURCEID=$(pactl list | grep -B 1 "Name: module-jack-source" | grep Module | sed 's/[^0-9]//g')
pactl unload-module $SINKID
pactl unload-module $SOURCEID
sleep 5

pulse-jack-post-stop.sh "должен выполняться после выключения системы"

#!/bin/bash
pacmd suspend false

Путем остановки PulseAudio

Этот способ основывается на скрипте, который автоматически прерывает выполнение PulseAudio, когда запускается JACK, и автоматически запускает PulseAudio, когда JACK завершает работу. Такой подход дает выигрыш в производительности за счет меньшей нагрузки на ЦПУ, в отличии от вариантов, в которых запущены обе программы. Но он может приводить к ошибкам в запущенных приложениях, использующих PulseAudio, и не позволяет осуществлять одновременный вывод (с JACK и PulseAudio).

При использовании предыдущего метода, применяется QjackCtl для выполнения скриптов загрузки/выгрузки PulseAudio во время запуска и остановки системы. Это приводит к выключению модулей PulseAudio, которые отвечают за автоматическое распознавание аппаратных устройств, и может стать одной из причин, по которой пользователи могут захотеть воспользоваться текущим вариантом. Рассматриваемая настройка подготовлена для связки PulseAudio и JACK, хотя и может быть изменена для загрузки/выгрузки иных не-JACK конфигураций, но корректный запуск/остановка PulseAudio при использовании его программами может стать проблемой.

Примечание: padevchooser в следующем примере устарел. Он был заменен pasystray

Следующий пример можно использовать и изменять, при необходимости, как стартовый скрипт, запускающий демон PulseAudio и загружающий программу padevchooser (при необходимости, требуется сборка из AUR). Назовем его jack_startup:

#!/bin/bash	
#Load PulseAudio and PulseAudio Device Chooser
pulseaudio -D
padevchooser&

Аналогичный скрипт для остановки PulseAudio и Pulse Audio Device Chooser, который назовем jack_shutdown и также разместим в домашней директории:

#!/bin/bash	
#Kill PulseAudio and PulseAudio Device Chooser		
pulseaudio --kill	
killall padevchooser	

Оба скрипта сделаем исполняемыми:

chmod +x jack_startup jack_shutdown

затем запустим QjackCtl, нажмем на кнопку Setup и перейдем на вкладку Options, где отметим обе опции "Execute Script after Startup:" и "Execute Script on Shutdown:", в которые добавим адреса до наших скриптов (с помощью кнопки ... или вписав путь до файлов) ~/jack_startup и ~/jack_shutdown, при условии, что они располагаются в домашней директории. Сохраним изменения.

PulseAudio через OSS

Добавьте следующее в /etc/pulse/default.pa:

load-module module-oss

Затем запустите PulseAudio как обычно, убедитесь что все источники объявлены для OSS усройств.

Запуск PulseAudio из chroot

Так как chroot представляет собственный root для запуска/остановки приложений, PulseAudio должен быть установлен из самого chroot (pacman -S pulseaudio в окружении chroot).

PulseAudio, если не настроен на подключения к конкретному серверу (это можно сделать в /etc/pulse/client.conf, через переменную окружения PULSE_SERVER, или через локальные настройки X11, используя module-x11-publish), будет пытаться подключится к локальному pulse серверу, если у него не получится - он создаст новый. Каждый pulse сервер имеет уникальный ID, основанный на машинном id значении в /var/lib/dbus. Чтобы дать приложениям из chroot доступ к pulse серверу, следующие директории должны быть смонтированный в chroot:-

/run
/var/lib/dbus
/tmp
~/config/.pulse

/dev/shm также должен быть смонтирован для эффективного использования. Заметьте, что монтирование /home также обычно означает общий доступ к каталогу ~/.pulse.

PulseAduio выберет путь к сокету через XDG_RUNTIME_DIR, так что удостовертесь что перенесли его тоже с помощью sudo, когда используете chroot (см. Sudo#Environment variables).

Отключение автоматического запуска сервера PulseAudio

Некоторые пользователи предпочитают вручную запускать сервер PulseAudio, перед запуском определенных программ, а затем останавливать сервер PulseAudio, когда они завершены. Для достижения такого результата, отредактируйте ~/.config/pulse/client.conf или /etc/pulse/client.conf и измените autospawn = yes на autospawn = no. Убедитесь что строка не закомментирована.

/etc/pulse/client.conf
autospawn = no

Теперь вы можете вручную запустить PulseAudio сервер командой

$ pulseaudio --start

И остановить его

$ pulseaudio --kill

Этот параметр также учитывается стандартным скриптом pulseaudio при запуске сеанса рабочего стола start-pulseaudio-x11 который выполняется из /etc/xdg/autostart/pulseaudio.desktop.

Отключение демона pulseaudio полностью

Чтобы отключить демон PulseAudio полностью, и тем самым предотвратить его запуск, добавьте daemon-binary=/bin/true в файл настроек.

~/.config/pulse/client.conf #or /etc/pulse/client.conf
daemon-binary=/bin/true

Изменить стерео на моно

Изменить стерео устройство вывода на моно устройство вывода можно путём создания виртуального устройства вывода. Это будет полезно если у вас только один динамик. Добавьте в /etc/pulse/default.pa:

load-module module-remap-sink master=alsa_output.pci-0000_00_1f.5.analog-stereo sink_name=mono channels=2 channel_map=mono,mono
# Optional: Select new remap as default
set-default-sink mono

(замените имя звуковой карты alsa_output.pci-0000_00_1f.5.analog-stereo показанным в pacmd list-sinks)

Переключайтесь между виртуальным моно устройством и настоящим стерео устройством.

Поменять левый/правый каналы

Это тоже самое, что инвертировать стерео, когда левый и правый канал меняются местами.

Во-первых, определите звуковую карту, в которой вы хотите произвести изменение:

$ cat /proc/asound/cards

и запомните строку с именем для устройства, которое вы хотите использовать (оно заключено в квадратные скобки, например [Intel]).

Отредактируйте /etc/pulse/default.pa и закомментируйте строки, которые содержат module-hal-detect и module-detect.

Найдите закомментированную строку, которая начинается с "#load-module module-alsa-sink", раскомментируйте ее и измените на

load-module module-alsa-sink device=hw:[device name] channel_map=right,left

Перезапустите демон PulseAudio

pulseaudio -k; pulseaudio -D

Документация переназначения модуля устройства

PulseAudio в качестве ненавязчивого проводника ALSA

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

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

Сам демон использует простую статическую настройку, которая использует только настроенные вами pcm.!default устройства ALSA. Никаких замен ALSA, никаких игр с уровнями микшера, ничего, кроме записи/воспроизведения. Также убедитесь, что pulseaudio-alsa не установлен, так как стандартные клиенты ALSA по умолчанию не привязаны к Pulse. Функции alsamixer продолжают работать должным образом, как и любые другие клиенты ALSA . Также убедитесь, что общие фрэймворки, как Xine, Gstreamer и Phonon настроены на использование ALSA: по умолчанию, если они обнаружат установленный PulseAudio, они будут пытаться использовать его перед ALSA.

/etc/pulse/daemon.conf
# Replace these with the proper values
exit-idle-time = 0 # Exit as soon as unneeded
flat-volumes = yes # Prevent messing with the master volume
/etc/pulse/client.conf
# Replace these with the proper values

# Applications that uses PulseAudio *directly* will spawn it,
# use it, and pulse will exit itself when done because of the
# exit-idle-time setting in daemon.conf
autospawn = yes
/etc/pulse/default.pa
# Replace the *entire* content of this file with these few lines and
# read the comments

.fail
    # Set tsched=0 here if you experience glitchy playback. This will
    # revert back to interrupt-based scheduling and should fix it.
    #
    # Replace the device= part if you want pulse to use a specific device
    # such as "dmix" and "dsnoop" so it doesn't lock an hw: device.
    
    # INPUT/RECORD
    load-module module-alsa-source device="default" tsched=1
    
    # OUTPUT/PLAYBACK
    load-module module-alsa-sink device="default" tsched=1 
    
    # Accept clients -- very important
    load-module module-native-protocol-unix

.nofail
.ifexists module-x11-publish.so
    # Publish to X11 so the clients know how to connect to Pulse. Will
    # clear itself on unload.
    load-module module-x11-publish
.endif

Наушники и колонки подключены одновременно и переключаются приложением на лету

Pulseaudio устроен так, что он автоматически отключает Line Out, когда подключены наушники и начинает использовать их ползунок для управления. Подобное поведение вы можете наблюдать в alsamixer. Мы же хотим разделить управление наушников и Line Out, и заставить их работать одновременно. Это очень полезно в том случае, если вы хотите переназначить гнезда Realtek, например, зеленое использовать для наушников, а голубое - для динамиков (при помощи hdajackretask из alsa-tools).

Для этого вам потребуется отредактировать непосредственно конфигурацию Pulseaudio mixer:

1. Мы сообщаем pulseaudio, что наушники всегда подключены. Редактируем:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-lineout.conf

Находим:

[Jack Headphone]
state.plugged = no
state.unplugged = unknown

Изменяем no на yes

2. По умолчанию, громкость Line Out управляется только через Master, а не через ползунок Line Out. Мы хотим соединить Line Out с Master.

Добавьте этот блок в конец файла:

[Element Line Out]
switch = mute
volume = merge

3. Нам нужно полностью отключать Line Out, когда мы используем наушники. Редактируем:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-headphones.conf

Добавляем блок в конец файла:

[Element Line Out]
switch = off
volume = off

4. Как и Pulseaudio, Alsa самостоятельно отключает динамики, когда подключаются наушники. Откройте alsamixer (для Realtek HDA alsamixer -c0) и измените Auto-Mute mode на disabled.

5. Перезапустите Pulseaudio

$ pulseaudio -k
$ pulseaudio --start

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

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

Иногда желательно запускать программы как другой пользователь, находясь в системе как основной пользователь, например, для изоляции программы. Тем не менее, PulseAudio по умолчанию не будет поддерживать соединения второго пользователя, поскольку демон PulseAudio уже запущен для основного. Но может быть создан сокет PulseAudio UNIX для поддержки соединений других пользователей демоном PulseAudio, запущенным основным пользователем.

Во-первых, отредактируйте файл /etc/pulse/default.pa или ~/.config/pulse/default.pa и добавьте указание для создания unix сокета:

~/.config/pulse/default.pa
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket

Затем, укажите PulseAudio в качестве клиента для сокета UNIX, только что созданного вторым пользователем:

/home/secondaryuser/.config/pulse/client.conf
default-server = unix:/tmp/pulse-socket

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