Audio Configuration
Table of Contents
- Overview
- Core Components
- Configuration Files
- Audio Device Management
- Bluetooth Audio
- Common Issues & Troubleshooting
- Advanced Configuration
- Integration with HyprL
- Quick Setup Commands
- Useful Tools
- Getting Help
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 interfacewpctl
: WirePlumber control utilitypactl
: PulseAudio control (works with PipeWire)pw-link
: Manage audio connections
Graphical
pavucontrol
: Volume control and device managementpwvucontrol
: Native PipeWire control panelhelvum
: Visual patchbay for routingqpwgraph
: Qt-based patchbay
Getting Help
If you encounter audio issues not covered here:
- Check system logs:
journalctl --user -u pipewire
- Visit the HyprL Community
- Check PipeWire documentation: PipeWire Wiki
- Ask on Arch Linux forums or PipeWire community channels
Need more help? Join our Discord Community or open an issue on GitHub.