PulseAudio: Difference between revisions

imported>Artturin
No edit summary
Pbek (talk | contribs)
Remove obsolete config example
 
(11 intermediate revisions by 10 users not shown)
Line 1: Line 1:
PulseAudio is a popular sound server for Linux. It is now required by a number of applications, and should be enabled if audio support is desired on NixOS. Enabling PulseAudio is sufficient to enable audio support on NixOS in most cases.
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;
services.pulseaudio.enable = true;
services.pulseaudio.support32Bit = true;    # If compatibility with 32-bit applications is desired.
</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">
<syntaxHighlight lang="nix">
hardware.pulseaudio.enable = true;
users.extraUsers.alice.extraGroups = [ "audio" ... ];
hardware.pulseaudio.support32Bit = true;   ## If compatibility with 32-bit applications is desired.
</syntaxHighlight>
</syntaxHighlight>


You may need to add users to the <tt>audio</tt> group for them to be able to use audio devices:
== 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">
services.pulseaudio.extraConfig = "load-module module-combine-sink";
</syntaxHighlight>
 
== Disabling unwanted modules ==


<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
users.extraUsers.alice.extraGroups = [ "audio" ... ];
services.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>
 
== 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>
</syntaxHighlight>


==Troubleshooting PulseAudio==
 
== 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 36: Line 87:


<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
hardware.pulseaudio.package = pkgs.pulseaudioFull;
services.pulseaudio.package = pkgs.pulseaudioFull;
</syntaxHighlight>
</syntaxHighlight>


Line 47: Line 98:
(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)
(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)


==Explicit PulseAudio support in applications==
=== Clicking and Garbled Audio ===
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:
The newer implementation of the PulseAudio sound server uses timer-based audio scheduling instead of the traditional, interrupt-driven approach.
 
<syntaxHighlight lang="nix">
nixpkgs.config.pulseaudio = true;
</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>
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.
$ pactl load-module module-equalizer-sink
$ pactl load-module module-dbus-protocol
$ nix-shell -p python27Full python27Packages.pyqt4 python27Packages.dbus-python --command qpaeq
</syntaxHighlight>


== Clicking and Garbled Audio for Creative Sound Cards ==
To turn timer-based scheduling off add this to your configuration:
If you own a sound card from Creative like X-Fi and you notice random clicks during audio playback, then add following to your configuration [https://github.com/NixOS/nixpkgs/issues/788#issuecomment-21707426]:
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
  hardware.pulseaudio.configFile = pkgs.runCommand "default.pa" {} ''
services.pulseaudio.configFile = pkgs.runCommand "default.pa" {} ''
    sed 's/module-udev-detect$/module-udev-detect tsched=0/' \
  sed 's/module-udev-detect$/module-udev-detect tsched=0/' \
      ${pkgs.pulseaudio}/etc/pulse/default.pa > $out
    ${pkgs.pulseaudio}/etc/pulse/default.pa > $out
  '';
'';
</syntaxHighlight>
</syntaxHighlight>
Then perform <code># nixos-rebuild switch</code>, followed by <code>$ pulseaudio -k</code>.
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/solving-creative-sound-blaster-x-fi-titanium-crackling-slash-distortion-on-linux].
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]]
[[Category:Audio]]