Pulseaudio linux ��� ��� �����

PulseAudio, часть 1: управление из командной строки


Одним из новшеств Ubuntu 10.10 стал переход с «голой» ALSA на PulseAudio. Ранее постилось много советов прибить и удалить его для решения проблем, однако теперь PulseAudio стабилен, с ним не шипят колонки ;), и он способен на такое, что не снилось Alsa 🙂

В статье я с самого начала расскажу что это такое и как оно работает, а так же:

  • Как переключить весь звук на USB-колонку на закрывая приложений (usb hotplug);
  • Как выбрать порт звуковой карты для вывода звука (колонки ноутбука/наушника, LineOut/Наушники);
  • Как выбрать профайл звуковой карты (маппинг физических портов: 5.1 или стерео+lineIn?);
  • Как управлять громкостью и усиливать тихий сигнал (!);
  • Как сделать Skype громче музыки?

И представлю своё решение, призванное упростить управление PulseAudio 😉

Кратко о PulseAudio

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

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

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

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

/.asoundrc вставляем следующие строки (Которые, кстати, вылечат микрофон Skype’а! если ещё отключить «Позволить скайп автоматически подстраивать громкость» — подсказывает aim):
pcm.pulse < type pulse >
ctl.pulse < type pulse >
pcm.!default < type pulse >
ctl.!default < type pulse >

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

Читайте также:  Microsoft windows ultimate x86

Управление PulseAudio: pactl

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

Осмотр владений

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

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

pactl & pacmd

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

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’

Читайте также:  Не запускаются приложения snap linux

Конфиг

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

  • pacmd — Запускает интерактивную консоль PulseAudio
  • pacmd help — список команд, на оффсайте
  • Модули PulseAudio

patricks

Замучавшись неудобством официальных утилит, ваш верный слуга написал свою утилиту для управления демоном PulseAudio 🙂

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

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

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

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

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

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

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

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

Источник

  • PulseAudio

PulseAudio is a network-capable sound server program. A sound server is a background process accepting sound input from one or more sources (processes, capture devices, etc.), that is able to mix and redirect those sources to one or more sinks (sound cards, remote network PulseAudio servers, or other processes).

PulseAudio is installed by default in most Debian desktop environments.

PulseAudio works on top of ALSA.

Installing PulseAudio

As of Debian 8 (Jessie, in 2016), you rarely need to install pulseaudio by hand as it is a dependency of the most popular desktops

Desktop Environment

Automatically includes pulseaudio?

Cinnamon

If you need to install it manually, apt-get install pulseaudio should «just work» in every release since Debian 6 (Squeeze). Pulseaudio becomes the default when the package is installed. Everything will use it.

This can be checked by with pavucontrol (in the pavucontrol package). If the sound is registering in the vu vumetre of that program, then it is being routed through the pulse system.

Basic Configuration

Mixers

Pavucontrol, an optional package for pulseaudio, allows you to make volume adjustments (entire system or per application). It also allows you to change «mixer» settings like headphone output, mic level, input device, and stereo versus surround sound profiles.

However, you may not need to install pavucontrol as most desktop environments have their own control panels for configuring Pulseaudio. Often such programs will not mention Pulseaudio and will simply be called something generic like «Sound Settings».

Surround sound system

Many people have a multi-channel sound cards, but use the speakers for the two channels. PulseAudio has no default settings for surround sound support. To enable all channels, edit the file /etc/pulse/daemon.conf: uncomment default-sample-channels (ie remove the semicolon at the beginning of the line) and set it to 6 if you System 5.1 or 8, if your system is 7.1.

After making the changes, restart Pulseaudio.

Solving Problems

Restarting the Pulseaudio Daemon

Since Debian 9, Pulseaudio is managed by the per-user instance of systemd. It uses socket activation, which means Pulseaudio will start automatically when an application tries to use it.

To reread the config files

/.config/pulse/daemon.conf and /etc/pulse/daemon.conf, one can restart pulse:

Or on systems that do not use systemd (including Debian 8 and earlier):

Interrupting play in Amarok when running Skype

Comment out or remove the line in the /etc/pulse/default.pa

Sound level is low or suddenly becomes too loud

Add a line to /etc/pulse/daemon.conf:

Missing playback devices or audio capture

If Pulseaudio does not correctly detect your input / output devices («sources» and «sinks» in Pulseaudio parlance), you can try deleting the configuration files and restarting pulseaudio. This is probably unnecessary overkill, but might help some people.

Pulseaudio, in its default configuration, will likely want exclusive access to the hardware. It will therefore skip devices already in use by other applications, eg. web browsers and volume control applets. lsof /dev/snd/* will help identify processes you may need to kill off before PulseAudio will use your audio device.

Front Panel Jacks not working

As of wheezy, for some reason, pulseaudio does not see the toggle feature of some cards (i.e. CMI8788 [Oxygen HD Audio]) exposed by ALSA and playing with the pulseaudio interface (pavucontrol) won’t bring happiness. The trick, (for now?), is to bring up the alsamixer (or alsamixergui) and the audio output can be switched from the read of the card to the front-panel as well as the mic input.

Stuttering and audio interruptions

If a low-power machine stutters (audio breaks up), you can try adding the following to /etc/pulse/daemon.conf:

Excessive CPU usage and distortion

Add a line to /etc/pulse/default.pa

Various problems with Skype and Wine

Add or uncomment the line in /etc/pulse/daemon.conf

Читайте также:  Windows отключены журналы событий

Disabling daemon autospawn

A pulseaudio client program will automatically run the pulseaudio daemon if there isn’t one running already. If you want to be able to kill the daemon without it respawning, make these changes:-

Copy the client configuration file to

Use your favorite editor to change the line which says ; autospawn = yes to autospawn = no. Be sure to uncomment the line by removing the leading semicolon.

Alternately, to do both the copy and the edit in one step, just cut and paste this into the command line:

Echo test: hearing the microphone

If you are unsure about your microphone setup, you can hear the input from the microphone in real-time by enabling the loopback module (source):

The module will show up in the Recording tab of the pavucontrol program, where the source and volume can be configured. While latency should be low, it should be sufficient to get a feeling of the sound quality as you will hear yourself speak in the microphone. To make the change permanent, add the following line to your

Watch out for feedback! Be ready to lower all volumes in case the microphone picks up the output from the loudspeakers. Naturally, it is better to run such a test with headphones.

On top of this above technique, many conferencing services have built-in echo tests. For example, ?Skype has an echo test. ?Mumble can also be configured to echo audio back (from local or remote) through the Configure -> Settings -> Audio Output -> Loopback test.

Stop running the pulseaudio daemon for a while

If you suspect trouble with a running pulseaudio daemon in your systemd user session, you can switch it off:

and then to switch it on:

Pops when starting and stopping playback or starting audio applications

This can be caused by PulseAudio suspending sinks after a period of inactivity. To disable this behaviour, comment out or remove the following line in /etc/pulse/default.pa and /etc/pulse/system.pa files:

Advanced

Dynamically enable/disable

As mentioned above, all sound will automatically be routed thorugh pulseaudio when the pulseaudio package is installed. These instructions describe how to disable it with the pulseaudio package still installed. Individual users can then reenable it themselves as needed.

The «just works» magic is achieved through configuration files placed in /usr/share/alsa/alsa.conf.d/. Without these files in place, the regular alsa defaults will be used. Therefore, to achieve the default alsa behavior with the pulseaudio package installed, divert these files

Now if a user wishes to use pulseaudio, they can create an

/.asoundrc file that looks something like

If a user wishes to switch between pulse and non-pulse on a quasi-regular basis, put the above into the

/.asoundrc.pulse instead and symlink it to

/.asoundrc when pulse is desired

and remove it when not

be sure also when disabling pulse to kill the server so that other things can directly access the soundcard again

Temporarily suspend and run an application without PulseAudio

You can use the pasuspender utility, if you only need to disable PulseAudio temporarily, to run an application and have it access your audio devices directly.

Run: pasuspender -- yourapplication [yourapplicationoptions]

  • Configure your application to access your audio devices directly (e.g. select your soundcard ALSA address in an audio player)
  • While you run pasuspender, other applications won’t be able to use PulseAudio. When you quit the application, the default behaviour of PulseAudio will be restored automatically.

    See man pasuspender for more information.

    Connecting PulseAudio and JACK

    It’s possible to use PulseAudio alongside the JACK server, to provide JACK access to applications that only support PulseAudio.

    Install the pulseaudio-module-jack package; this will install the modules module-jack-sink, module-jack-source and module-jackdbus-detect; the modules will create a «PulseAudio JACK» sink and source that will show up in pavucontrol and in the qjackctl «Connections» window.

  • If you want to enable this feature temporarily, load the modules manually:
  • If you want to enable this feature automatically, make sure you’re running jackdbus whenever you run jackd, e.g. if you start jackd using qjackctl, check «Enable JACK D-Bus interface» in the Setup -> Misc tab. Thus, JACK will tell PulseAudio to load the modules at startup. Warning: you might need to close and re-open qjackctl in order for this change to take effect.

    Here are some features of PulseAudio

    • High quality software mixing of multiple audio streams with support for more than one entrance (source) and exit (sink).
    • Can be used to combine multiple sound cards into one (with frequency rate).

    Large set of supported client libraries. Applications that use ESD, ALSA, oss, libao and GStreamer, are supported without the need for any changes. Modules for PulseAudio are available for xmms and mplayer.

  • Low latency and accurately measured delay time for recording and playback. Ability to fully synchronize multiple playback streams.
  • Network transparency: the application can play or record audio on a computer other than the one on which they run.
  • Extensible architecture with modules for jackd, multicast-rtp, lirc and avahi, among others.
  • Источник

    Оцените статью