PulseAudio: Difference between revisions
imported>HLandau mNo edit summary |
|||
(18 intermediate revisions by 14 users not shown) | |||
Line 1: | Line 1: | ||
PulseAudio is a popular sound server for Linux. | PulseAudio is a popular sound server for Linux. A number of applications now expect a PulseAudio-compatible audio server. | ||
As of NixOS 24.11, [[PipeWire]] is used over PulseAudio for most graphical sessions by default, but it can provide a PulseAudio-compatible server (see that page for more details). This page documents how to use "native" PulseAudio as an alternative. | |||
==Enabling PulseAudio== | ==Enabling PulseAudio== | ||
Add to your configuration: | Add to your configuration: | ||
<syntaxhighlight lang="nix"> | |||
services.pipewire.enable = false; | |||
hardware.pulseaudio.enable = true; | |||
hardware.pulseaudio.support32Bit = true; # If compatibility with 32-bit applications is desired. | |||
# If you're on nixos-unstable you should instead use | |||
services.pulseaudio.enable = true; | |||
services.pulseaudio.support32Bit = true; | |||
</syntaxhighlight> | |||
You may need to add users to the <tt>audio</tt> group for them to be able to use audio devices: | |||
<syntaxHighlight lang="nix"> | |||
users.extraUsers.alice.extraGroups = [ "audio" ... ]; | |||
</syntaxHighlight> | |||
== Explicit PulseAudio support in applications == | |||
Normally, the system-wide ALSA configuration (<tt>/etc/asound.conf</tt>) redirects the audio of applications which use the ALSA API through PulseAudio. For this reason, most applications do not need to be PulseAudio-aware. Some NixOS packages can be built with explicit PulseAudio support which is disabled by default. This support can be enabled in all applicable packages by setting: | |||
<syntaxHighlight lang="nix"> | |||
nixpkgs.config.pulseaudio = true; | |||
</syntaxHighlight> | |||
== Enabling modules == | |||
Modules can be loaded manually: | |||
<syntaxHighlight lang="sh"> | |||
pactl load-module module-combine-sink | |||
</syntaxHighlight> | |||
Or automatically: | |||
<syntaxHighlight lang="nix"> | <syntaxHighlight lang="nix"> | ||
hardware.pulseaudio. | hardware.pulseaudio.extraConfig = "load-module module-combine-sink"; | ||
hardware.pulseaudio. | </syntaxHighlight> | ||
== Disabling unwanted modules == | |||
<syntaxHighlight lang="nix"> | |||
hardware.pulseaudio.extraConfig = "unload-module module-suspend-on-idle"; | |||
</syntaxHighlight> | |||
== Using Pulseaudio Equalizer == | |||
Currently (2017-11-29 {{issue|8384}}) the <code>qpaeq</code> command does not work out of the box, use the following commands to get it running: | |||
<syntaxHighlight lang=console> | |||
$ pactl load-module module-equalizer-sink | |||
$ pactl load-module module-dbus-protocol | |||
$ nix-shell -p python27Full python27Packages.pyqt4 python27Packages.dbus-python --command qpaeq | |||
</syntaxHighlight> | </syntaxHighlight> | ||
== Using Bauer stereophonic-to-binaural DSP library == | |||
This module re-creates on a headset what you would hear in real-life, improving sound quality and decreasing brain fatigue. | |||
See the description of the project for more details: https://bs2b.sourceforge.net/ | |||
The nix package to use is: <code>libbs2b</code> | |||
<b>FIXME</b>: getting an error while running: | |||
<syntaxHighlight lang=console> | |||
$ pactl load-module module-ladspa-sink sink_name=binaural master=bluez_sink.AA_BB_CC_DD_EE_FF.a2dp_sink plugin=bs2b label=bs2b control=700,4.5 | |||
</syntaxHighlight> | |||
==Troubleshooting | == Troubleshooting == | ||
=== General troubleshooting === | |||
Before troubleshooting PulseAudio, determine that the kernel-level sound APIs (ALSA) are functional; see [[ALSA]]. | Before troubleshooting PulseAudio, determine that the kernel-level sound APIs (ALSA) are functional; see [[ALSA]]. | ||
Line 31: | Line 87: | ||
If other processes (such as <tt>plugin-container</tt>) are using sound devices, this indicates they are bypassing PulseAudio; check that you don't have a local <tt>~/.asoundrc</tt> file directing audio to somewhere else. | If other processes (such as <tt>plugin-container</tt>) are using sound devices, this indicates they are bypassing PulseAudio; check that you don't have a local <tt>~/.asoundrc</tt> file directing audio to somewhere else. | ||
== | Note that you may need to enable the full pulseaudio package using: | ||
<syntaxHighlight lang="nix"> | |||
hardware.pulseaudio.package = pkgs.pulseaudioFull; | |||
</syntaxHighlight> | |||
For example I had to enable this package in order to solve an error: | |||
<syntaxHighlight lang="console"> | |||
snd_pcm_open failed: Device or resource busy | |||
</syntaxHighlight> | |||
(The problem is that also also tries to connect to the card that is already used by pulseaudio, so we need a module pulseaudio-alsa on pulseaudio to redirect also calls to pulseaudio) | |||
=== Clicking and Garbled Audio === | |||
The newer implementation of the PulseAudio sound server uses timer-based audio scheduling instead of the traditional, interrupt-driven approach. | |||
Timer-based scheduling may expose issues in some ALSA drivers. On the other hand, other drivers might be glitchy without it on, so check to see what works on your system. | |||
To turn timer-based scheduling off add this to your configuration: | |||
<syntaxHighlight lang="nix"> | <syntaxHighlight lang="nix"> | ||
hardware.pulseaudio.configFile = pkgs.runCommand "default.pa" {} '' | |||
sed 's/module-udev-detect$/module-udev-detect tsched=0/' \ | |||
${pkgs.pulseaudio}/etc/pulse/default.pa > $out | |||
''; | |||
</syntaxHighlight> | </syntaxHighlight> | ||
Then perform <code># nixos-rebuild switch</code>, followed by <code>$ pulseaudio -k</code>. | |||
The difference should be directly noticeable. This is a known issue related to quality of Creative driver [https://guh.me/posts/2013-06-16-solving-creative-sound-blaster-x-fi-titanium-crackling-slash-distortion-on-linux/], but it can also happen with other sound cards. | |||
=== Paprefs doesn't work on KDE === | |||
If you run KDE (Plasma) and paprefs util doesn't work complaining about dconf, make sure you have <code>programs.dconf.enable = true;</code> in your NixOS configuration. [https://github.com/NixOS/nixpkgs/issues/47938#issuecomment-427520410 Source]. | |||
==See also== | ==See also== | ||
* [[Using JACK with PulseAudio]] | * [[Using JACK with PulseAudio]] | ||
* [[PipeWire]] | |||
[[Category:Audio]] |