Audio Configuration

Table of Contents

HyprL uses PipeWire as the modern audio server, providing low-latency audio and seamless compatibility with both PulseAudio and JACK applications.

Overview

PipeWire is a server and user space API to deal with multimedia pipelines. It provides:

  • Low-latency audio processing
  • Video capture and processing
  • Compatibility with PulseAudio and JACK applications
  • Session management for audio/video devices

Core Components

PipeWire Stack

# Core PipeWire packages (installed by HyprL)
pipewire
pipewire-pulse    # PulseAudio compatibility
pipewire-jack     # JACK compatibility
pipewire-alsa     # ALSA compatibility
wireplumber       # Session manager

Audio Control Applications

  • pavucontrol: Graphical volume control
  • pwvucontrol: Native PipeWire volume control
  • helvum: PipeWire patchbay (visual connection manager)

Configuration Files

PipeWire Configuration

Main configuration is typically handled automatically, but can be customized:

# System-wide config
/etc/pipewire/

# User-specific config
~/.config/pipewire/

WirePlumber Configuration

Session management configuration:

# User config directory
~/.config/wireplumber/

Audio Device Management

List Audio Devices

# List all audio devices
pw-cli list-objects | grep -A5 -B5 "Audio"

# List sinks (output devices)
pactl list short sinks

# List sources (input devices)  
pactl list short sources

Set Default Devices

# Set default sink (output)
pactl set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo

# Set default source (input)
pactl set-default-source alsa_input.pci-0000_00_1f.3.analog-stereo

Volume Control

# Set master volume
pactl set-sink-volume @DEFAULT_SINK@ 50%

# Mute/unmute
pactl set-sink-mute @DEFAULT_SINK@ toggle

# Microphone volume
pactl set-source-volume @DEFAULT_SOURCE@ 80%

Bluetooth Audio

Enable Bluetooth Audio Support

# Install bluetooth audio codecs
sudo pacman -S pipewire-pulse bluez-utils

# Enable bluetooth service
sudo systemctl enable --now bluetooth

Connect Bluetooth Devices

# Using bluetoothctl
bluetoothctl
> scan on
> pair XX:XX:XX:XX:XX:XX
> connect XX:XX:XX:XX:XX:XX
> trust XX:XX:XX:XX:XX:XX

Common Issues & Troubleshooting

No Audio Output

Check if PipeWire is running:

systemctl --user status pipewire
systemctl --user status pipewire-pulse
systemctl --user status wireplumber

Restart audio services:

systemctl --user restart pipewire
systemctl --user restart pipewire-pulse
systemctl --user restart wireplumber

Audio Crackling or Dropouts

Check sample rate and buffer size:

# Edit pipewire config
mkdir -p ~/.config/pipewire
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/

# Edit ~/.config/pipewire/pipewire.conf
# Look for default.clock.rate and default.clock.quantum

Example configuration for better performance:

default.clock.rate = 48000
default.clock.quantum = 1024
default.clock.min-quantum = 32
default.clock.max-quantum = 2048

Microphone Not Working

Check input levels:

# Test microphone
arecord -f cd -d 5 test.wav
aplay test.wav

# Check input devices
pactl list sources short

Set correct input device:

# List input devices with details
pactl list sources

# Set default source
pactl set-default-source [SOURCE_NAME]

Application-Specific Issues

Discord/Gaming Audio:

# Install additional codecs
sudo pacman -S lib32-pipewire lib32-pipewire-jack

OBS Studio:

# Ensure proper audio capture
# Use PipeWire/PulseAudio sources in OBS

Advanced Configuration

Low-Latency Setup

For audio production or real-time applications:

# Create custom pipewire config
mkdir -p ~/.config/pipewire/pipewire.conf.d

# Create low-latency config
cat > ~/.config/pipewire/pipewire.conf.d/99-low-latency.conf << 'EOF'
context.properties = {
    default.clock.rate = 48000
    default.clock.quantum = 64
    default.clock.min-quantum = 32
    default.clock.max-quantum = 128
}
EOF

Multiple Audio Devices

Configure routing between multiple devices:

# Use helvum for visual connection management
helvum

# Or use pw-link for command-line connections
pw-link --output
pw-link --input

Integration with HyprL

Keybindings

HyprL includes pre-configured audio keybindings:

# Volume up/down
XF86AudioRaiseVolume / XF86AudioLowerVolume

# Mute toggle
XF86AudioMute

# Microphone mute
XF86AudioMicMute

Waybar Integration

Audio status is displayed in the Waybar with:

  • Current volume level
  • Mute status indicator
  • Click to open volume control

Notification Integration

Volume changes trigger desktop notifications via:

  • dunst (notification daemon)
  • Custom volume change scripts

Quick Setup Commands

Initial Setup

# Enable user services (done automatically by HyprL installer)
systemctl --user enable pipewire
systemctl --user enable pipewire-pulse
systemctl --user enable wireplumber

# Start services
systemctl --user start pipewire
systemctl --user start pipewire-pulse
systemctl --user start wireplumber

Verify Installation

# Check if audio is working
speaker-test -t wav -c 2

# Check PipeWire status
pw-cli info

# List available devices
wpctl status

Useful Tools

Command Line

  • pw-cli: PipeWire command line interface
  • wpctl: WirePlumber control utility
  • pactl: PulseAudio control (works with PipeWire)
  • pw-link: Manage audio connections

Graphical

  • pavucontrol: Volume control and device management
  • pwvucontrol: Native PipeWire control panel
  • helvum: Visual patchbay for routing
  • qpwgraph: Qt-based patchbay

Getting Help

If you encounter audio issues not covered here:

  1. Check system logs: journalctl --user -u pipewire
  2. Visit the HyprL Community
  3. Check PipeWire documentation: PipeWire Wiki
  4. Ask on Arch Linux forums or PipeWire community channels

Need more help? Join our Discord Community or open an issue on GitHub.