Difference between revisions of "PulseAudio"

From ArchWiki
Jump to: navigation, search
m (KDE4: note template)
(Installation)
Line 9: Line 9:
 
==Installation==
 
==Installation==
 
To install PulseAudio:
 
To install PulseAudio:
  # pacman -S pulseaudio-alsa
+
  # pacman -S pulseaudio
  
 
Optionally you can install some GTK front-ends for PulseAudio:
 
Optionally you can install some GTK front-ends for PulseAudio:

Revision as of 06:13, 21 May 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

PulseAudio is a general purpose sound server. For a list of features, see Wikipedia:PulseAudio#Features.

Tip: If you want to play sound from multiple applications, ALSA already provides a basic software mixer named "dmix" which is enabled by default.

Installation

To install PulseAudio:

# pacman -S pulseaudio

Optionally you can install some GTK front-ends for PulseAudio:

# pacman -S paprefs pavucontrol

Running

If the D-Bus system daemon is not already running, start it:

# /etc/rc.d/dbus start

PulseAudio can be started with:

$ pulseaudio --start

Or if you use X11:

$ start-pulseaudio-x11

If you use KDE 4:

$ start-pulseaudio-x11; start-pulseaudio-kde

PulseAudio can be stopped with:

$ pulseaudio --kill

Note that in the case of most X11 environments, PulseAudio will be automatically started together with the X11 session. See the section on Desktop Environments for details.

Backend Configuration

ALSA

For the applications that do not support PulseAudio and support ALSA it is recommended to install the PulseAudio plugin for ALSA. The simplest way of doing this is installing the pulseaudio-alsa package:

# pacman -S pulseaudio-alsa

This package also contains the necessary Template:Filename for configuring ALSA to use PulseAudio.

If you are on Arch x86_64 and want to have sound for 32 bit programs (like Wine), make sure to install lib32-libpulse and lib32-alsa-plugins as well.

To prevent applications from using ALSA's OSS emulation and bypassing Pulseaudio (thereby preventing other applications from playing sound), remove the Template:Codeline module by executing:

# rmmod snd_pcm_oss

Afterwards, blacklist the module by adding Template:Codeline to MODULES in Template:Filename.

OSS

There are multiple ways of making OSS-only programs play to PulseAudio:

osspd

This is the simplest method.

Install ossp and start oospd with:

/etc/rc.d/osspd start

Afterwards, add it to DAEMONS in rc.conf.

padsp wrapper

If you have a program that uses OSS you can make it work with PulseAudio by starting it with padsp:

$ padsp OSSprogram

A few examples:

$ padsp aumix
$ padsp sox foo.wav -t ossdsp /dev/dsp

If you prefer you can rename the program OSSprogram-bin and replace it with a script like this: Template:File

GStreamer

To make GStreamer use PulseAudio, execute Template:Filename (part of gnome-media package) and select PulseAudio Sound Server in both Audio Input and Output. Alternatively, this can be done by setting the gconf variables Template:Codeline to pulsesink and Template:Codeline to pulsesrc:

 $ gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink
 $ gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosrc pulsesrc

Some applications (like Rhythmbox) ignore the audiosink property, but rely instead on musicaudiosink, which can't be configured using Template:Filename but needs to be manually set using Template:Filename or the Template:Filename:

 $ gconftool-2 -t string --set /system/gstreamer/0.10/default/musicaudiosink pulsesink

OpenAL

OpenAL Soft should use PulseAudio by default, but can be explicitly configured to do so: Template:File

libao

Edit the libao configuration file: Template:File

PortAudio

The current binary of PortAudio in the community repository does not support PulseAudio and non-mmap audio devices. This can be remedied by building PortAudio from ABS and applying a patch to the sources.

ESD

PulseAudio is a drop-in replacement for the enlightened sound daemon (ESD). While PulseAudio is running, ESD clients should be able to output to it without configuration.

Desktop Environments

General X11

Start Pulseaudio after the X session using:

$ start-pulseaudio-x11

This will start PulseAudio and load the X11 plugins.

Note that PulseAudio may already launch automatically. This is handled by either Template:Filename or the files in Template:Filename.

X11 bell

To make PulseAudio play a sample when an X11 bell event happens (e.g. to make your terminal go 'Ping!' instead of 'Beep!'), add the following to Template:Filename:

# Prevent pulseaudio --start from failing when following commands fail (eg. when X is not active)
.nofail
load-sample-lazy x11-bell /usr/share/sounds/freedesktop/stereo/dialog-error.oga
load-module module-x11-bell sample=x11-bell
.fail

You can also use another sample. Template:Filename is provided by sound-theme-freedesktop.

GNOME

Proper integration of PulseAudio into GNOME requires some special packages:

  • gnome-media-pulse
  • gnome-settings-daemon-pulse
  • libcanberra-pulse

They are part of the pulseaudio-gnome group.

KDE 3

PulseAudio is not a drop-in replacement for aRts. If you use KDE 3, it is not currently possible to use PulseAudio.

KDE 4 and Qt4

If you've installed PulseAudio, it will be used by KDE4/Qt4 applications. For more information see the KDE pages in the PulseAudio wiki.

Additionally, a minimal KDE alternative to pavucontrol, the veromix plasmoid is available in the AUR.

Applications

Audacious

Audacious natively supports PulseAudio. In order to use it, in Audacious you should set Audacious Preferences -> Audio -> Current output plugin to 'PulseAudio Output Plugin'.

mpd

You will need to configure mpd to use PulseAudio.

On a headless box, run PulseAudio as the mpd user. On a desktop, running mpd as yourself and not using the mpd user is preferred.

MPlayer

MPlayer natively supports PulseAudio output with the "Template:Codeline" option. It can also be configured to default to PulseAudio output, in Template:Filename for per-user, or Template:Filename for system-wide: Template:File

Flashplugin (x86_64 only)

If you are using flashplugin from the multilib repository you need to install lib32-alsa-plugins and lib32-libcanberra-pulse if you want to use software mixing, otherwise you will not be able to use other audio application while using flashplugin.

# pacman -S lib32-alsa-plugins lib32-libcanberra-pulse

Skype (x86_64 only)

Install lib32-libpulse from multilib, otherwise you will get the Error "Problem with Audio Playback" when trying to initiate a call.

volume control

Adapt the variable 'device' to your sink-device listed in
pactl list
and you can change the volume using this script.
#!/bin/bash
device="alsa_output.pci-0000_00_14.2.analog-stereo"
case "$1" in
	"up")    # increase volume by 1000
		pacmd dump | awk --non-decimal-data '$1~/set-sink-volume/{if ($2~/'${device}'/) {if ($3+1000 > 65535) {system ("pactl "$1" '${device}' "65535)} else {system ("pactl "$1" '${device}' "$3+1000)}}}'
		;;
	"down")  # decrease volume by 1000
		pacmd dump | awk --non-decimal-data '$1~/set-sink-volume/{if ($2~/'${device}'/) {if ($3-1000 < 0) {system ("pactl "$1" '${device}' "0)} else {system ("pactl "$1" '${device}' "$3-1000)}}}'
		;;
	"mute")  # toggle mute
		pacmd dump|awk --non-decimal-data '$1~/set-sink-mute/{if ($2~/'${device}'/) {system ("pactl "$1" '${device}' "($3=="yes"?"no":"yes"))}}'
		;;
esac

Alternative configurations

Surround sound systems

Many people have a surround card, but have speakers for just two channels, so PulseAudio cannot really default to a surround setup. To enable all the channels, edit Template:Filename: uncomment the default-sample-channels line (i.e. remove the semicolon from the beginning of the line) and set the value to 6 if you have a 5.1 setup, or 8 if you have 7.1 setup etc.

# Default
default-sample-channels=2
# For 5.1
default-sample-channels=6
# For 7.1
default-sample-channels=8

After doing the edit, you will need to restart Pulseaudio.

Advanced ALSA Configuration

In order for ALSA to use PulseAudio it needs a special Template:Filename (system wide settings) (recommended) or Template:Filename (settings on a per user basis): Template:File

If you omit the last two groups, Pulseaudio will not be used by default. You will then need to change the ALSA device to "pulse" in the applications that you use to make it work.

ALSA Monitor source

To be able to record from a monitor source (a.k.a. "What-U-Hear", "Stereo Mix"), use Template:Codeline to find out the name of the source in Pulseaudio (e.g. Template:Codeline). Then add lines like the following to Template:Filename or Template:Filename:

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
}

Now you can select Template:Codeline as a recording source.

Note: You can also simply install the package 'pulseaudio-alsa'

PulseAudio over network

One of PulseAudio's magnificent features is the possibility to stream audio from clients over TCP to the server running the PulseAudio daemon, allowing sound to be streamed through your LAN.

To accomplish this, one needs to enable module-native-protocol-tcp, and copy the pulse-cookie to the clients.

TCP support (networked sound)

To enable the TCP module, add this to (or uncomment, if already there) Template:Filename:

load-module module-native-protocol-tcp

To allow remote connections to the TCP module, you also have to remember to unblock the service in Template:Filename with the following line:

pulseaudio-native: ALL

Note: If you are having trouble connecting, use (on server)

pacmd>> list-modules

(you can even load modules from here!)

Zeroconf (Avahi) publishing

For the remote Pulseaudio server to appear in the PulseAudio Device Chooser (Template:Filename), you will also need to add the Template:Filename to the DAEMONS in rc.conf on both server and clients.

Switching the PulseAudio server used by local X clients

To switch between servers on the client from within X, the Template:Codeline command can be used. For example, to switch from the default server to the server at hostname foo:

$ pax11publish -e -S foo

Or to switch back to the default:

$ pax11publish -e -r

Note that for the switch to become apparent, the programs using Pulse must be restarted.

Pulseaudio through JACK

The JACK-Audio-Connection-Kit is popular for audio work, and is widely supported by Linux audio applications. It fills a similar niche as Pulseaudio, but with more of an emphasis on professional audio work. In particular, audio applications such as Ardour and Audacity (recently) work well with Jack.

Pulseaudio provides module-jack-source and module-jack-sink which allow Pulseaudio to be run as a sound server above the JACK daemon. This allows the usage of per-volume adjustments and the like for the apps which need it, play-back apps for movies and audio, while allowing low-latency and inter-app connectivity for sound-processing apps which connect to JACK. However, this will prevent Pulseaudio from directly writing to the sound card buffers, which will increase overall CPU usage.

To just try PA on top of jack you can have PA load the necessary modules on start:

pulseaudio -L module-jack-sink -L module-jack-source

To use pulseaudio with JACK, JACK must be started up before Pulseaudio, using whichever method you prefer. Pulseaudio then needs to be started loading the 2 relevant modules. Edit Template:Filename, and change the following region:

### Load audio drivers statically (it is probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
load-module module-detect
.endif

to the following:

### Load audio drivers statically (it is probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink
load-module module-jack-source
load-module module-jack-sink

### Automatically load driver modules depending on the hardware available
#.ifexists module-udev-detect.so
#load-module module-udev-detect
#.else
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
#load-module module-detect
#.endif

Basically, this prevents module-udev-detect from loading. module-udev-detect will always try to grab your sound-card (JACK has already done that, so this will cause an error). Also, the jack source and sink must be explicitly loaded.

QjackCtl with Startup/Shutdown Scripts

Using the settings listed above you can use QjackCtl to execute a script upon startup and shutdown to load/unload PulseAudio. Part of the reason you may wish to do this is that the above changes disable PulseAudio's automatic hardware detection modules. This particular setup is for using PulseAudio in an exclusive fashion with JACK, though the scripts could be modified to unload and load an alternate non-JACK setup, but killing and starting PulseAudio while programs might be using it would become problematic.

The following example could be used and modified as necessary as a startup script that daemonizes PulseAudio and loads the padevchooser program (optional, needs to be built from AUR) called Template:Filename:

#!/bin/bash
#Load PulseAudio and PulseAudio Device Chooser

pulseaudio -D
padevchooser&

as well as a shutdown script to kill PulseAudio and the Pulse Audio Device Chooser, as another example called Template:Filename also in the home directory:

#!/bin/bash
#Kill PulseAudio and PulseAudio Device Chooser

pulseaudio --kill
killall padevchooser

Both scripts need to be made executable:

chmod +x jack_startup jack_shutdown

then with QjackCtl loaded, click on the Setup button and then the Options tab and tick both "Execute Script after Startup:" And "Execute Script on Shutdown:" and put either use the ... button or type the path to the scripts (assuming the scripts are in the home directory) Template:Filename and Template:Filename making sure to save the changes you have made.

Pulseaudio through OSS

Add the following to Template:Filename:

 load-module module-oss

Then start Pulseaudio as usual. You should have sinks and sources for your OSS devices.

Pulseaudio from within a chroot (ex. 32-bit chroot in 64-bit install)

Since a chroot sets up an alternative root for the running/jailing of applications, pulseaudio must be installed within the chroot itself (Template:Codeline within the chroot environment).

Pulseaudio, if not set up to connect to any specific server (this can be done in Template:Filename, through the PULSE_SERVER environment variable, or through publishing to the local X11 properties using module-x11-publish), will attempt to connect to the local pulse server, failing which it will spawn a new pulse server. Each pulse server has a unique ID based on the machine-id value in Template:Filename. To allow for chrooted apps to access the pulse server, the following directories must be mounted within the chroot:-

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

Template:Filename should also be mounted for efficiency and good performance. Note that mounting /home would normally also allow sharing of the Template:Filename folder.

For specific direction on accomplishing the appropriate mounts, please refer to the wiki on installing a bundled 32-bit system, especially the additional section specific to Pulseaudio.

Simultaneous Digital and Analog Output

As an example situation: you want to listen to music at your desktop, using the regular 3.5mm analog outputs into your desktop PC speakers. You also want to feed the same music to your hi-fi system in another room via your sound card's digital output. You would think this would be a simple matter, but for many sound chipsets, it requires some editing to get it set up since the default Pulseaudio profiles allow you to use either analog or digital, but not both simultaneously.

The solution is as follows (with thanks for some useful pointers from: http://superuser.com/questions/267442/how-to-get-simultaneous-sound-from-pulseadio-on-two-outputs-analog-and-digital). Amarok is used in this example.

  • Install "pavucontrol" (pacman -S pavucontrol). You won't be needing the other useful pulse configuration utility "paprefs" for this task.
  • In a terminal, launch "pacmd" - a command line utility for loading pulse modules
  • Enter the following commands in pacmd in this order (where your numbers for "hw:0,0" are determined by entering "aplay -l" in terminal. One number is the hardware ID for the analog device, the other for the digital):
 load-module module-alsa-sink device="hw:0,0" sink_name=analog_output
 load-module module-alsa-sink device="hw:0,1" sink_name=digital_output
 load-module module-combine sink_name=analog_digital slaves=digital_output,analog_output
  • Open "pavucontrol" from a terminal
  • Under pavucontrol's "Playback Tab", for the running app Amarok, select "Simultaneous output to Internal Audio, Internal Audio" (you will need to have Amarok playing something to test this)
  • Under the "Configuration Tab" Select "Digital Stereo Duplex (IEC958)" for "Internal Audio" (your exact names may vary here, according to how ALSA has named your hardware). You should now be able to hear Amarok playing on both your analog and digital outputs!

The above solution only holds to long as you have pacmd running, and is specific for the running app (in the above example, Amarok).

To set the the sinks up every reboot and for all audio apps, add the above load-module commands to your /etc/pulse/default.pa file. You may need to add them at the start of the file, just above line "### Automatically restore the volume of streams and devices", or it may not work as expected.

Finally, use the Gnome 3 sound preferences to set your system's default "Output" to "Simultaneous output to Internal Audio, Internal Audio".

Troubleshooting

No sound after install

Flash Content

If after installing pulseaudio you get no sound from flash content, you can try installing libflashsupport-pulse from the AUR.

No cards

If PulseAudio starts, run Template:Codeline. If no cards are reported, make sure that your ALSA devices are not in use:

$ fuser -v /dev/snd/*
$ fuser -v /dev/dsp

Make sure any applications using the pcm or dsp files are shut down before restarting PulseAudio.

KDE4

It may be that you have another output device set as preferred in phonon. Make sure that every setting has your preferred output device at the top, and check pavucontrol (install using pacman) to make sure that applications are using the device for output.

Note: Pulseaudio doesn't work by default with the Gstreamer phonon-backend. It does, however, with the phonon-vlc backend (available in [extra]).

Muted audio device

If you experience no audio output via any means while using ALSA as your default device, you may have to unmute your sound card. To do this, you will want to launch alsamixer and make sure each column has a green 00 under it (this can be toggled by pressing 'm')

$ alsamixer -c 0

Daemon startup failed

Try resetting PulseAudio. To do that:

$ pulseaudio --kill
$ killall pulseaudio
$ killall -9 pulseaudio
$ rm -rf ~/.pulse*
$ rm -rf /tmp/pulse*

Afterwards, start PulseAudio again.

padevchooser

If you cannot launch the PulseAudio Device Chooser, first (re)start the Avahi daemon as follows:

$ /etc/rc.d/avahi-daemon restart

Glitches, skips or crackling

The PulseAudio sound server uses a timer-based audio scheduling instead of the traditional interrupt-driven approach. Timer-based scheduling may expose issues in some ALSA drivers. To turn timer-based scheduling off, replace the line:

load-module module-udev-detect 

in Template:Filename by:

load-module module-udev-detect tsched=0

Then restart the PulseAudio server.

Choppy sound

Choppy sound in pulsaudio can result from wrong settings for the sample rate in /etc/pulse/daemon.conf. Try changing the line

; default-sample-rate = 44100

to

default-sample-rate = 48000

and restart the PulseAudio server.

Volume adjustment doesn't work properly

You might wan't to check

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

If the volume does not appear to increment/decrement properly using Template:Codeline or Template:Codeline, it may be due to pulseaudio having a larger number of increments (65537 to be exact). Try using larger values when changing volume (e.g. Template:Codeline).

Volume gets louder every time a new application is started

If you encounter this issue, you can fix it by uncommenting

flat-volumes = no

in

/etc/pulse/daemon.conf

External links