# PipeWire 7.1 Virtual Surround Sound This repository contains a custom PipeWire daemon configuration (`pipewire.conf`) that enables 7.1 virtual surround sound for standard stereo headphones. It utilizes PipeWire's `libpipewire-module-filter-chain` along with a convolution filter to process an 8-channel audio stream using a HeSuVi Head-Related Impulse Response (HRIR) file, downmixing it into a highly immersive spatial stereo output. ## 🚀 Features * **7.1 Channel Downmixing:** Intercepts 7.1 surround sound input from games and media. * **HRIR Convolution:** Uses HeSuVi 14-channel WAV files (such as `atmos.wav`) for accurate 3D spatial positioning. * **Low Latency Native Audio:** Runs directly within the PipeWire graph with realtime priority scheduling. ## 📋 Prerequisites Before installing, ensure your Linux environment meets the following requirements: * **PipeWire** (This config is based on version 1.4.7) * **WirePlumber** or a compatible PipeWire session manager * **A HeSuVi 14-channel HRIR file**: You will need a compatible `.wav` file (e.g., an Atmos HRIR from the HeSuVi project). ## 🛠️ Installation ### 1. Prepare the HRIR File You need a HeSuVi 14-channel `.wav` impulse response file. 1. Obtain your preferred HRIR file and rename it to `atmos.wav`. 2. Create the local PipeWire config directory if it doesn't already exist: ```bash mkdir -p ~/.config/pipewire/ ``` 3. Place `atmos.wav` inside the `~/.config/pipewire/` directory. ### 2. Configure the File Paths (Important) By default, the provided `pipewire.conf` file contains a hardcoded path to a specific user's home directory (`/home/[YOUR_USER]/`). **You must edit the `pipewire.conf` file** to match your actual username so PipeWire can find the HRIR file. Open `pipewire.conf`, locate the `filter.graph` nodes section, and replace `/home/[YOUR_USER]/` with the proper path for all 16 lines: ```conf { type = builtin label = convolver name = convFL_L config = { filename = "/home/YOUR_USERNAME/.config/pipewire/atmos.wav" channel = 0 } } { type = builtin label = convolver name = convFL_R config = { filename = "/home/YOUR_USERNAME/.config/pipewire/atmos.wav" channel = 1 } } # ... update all remaining lines ... ``` ### 3. Apply the Configuration 1. Copy your modified `pipewire.conf` into your local user PipeWire configuration directory: ```bash cp pipewire.conf ~/.config/pipewire/pipewire.conf ``` *(Note: Placing it in `~/.config/pipewire/` limits the changes to your user. For system-wide changes, use `/etc/pipewire/pipewire.conf` instead).* 2. Restart your PipeWire audio services to apply the new configuration: ```bash systemctl --user restart pipewire pipewire-pulse wireplumber ``` ## 🎮 Usage Once the services have restarted successfully, open your desktop environment's sound settings (e.g., KDE/GNOME audio settings) or `pavucontrol`. 1. Look for a new Output Device named **"7.1 Virtual Surround Sink"**. 2. Set it as your **Default Output Device**. 3. Any game or media player will now output 7.1 surround to this sink, which will convolve the audio using your HRIR file and output spatialized stereo to your physical headphones. ## 💡 Troubleshooting * **No Sound / Sink Missing?** Double-check the absolute paths to the `atmos.wav` file in `pipewire.conf`. If PipeWire cannot locate the convolution `.wav` file at the exact path specified, the filter chain module will fail to load, and the sink will not appear. * **Routing Issues:** You can use a patchbay tool like **qpwgraph** or **Helvum** to visually inspect your PipeWire routing. Ensure the `7.1 Virtual Surround Sink` is capturing the audio and that its `mixL` and `mixR` outputs are correctly wired to the playback ports of your physical stereo headphones. # Alternative on CachyOS install Virtual-Surround-Manager ``` paru -S virtual-surround-manager ```