Содержание

Кратко о PulseAudio

Обзор хорошо написан в википедии.
Cводный список основных отличий от Alsa:

  1. PulseAudio — «слой звуковой абстракции», принимающий звуковой поток от приложений и передающий его Alsa;
  2. PulseAudio оперирует объектами и позволяет перенаправлять звуковой поток между ними (роутинг);
  3. PulseAudio — демон, обычно запускаемый от имени пользователя;
  4. Позволяет передавать звук по сети и «расшаривать» микрофоны, установленные на других компьютерах. Теперь при отключении USB-колонки ни одна прога не подвиснет, а будет переброшена на другую доступную карту.

Установка Pulseaudio 2.0

На данный момент (6.08.2012) в репозиториях Ubuntu 12.04 лежит пакет pulseaudio версии 1.1, тем временем уже давно доступна версия 2.0, поэтому если у вас есть какие либо проблемы со звуком, есть смысл попробовать установить более новую версию. Улучшения описаны на официальном сайте(eng).

sudo add-apt-repository ppa:ubuntu-audio-dev/ppa
sudo apt-get update && sudo apt-get upgrade

для восстановления предыдущей версии:

sudo apt-get install ppa-purge && sudo ppa-purge ppa:ubuntu-audio-dev

Заикается звук в skype

Проблема со skype и pulseaudio.
На старом проце (AMD Athlon™ XP 1500+), звук в скайпе сильно квакает.
Процессор нагружен на 100%.
Долго разбирался, в результате нашёл инструкцию http://pc-freak.net/blog/fix-to-gnome-pulseaudio-server-crappy-sound-on-debian-gnu-linux-pulseaudio-debian-workaround/
Продублирую:
прописываем в файле /etc/pulse/daemon.conf

default-fragments = 8
default-fragment-size-msec = 5

ставим пакет sudo apt-get install paprefs
после установки запускаем от имени простого пользователя,
На закладке Simultaneous output
ставим галку «Add virtual output device for simultaneous output on all local sound cards»

перезапускаем

pulseaudio -k

если не поможет попробуйте дополнительно прописать в файле /etc/pulse/daemon.conf следующие настройки.

enable-shm = yes
shm-size-bytes = 0
high-priority = yes
nice-level = -11
realtime-scheduling = yes
realtime-priority = 5

и снова перезапускаем

pulseaudio -k

Замечено, что чем меньше клиентов у pulseaudio тем лучше он работает, не зависимо от нагрузки процессора.
Поэтому, особенно на слабых процессорах, когда разговариваете по skype рекомендую закрывать других клиентов.
Таким клиентами являются: видео проигрыватель, музыкальный проигрыватель и даже pavucontrol.

Основные понятия PulseAudio

Card, Sink & Source

Известно, что у звуковой карты два типа гнёзд: входы (line in, микрофон) и выходы (наушники, line out, S/PDIF). В типовой конфигурации для каждой имеющейся звуковой карты и её «гнёзд» PulseAudio создаёт следующие объекты:

  • Card. Объект представляет физическую звуковую карту со всеми её входами и выходами;
  • Sink (англ. низина) — «сток», принимающий звуковой поток. Представляет выход звуковой карты: линейный выход, наушники, колонки ноутбука;
  • Source (англ. источник) — источник звука, создающий звуковой поток. Представляет вход звуковой карты: линейный вход, микрофон.

В PulseAudio задаётся «default Sink» и «default Source»: объекты, используемые по умолчанию для свежезапущенных приложений. Замечу, что Sink не обязательно должен описывать физический порт звуковой карты: это абстракция приёмника потока звука. PulseAudio — штука высокоуровневая и позволяет создавать весьма «хитрые» объекты: например, Sink типа 'NULL' (реализуемый модулем PulseAudio module-null-sink) просто поглотит звук, а модуль module-pipe-sink позволит передавать звуковой поток через файл FIFO. Также можно создавать сетевые Sink'и, ведущие multicast-вещание или передающие звуковой поток определённому хосту. Всё это реализуется модулями PulseAudio.

Итак, звук проигрывается через «Sink», а записывается через «Source».

Sink-Input & Source-Output

  • Sink-Input Когда приложение, поддерживающее PulseAudio, собирается проигрывать звук — оно направляет свой вывод в один из объявленных Sink'ов и становится «входом Sink'a»: Sink Input. Приложение может создавать несколько потоков вывода, создавая отдельные Sink-Input'ы для каждого потока.
  • Source-Output. Если же приложение собирается принимать звук из некоторого Source (звукозапись) — оно становится «выходом Source'а»: Source-Output.

Каждый Sink-Input по умолчанию связываться с одним из Sink'ов и передаёт звуковой поток. PulseAudio далее определяет с чем связан Sink (например, звуковая карта) и передаёт его по назначению. Существует особый тип Source'а: Monitor. Для каждого Sink'а может быть создан отдельный монитор, позволяющий вести запись. Так, получается запись «звука из колонок».

Итак, медиаплеер создаёт Sink-Input, а Skype — и Sink-Input, и Source-Output.

module, client, sample

В рамках статьи — чисто информационные :)

  • Module. Загруженный модуль PulseAudio. Например, загрузка module-alsa-sink с заданием пераметров, указывающих на устройство Alsa — создаст Sink, связанный с этим устройством. Существуют и другие модули, создающие объекты PulseAudio, позволяющие управлять им, использовать FIFO для обмена звуковым потоком и многое другое;
  • Client. Приложение, подключившееся к PulseAudio. Может создавать потоки Sink-Input и Source-Output и управлять демоном PulseAudio.

Sample. Звуковой сэмпл, загруженный в PulseAudio для быстрого воспроизведения. Может использоваться для проигрывания стандартных звуков. Например, x11 bell. Могут проигрываться по команде от модуля, клиента или из консоли.

ALSA → PulseAudio

Конечно же, сперва нужно убедиться что PulseAudio установлен и запущен:

sudo apt-get install pulseaudio
pulseaudio --start -D

Далеко не каждое приложение умеет работать с PulseAudio напрямую: обычно они умеют использовать Alsa. Для таких приложений нужно сообщить, чтобы Alsa перенаправляла их звуковые потоки к PulseAudio. Для этого в файл ~/.asoundrc вставляем следующие строки (Которые, кстати, вылечат микрофон Skype'а! если ещё отключить «Позволить скайп автоматически подстраивать громкость»):

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

Первые две строки создадут виртуальные устройства ALSA с именем 'pulse' для ввода и вывода, а также устройство контроля (громкости). Следующие две — определяют их как «по умолчанию»: теперь все приложения вместо Alsa будут использовать PulseAudio через специальный плагин (и ничего не подозревать). Для применения измений нужно перезапустить звуковые приложения. Свежезапущенные приложения подхватят изменения сами. Приложения, использующие OSS (/dev/dsp), нужно запускать через враппер

padsp [options] PROGRAM [ARGUMENTS ...]

Программы управления Pulseaudio

GUI инструменты

Если Вы читаете эту статью чтобы решить пару нюансов и не вникать — рекомендуется попробовать GUI-tools, описанные на странице PulseAudio. С помощью pavucontrol можно будет быстро выбрать устройство записи «по умолчанию» (Input Devices, кнопка справа «Set as fallback») и Skype будет работать :) Также pavucontrol позволяет управлять громкостью общей и отдельных приложений.

veromix

Многофункциональный микшер для звукового сервера PulseAudio, имеющий Python / GTK и QT (pyqt) графический интерфейс. Позволяет управлять LADSPA плагинами. Установка через Центр приложений Ubuntu или через консоль:

sudo apt install veromix

Консольные инструменты

pactl

Управление PulseAudio осуществляется с помощью команды pactl, про которую нельзя сказать что она удобная и продвинутая :) однако тренироваться будем с ней.

pacmd

Кроме pactl существует другая утилита для управления PulseAudio: pacmd. Если к PulseAudio подключен модуль module-cli-protocol — создаётся UNIX-сокет на котором висит PulseAudio-shell. Это во многом похоже на telnet. Шелл принимает текстовые команды и исполняет их. pacmd help покажет список доступных команд.
Проблема в том, что pactl умеет не всё, а pacmd не так удобен в использовании. В дальнейшем будем придерживаться pactl, однако если его функционала не хватит — используем pacmd.

patricks

Утилита для управления демоном PulseAudio :)

Особенности:

  • Короткие, интуитивные команды
  • Дозированная подача информации командой ls: теперь в терминал не будет вываливаться тонна информации (особенно properties)
  • Все объекты — в том числе порты и профайлы — можно задавать как по имени, так и по индексу
  • Команда set sink 0 port next — можно не гадать номер порта и просто переключиться на следующий. Удобно для хоткея.
  • Наличие команды mv sink 0 all для перемещения всех звуковых потоков в нужный Sink (USB-Колонка)

Полакомиться можно на GitHub: ootync/Patricks (файлы скрипта положить куда-нибудь и сделать симлинк на patricks.php)

Пример работы: Посмотреть список Sink'ов. Текущий Sink выделен символом >:

ootync@rtfm ~ $ patricks ls sinks
>Sink#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
 Sink#1 <alsa_output.pci-0000_00_2b.0.hdmi-stereo>

Внимательнее присмотретсья к Sink #0:

ootync@rtfm ~ $ patricks ls sink 0
Sink#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
Is Default: yes
Description: Internal Audio Analog Stereo
State: RUNNING
Driver: module-alsa-card.c
Owner Module: Module#4 <module-alsa-card>
Sample Spec: s16le 44100ch 2Hz
Channel Map: front-left, front-right
Mute: no
Volume: 25%
Base Volume: 100
Latency: 199703
Configured Latency: 210000
Flags: HARDWARE, HW_MUTE_CTRL, HW_VOLUME_CTRL, DECIBEL_VOLUME, LATENCY
Ports: analog-output, analog-output-headphones
Active Port: analog-output
Monitor Source: Source#0 <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
Id: 0
Name: alsa_output.pci-0000_00_1b.0.analog-stereo
Proplist: 33 items

Внимательнее посмотреть на список портов Sink #0:

ootync@rtfm ~ $ patricks ls sink 0 ports
>#0 analog-output: "Analog Output" prio=9900
 #1 analog-output-headphones: "Analog Headphones" prio=9000

Переключить Sink #0 на следующий порт

ootync@rtfm ~ $ patricks set sink 0 port next
Sink#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>: analog-output-headphones

Перекинуть все Sink-Input'ы на следующий Sink (например, свежеподключенную USB-колонку)

ootync@rtfm ~ $ patricks mv sink next all
Moving 1 inputs {65} to sink "alsa_output.pci-0000_00_1b.0.analog-stereo"...
Sink#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>: default sink

Настройка

Обзор

Для начала давайте посмотрим что у нас есть: какие объекты определены в PulseAudio. Рекомендую запустить фоновую музыку чтобы было на что смотреть Команда

pactl list

покажет длинный список существующих объектов.
У каждого объекта есть набор описывающих его полей, а также специальное поле «Properties»: список key-value свойств (обычно строковых).
У всех объектов есть index (Sink #0) — уникальный номер объекта определённого типа. Также многие объекты имеют имена (Name: ): index и Name можно использовать для обращения к конкретному объекту.

Рекомендую присмотреться к полям объектов Sink и Source: по умолчанию они описывают Ваше железо. Покажу свой пример:

Sink #1 — Sink: вопроизводит звук
        State: RUNNING — Sink работает: через него проигрывается музыка
        Name: alsa_output.pci-0000_00_1b.0.analog-stereo — Уникальное имя Sink'а
        Description: Internal Audio Analog Stereo — Текстовое описание Sink'а
        Driver: module-alsa-card.c — Используемый "драйвер": модуль PulseAudio, создавший этот Sink
        Sample Specification: s16le 2ch 44100Hz — Параметры дискретизации, количество каналов, кодирование.
        Channel Map: front-left,front-right — Звуковые каналы
        Owner Module: 5 — index модуля, создавшего этот Sink
        Mute: no
        Volume: 0:  26% 1:  26% — Громкость обоих каналов
                0: -35.42 dB 1: -35.42 dB
                balance 0.00
        Base Volume: 100% — "Базовая громкость": указывает на некоторую "неусиленную" громкость устройства вывода
                     0.00 dB
        Monitor Source: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor — Имя "монитора", связанного с этим Sink
                                                        (виртуальный Source: позволяет писать "звук с колонок")
        Latency: 161458 usec, configured 210000 usec — Параметры звукового лага
        Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY 
        Properties: ... — Всякие свойства. Там можно увидеть имя устройства Alsa, куда этот Sink отдаёт звук
        Ports: — Порты Sink'а: соответствуют физическим портам звуковой карты
                analog-output: Analog Output (priority. 9900) — Выход наушников
                analog-output-speaker: Analog Speakers (priority. 10000) — Колонки ноутбука
        Active Port: analog-output-speaker — Текущий выбранный порт: музыка у меня играет из колонок ноута.
Card #1 — Физическая звуковая карта
        Name: alsa_card.pci-0000_00_1b.0
        Driver: module-alsa-card.c
        Owner Module: 5
        Properties: ...
        Profiles: — Профили звуковой карты: выбранный пресет маппинга физических портов. 
                output:analog-stereo: Analog Stereo Output (sinks: 1, sources: 0, priority. 6000)
                output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (sinks: 1, sources: 1, priority. 6060)
                output:iec958-stereo: Digital Stereo Duplex (IEC958) (sinks: 1, sources: 0, priority. 5500)
                output:iec958-stereo+input:analog-stereo: Digital Stereo (IEC958) Output + Analog Stereo Input (sinks: 1, sources: 1, priority. 5560)
                input:analog-stereo: Analog Stereo Input (sinks: 0, sources: 1, priority. 60)
                off: Off (sinks: 0, sources: 0, priority. 0)
        Active Profile: output:analog-stereo+input:analog-stereo
Source #1 — Source: позволяет записывать звук
        State: IDLE — Source бездействует: я ничего не записываю :)
        Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
        Description: Monitor of Internal Audio Analog Stereo
        Driver: module-alsa-card.c
        Sample Specification: s16le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 5
        Mute: no
        Volume: 0: 100% 1: 100%
                0: 0.00 dB 1: 0.00 dB
                balance 0.00
        Base Volume: 100%
                     0.00 dB
        Monitor of Sink: alsa_output.pci-0000_00_1b.0.analog-stereo — Этот Source создан как монитор 1го Sink'а:
                                                 из него можно записывать то что слышно из колонок
        Latency: 0 usec, configured 1999818 usec
        Flags: DECIBEL_VOLUME LATENCY 
        Properties: ...

Card Profile: маппинг портов звуковой карты

У звуковой карты ограниченное количество разъёмов, а применений им может найтись масса: можно задействовать все под вывод звука 5.1 и оставить один для микрофона; или же оставить один джек под стерео-выход, зато получить входы для микрофона и линейный; или…
Увы, магия здесь не прокатит: наборы предустановлены производителем. Их список можно посмотреть в поле «Profiles» объекта «Card». Для каждого профиля задаётся приоритет (priority): число, определяющее «степень привлекательности» именно этого профайла. По умолчанию PulseAudio выбирает профайл с наибольшим приоритетом. Для каждого профайла указывается сколько Sink'ов и Source'ов он породит если его выбрать: sinks: 1, sources: 0.

На данный момент нельзя изменить приоритеты, однако можно выбрать тот или иной профиль. Подсматриваем в выводе pactl list имя карты и профиля, и выбираем:

pactl set-card-profile 'alsa_card.pci-0000_00_1b.0' 'output:analog-stereo+input:analog-stereo'

Всё, порты карты переназначены. Можно вообще выключить все разъёмы, выбрав профайл «off»:

pactl set-card-profile 'alsa_card.pci-0000_00_1b.0' 'off'

Sink Port: переключение звука на наушники

У одного Sink'а может быть несколько звуковых портов. Например, Sink созданный на основе звуковой карты ноутбука, может иметь два порта: встроенные колонки и выход на наушники. Текущий порт Sink'а можно посмотреть в его поле Active Port: analog-output-speaker. Глядя на список Ports нужного объекта Sink, назначаем порт:

pactl set-sink-port 'alsa_output.pci-0000_00_1b.0.analog-stereo' 'analog-output'

и звук моментально перебрасывается на наушники, отключая колонки.
Аналогично для Source. Возможно, Ваш микрофон не работает в Skype именно из-за того что выбран не тот порт записи :)

Default Sink: звуковой выход по умолчанию

PulseAudio метит один из Sink'ов как «по умолчанию»: новые запущенные приложения по умолчанию будут проигрываться через него. Другими словами, если приложение при создании Sink-Input'а не выбирает Sink самостоятельно (например, из пользовательских настроек) — выбирается default-sink. Sink по умолчанию можно посмотреть выполнив команду pactl stat:

$ pactl stat
...
Default Sink: alsa_output.pci-0000_00_1b.0.analog-stereo
Default Source: alsa_input.usb-046d_0802_0825F490-02-U0x46d0x802.analog-mono

Изменим его: смотрим имя нужного Sink'а и пишем:

pacmd set-default-sink '1'

Обратите внимание что pacmd в некоторых случаях позволяет использовать номера вместо длинных имён. Аналогично для Source. Кстати, неверно выбранный default-Source тоже может не давать общаться в Skype :)

Move Sink-Input: перемещение звукового потока

Этим действием можно перекинуть Sink-Input с одного Sink'а на другой. Таким образом можно перебросить музыку на только что подключенную USB-колонку. Смотрим имена двух Sink'ов, находим нужный Sink-Input и пишем:

pactl move-sink-input 16 '1'

и звук Sink-Input#16 моментально переключается на Sink #1. Это может быть USB-колонка. Увы, перебросить сразу все Sink-Input'ы с помощью pactl или pacmd нельзя. В конце статьи будет решение. Source-Output также можно переключать между Source'ами.

Управление громкостью

Громкость в PulseAudio задаётся численно: 0..65535 (соответствует 0% и 100%), а также — сюрприз! — значения большие чем 100% вызывают усиление сигнала что незаменимо при просмотре фильмов с ненормализованной громкостью. Здесь можно использовать index Sink'а:

pactl set-sink-volume '1' 100 # очень тихо! 100/65535 = 0,15%
pactl set-sink-volume '1' 65535 # 100%
pactl set-sink-volume '1' 78642 # 120% — усиление
pactl set-sink-mute '1' true # соседи могут засыпать

Усиление может вызывать clipping: всем известный «дребезг». Аналогично можно управлять громкостью Source'ов. UPD: с версии 0.9.15 появилась фича «FLAT_VOLUME» (её можно увидеть в Sink 'Flags'). При наличии этого флага громкость Sink'а автоматически устанавливается как максимальная громкость всех Sink-Input'ов. Отключить её можно так: echo «flat-volumes = no» » /etc/pulse/daemon.conf

Громкость приложений

С появлением Windows7 линуксоиды, не знакомые с PulseAudio, обзавидовались возможности регулировать громкость отдельных приложений :) Теперь это возможно: смотрим index нужного Sink-Input'а и усиливаем отдельное приложение:

pactl set-sink-input-volume '16' 80000

Приостановка

Sink и Source можно «приостановить»:

pactl suspend-sink '1'

Конфиг

Когда Вам в голову придёт мысль добавить одну из этих команд в автозагрузку — немедленно выбросьте её! В таких случаях нужно использовать файл конфигурации PulseAudio. Пример можно найти в файле /etc/pulse/default.pa. Обратите внимание на shebang #!/usr/bin/pulseaudio -nF: это скрипт, синтаксис которого очень похож на команды, которые понимаем pacmd. Для самообразования: pacmd — Запускает интерактивную консоль PulseAudio
pacmd help — список команд, на оффсайте
Модули PulseAudio

Звуковой сервер

Одна из интереснейших возможностей аудиосервера pulseaudio — это передача аудиопотока по сети на удалённые аудиоустройства. В общем случае- это сервер с подключенными колонками.
В результате Вы получаете полностью отвязанный от проводов1) ноутбук, воспроизводящий звук при просмотре любимых фильмов на большую акустическую систему.
Для прослушивания музыки данный способ не рекомендуется, проще и качественнее использовать mpd на сервере плюс какой любо клиент на ноутбуке.

Настройка клиента

Настройка клиента тривиальна. Раньше для выбора сервера для воспроизведения использовалась утилита padevchooser, теперь этот проект заброшен и ему на смену пришел пакет pasystray.
Для его установки необходимо добавить сторонний PPA ppa:christoph-gysin/pasystray.

sudo apt-add-repository ppa:christoph-gysin/pasystray
sudo apt-get update
sudo apt-get install pasystray

Pasystray не запустится, если у вас не запущен avahi-daemon, данная служба необходима, как раз, для сканирования локальной сети на предмет наличия общедоступных сервисов. Поэтому если вы её, по каким либо причинам удаляли, то необходимо установить:

sudo apt-get install avahi-daemon

Необходимо добавить запись Pasystray в whitelist панели unity для того, что бы иконка могла отображаться.
С помощью данной утилиты вы можете выбрать сервер pulseaudio, доступный в текущей сети (пункт меню Default Server), и управлять основными его функциями (для этого в меню предусмотрены специальные пункты, и если какие либо из них не доступны, значит в вашей системе не установлены приложения, которые для них требуются) Manager…- запускает paman
Volume Control…- запускает pavucontrol
Volume Meter()…- запускает pavumeter

В стандартных наборах иконок нет иконки для pasystray, поэтому на панели она может выбиваться из общего стиля, для замены необходимо создать символьную ссылку, например так:
Для AwOken
 sudo ln -s /usr/share/icons/AwOken/clear/24x24/apps/covergloobus.png /usr/share/icons/AwOken/clear/24x24/apps/pasystray.png

Для Faenza-Ambiance (светлая панель)

 sudo ln -s /usr/share/icons/Faenza/status/24/covergloobus-panel.png /usr/share/icons/Faenza/status/24/pasystray.png

Для Faenza-Radiance (темная панель)

 sudo ln -s /usr/share/icons/Faenza-Dark/status/24/covergloobus-panel.png /usr/share/icons/Faenza-Dark/status/24/pasystray.png

</note>

Настройка сервера

  1. Ставим Avahi, если не стоит:
    sudo apt-get install avahi-daemon

  2. Нам необходим pulseaudio и модуль, автоматически размещающий данные о наличии аудиосервера в локальной сети через службу Avahi.

    sudo apt-get install pulseaudio pulseaudio-module-zeroconf esound

  3. Создадим группу audio, участники которой имеют право доступа к аудиоустройствам:

    sudo groupadd audio

  4. Добавим себя в эту группу:

    sudo gpasswd -a user audio

  5. Добавим себя ещё и в эту группу, для доступа к pulseaudio:

    sudo gpasswd -a user pulse-access

  6. Поставим alsa.

    sudo apt-get install alsa libasound2-plugins

  7. Убедимся, что вам доступны аудиоустройства. Эта комманда покажет список доступных устройств в системе.

    aplay -l

  8. Подправим конфиг pulseaudio:

    sudo nano /etc/pulse/default.pa

    Для доступа из сети к аудиосерверу раскомментируете три строки и добавьте параметры загрузки модулей module-esound-protocol-tcp и module-native-protocol-tcp:

    ### Network access (may be configured with paprefs, so leave this commented
    ### here if you plan to use paprefs)
    load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
    load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
    load-module module-zeroconf-publish

    где 127.0.0.1;192.168.0.0/16 — это сети, в которых будет доступен наш сервер2). По умолчанию pulseaudio слушает порт 4317, если вы изменяли настройки iptables, не забудьте его открыть3).
    С конфигом всё.

  9. Перезагружаем сервер. Если все прошло успешно — то сервер должен появится в pasystray в пункте Default Server у клиента4).

    pulseaudio -D

    Остановить так:

    pulseaudio -k

  10. Теперь можно добавить службу pulseaudio в автозагрузку.
    Если у вас на сервере так же работает mpd, то можно сконфигурировать его на использование выхода- pulseaudio, и тогда он будет сам запускать сервер при старте, таким образом в автозагрузку служб можно будет добавить только mpd. Так же плюсом данного способа будет то, что звук в mpd и приложениях, использующих перенаправление звука, будет выровнена громкость.

Использование

Для корректного перенаправления звукового потока необходимо сначала в pasystray, выбрать Default Server <имя_пользователя>@<имя_сервера>, а потом запускать приложение, воспроизводящее звук.

Проблемы

Проверка схемы перенаправления звука

Если у вас возникают какие либо проблемы и вы хотите проверить работоспособность схемы перенаправления звука, то можно запустить любимый плеер, указав явно сервер pulseadio

PULSE_SERVER=192.168.1.2 deadbeef

Avahi-daemon и локальный домен (.local)

Перенесено в статью о Avahi

Звук не перенаправляется

Иногда возникает ситуация5), когда avahi-daemon работает, в pasystray указываем вывод через другой сервер, звук пропадает на локальном компьютере, но не появляется на сетевом (в VLC это сопровождается появлением ошибки).
Решение:

  1. Завершаем работу pasystray;
  2. Перезапускаем avahi-daemon, для этого нажимаем Alt+F2 и вводим команду gksu service avahi-daemon restart, в появившемся окне вводим пароль;
  3. Запускаем pasystray для этого нажимаем Alt+F2 и вводим команду pasystray

Воспроизведение звука от двух пользователей одновременно

По умолчанию в pulseaudio заложено следующее поведение: при переключении пользователя в системе звук воспроизводится только от одного пользователя. Это может показаться неудобным тем, кто хочет слышать музыку, запущенную у одного из пользователей, или звуковые оповещения «фонового» пользователя. Для того, что бы появилась возможность слышать звук от нескольких пользователей одновременно, необходимо:

  1. Добавить всех пользователей в группу pulse-access;
  2. В конфигурационном файле /etc/default/pulseaudio (в Ubuntu 14.04 эта настройка перенесена в /etc/init.d/pulseaudio) включаем system-mode:
    PULSEAUDIO_SYSTEM_START=1

Автоматическое переключение ввода/вывода звука на подключаемое устройство

При подключении наушников в порт наушников карты PCI драйвер ALSA в PulseAudio автоматически отключает порт громкоговорителей, и, если у вас в карте нет порта линейного выхода или у него меньший приоритет, то порт вывода звука автоматически переключается на наушники. Но если вы подключаете наушники или микрофон по USB или Bluetooth, то ввод/вывод звука на них автоматически не переключается. Чтобы настроить автоматическое переключение ввода/вывода звука на подключаемое устройство, можно подключить модуль PulseAudio module-switch-on-connect. Он переключает сток/источник по умолчанию в PulseAudio на новый появившийся сток/источник, соответствующий новому подключённому устройству, а также переключает все каналы вывода в сток / вывода из источника, используемые приложениями, со старого стока/источника по умолчанию на новый. Он идёт в стандартной поставке PulseAudio и подключается редактированием файла /etc/pulse/default.pa, в него нужно добавить:

### Local additions from <user>
load-module module-switch-on-connect

В случае устройства, подключаемого по USB (например, веб-камеры или USB-наушников), альтернативным решением является настройка udev на автоматический запуск скрипта, который переключает в PulseAudio сток/источник по умолчанию и каналы ввода/вывода, при подключении устройства. Для этого нужно создать следующие файлы:

/etc/udev/rules.d/90-usb-switch-to.rules:

SUBSYSTEM=="sound", KERNEL=="card1", ACTION=="change", RUN+="/usr/local/bin/usb_switch_to_udev.sh"

/usr/local/bin/usb_switch_to_udev.sh:

#!/bin/sh
su <user> -c "/usr/local/bin/usb_switch_to.sh" &

/usr/local/bin/usb_switch_to.sh:

#!/bin/sh
sleep 5
pacmd set-default-sink <sink>
pacmd list-sink-inputs | awk '/index:/{print $2}' | xargs -r -I{} pacmd move-sink-input {} <sink>

card1 — название подключаемого устройства, которое можно определить по файлу, появляющемуся в /sys/class/sound при подключении устройства. Скрипт запускает другой скрипт в фон, который, в свою очередь, ждёт 5 секунд, пока появится нужный сток/источник, и затем производит переключение. <user> — имя обычного пользователя, которому нужно выполнить переключение (можно эту строчку повторить несколько раз, меняя только имена пользователей, для переключения нескольким пользователям). <sink> — имя стока, соответствующего подключаемому устройству (можно узнать, подключив устройство и выполнив команду pactl list sinks, см. поле name). Если нужно переключить не сток, а источник (подключается не наушники, а микрофон), то вместо set-default-sink <sink> будет set-default-source <source>, имя источника можно узнать из вывода команды pactl list sources.

Bauer stereophonic-to-binaural DSP

Пример подключения LADSPA модуля bs2b.
Установить плагин

sudo apt install bs2b-ladspa ladspa-sdk

Далее либо командами в консоли, либо с помощью veromix. Получить имя выхода по-умолчанию.

pacmd list-sinks

Например, у меня это alsa_output.pci-0000_00_1b.0.analog-stereo
Установить плагин
pacmd load-module module-ladspa-sink sink_name=[name] master=[default sink] plugin=bs2b label=bs2b control=700,4.5

pacmd load-module module-ladspa-sink \
    sink_name=ladspa_out master=alsa_output.pci-0000_00_1b.0.analog-stereo \
    plugin=bs2b label=bs2b control=700,4.5

Установить выход звука через плагин

set-default-sink ladspa_out

или это же, но мышкой в настройках звука

Если всё заработало, то можно добавить в настройки /etc/pulse/default.pa

### BS2B plugin
load-module module-ladspa-sink sink_name=ladspa_out master=alsa_output.pci-0000_00_1b.0.analog-stereo plugin=bs2b label=bs2b control=700,4.5 sink_properties=device.description=Bauer_stereophonic-to-binaural
set-default-sink ladspa_out

Шумоподавитель для микрофона в skype, steam и т.п.

Сначала проверим работу фильтра.
Запускаем skype с дополнительной переменной

PULSE_PROP="filter.want=echo-cancel" skype

Вписываем в /etc/pulse/default.pa для автозапуска при старте pulseaudio.
Или копируем /etc/pulse/default.pa в ~/.config/pulse/default.pa и вписываем уже в него для применения только для данного пользователя.

### Шумоподавитель
load-module module-echo-cancel source_name=noechosource sink_name=noechosink source_properties=device.description=Микрофон_с_шумоподавителем sink_properties=device.description=Выход_без_эха
set-default-source noechosource

В моём случае эта строка выглядит так:

### Шумоподавитель
load-module module-echo-cancel source_name=alsa_input.pci-0000_00_1b.0.analog-stereo sink_name=alsa_output.pci-0000_00_1b.0.analog-stereo source_properties=device.description=Микрофон_с_шумоподавителем sink_properties=device.description=Выход_без_эха
set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo.2

Далее в skype (steam и т.п.) указываем в качестве микрофона новый «Микрофон_с_шумоподавителем».

К сожалению, в текущей версии PulseAudio существует баг, из-за которого этот модуль работает только тогда, когда производится не только запись, но и воспроизведение. Скажем, в Skype, Mumble и прочих голосовых телефонах будет все сразу замечательно, а если вы заходите только записать звук, например, через audacity, то следует включить в нем какую-то музыку фоном, даже с минимальной громкостью. Если вы используете второй способ, убедитесь, что нужная вам программа воспроизводит аудио в sink с шумоподавлением, а не напрямую в аудиокарту. Перенести sink можно, например, через pavucontrol. Не воспроизводите музыку в аудиоплеере через sink с шумоподавлением, а то получите звук в моно и 32кГц.

Удаление

На данный момент Pulseaudio доработан и при его использовании не возникает особых проблем, но если, всё таки, проблемы есть6), то есть смысл попробовать удалить.

Все нижеописанные действия стоит начинать только в случае крайней необходимости! Инструкция подходит для Ubuntu 9.10 / 10.04 / 10.10 / 11.04 / 11.10

  • Завершаем работу PulseAudio:

    killall pulseaudio
  • Удаляем ненужные пакеты:

    sudo apt-get remove pulseaudio gstreamer0.10-pulseaudio -y
  • Изменяем настройки gstreamer:

    gconftool-2 -s --type string /desktop/gnome/sound/default_mixer_device "alsamixer"
    gconftool-2 -s --type list --list-type string /desktop/gnome/sound/default_mixer_tracks "[Master]"
    gconftool-2 -s --type boolean /desktop/gnome/sound/enable_esd false
    gconftool-2 -s --type string /system/gstreamer/0.10/default/audiosink "alsasink"
    gconftool-2 -s --type string /system/gstreamer/0.10/default/audiosrc "alsasrc"
    gconftool-2 -s --type string /system/gstreamer/0.10/default/chataudiosink "alsasink"
    gconftool-2 -s --type string /system/gstreamer/0.10/default/musicaudiosink "alsasink"
  • Добавляем репозиторий, содержащий изменённый апплет громкости и пакеты, для нормальной работы без PulseAudio:

    sudo add-apt-repository ppa:dtl131/ppa
  • Обновляем списки репозиториев и обновляем пакеты:

    sudo apt-get update && sudo apt-get upgrade
  • Перезагружаемся.

  • Теперь нужно добавить новый апплет звука на панель. Для этого жмём правой кнопкой мыши на панели → Добавить на панель… → в списке выбираем Регулятор громкости.

В GNOME Classic из Ubuntu 11.10 требуется зажать Alt и нажать правую кнопку мыши для того, чтобы появился пункт Добавить на панель…

Апплет для Unity

Так как в Unity нет привычной панели с апплетами, нужно установить другой регулятор громкости, к примеру: volti. Для установки, скачайте и установите deb пакет последней версии. Необходимо добавить запись Volti в whitelist панели unity для того, что бы иконка могла отображаться.

Восстановление

Если возникли проблемы и звука теперь вообще нет, или что то не работает - можно легко вернуть все обратно.

  • Снова ставим PulseAudio:

    sudo apt-get install pulseaudio gstreamer0.10-pulseaudio indicator-sound -y
  • Удаляем добавленный ранее репозиторий и все оставшиеся от него пакеты:

    sudo apt-get install ppa-purge
    sudo ppa-purge ppa:dtl131/ppa
  • Изменяем настройки GStreamer:

    gconftool-2 -s --type string /desktop/gnome/sound/default_mixer_device ""
    gconftool-2 -s --type list --list-type string /desktop/gnome/sound/default_mixer_tracks "[]"
    gconftool-2 -s --type boolean /desktop/gnome/sound/enable_esd true
    gconftool-2 -s --type string /system/gstreamer/0.10/default/audiosink "autoaudiosink"
    gconftool-2 -s --type string /system/gstreamer/0.10/default/audiosrc "autoaudiosrc"
    gconftool-2 -s --type string /system/gstreamer/0.10/default/chataudiosink "autoaudiosink"
    gconftool-2 -s --type string /system/gstreamer/0.10/default/musicaudiosink "autoaudiosink"
  • Очищаем настройки старого PulseAudio:

    rm -r ~/.pulse ~/.asound* 
    sudo rm /etc/asound.conf
  • Перезагружаемся.

Ссылки

1) кроме питания
2) localhost необходим, что бы приложения на сервере, например mpd, получали доступ к pulseaudio
3) по умолчанию все порты в iptables открыты
4) возможно может понадобится перезапуск pasystray или avahi-daemon на клиенте
5) я пока не отследил по какой причине
6) Необходимостью может являться пропадание звука после перезагрузки и сообщение «Ожидание ответа звуковой подсистемы»