What it does
Audio played to the virtual sink is transmitted as raw PCM over UDP — multicast by default
(239.255.77.77:4010), unicast on request — to any Scream receiver on the network. It is
the Linux/PipeWire equivalent of the Windows Scream driver, so existing receivers work unchanged.
- Virtual audio sink in PipeWire
- Multicast and unicast
- Configurable sample rate, bit depth and channel count
- Low latency, stable over long playback
Build
Needs PipeWire ≥ 0.3, CMake ≥ 3.10 and a C11 compiler.
# Ubuntu/Debian
sudo apt-get install libpipewire-0.3-dev pipewire cmake build-essential
# Fedora/RHEL
sudo dnf install pipewire-devel cmake gcc
# Arch
sudo pacman -S pipewire cmake gcc
git clone https://github.com/zirize/pipewire-scream.git
cd pipewire-scream
mkdir build && cd build
cmake .. && make && sudo make install
Loading it automatically
mkdir -p ~/.config/pipewire/pipewire.conf.d/
cp scream-sender.conf.example ~/.config/pipewire/pipewire.conf.d/scream-sender.conf
systemctl --user restart pipewire
Multicast, the default:
context.modules = [
{ name = libpipewire-module-scream }
]
Unicast to one receiver, or higher quality:
context.modules = [
{ name = libpipewire-module-scream
args = { ip = "192.168.1.100" } }
]
context.modules = [
{ name = libpipewire-module-scream
args = { rate = 96000, format = "S24LE" } }
]
Module arguments
| Argument | Type | Default | Description |
|---|---|---|---|
sink.name | string | Scream | Name of the virtual sink |
sink.description | string | Scream Network Sink | Description shown in audio settings |
ip | string | 239.255.77.77 | Destination IP, multicast or unicast |
port | int | 4010 | Destination UDP port |
interface | string | auto | Network interface to use |
multicast.ttl | int | 1 | Multicast TTL (1–255) |
rate | int | 48000 | Sample rate (8000–384000) |
channels | int | 2 | Channel count (1–255) |
format | string | S16LE | S16LE, S24LE, S32LE |
Advanced: Audio Relay (Mixing)
zirize/pipewire-scream can turn your Linux PC into a central Audio Relay. This allows you to route various inputs (microphone, Line-In, Bluetooth) into the virtual sink and stream them with zero latency to other devices.
1. Configure the Relay Sender
It is recommended to use Unicast to target the specific receiving device.
mkdir -p ~/.config/pipewire/pipewire.conf.d/
# Create scream-sender.conf
context.modules = [
{
name = libpipewire-module-scream
args = {
ip = "192.168.1.100" # Receiving device's IP
silence.threshold = 24000 # Pause transmission on silence
}
}
]
2. Route the Audio
You must route incoming sources to the Scream virtual sink:
- Method A (GUI): Use qpwgraph or Helvum and visually connect the source pins to the Scream sink.
- Method B (CLI): Use
pw-linkto connect the ports (e.g.,pw-link "Source:capture_FL" "Scream:playback_FL"). - Method C (Persistent Loopback): Load
libpipewire-module-loopbackvia a PipeWire conf file to automatically route a specificnode.target(like an alsa_input) to theScreamsink.
3. Relay Tips
- Stuttering: UDP is sensitive to packet loss. Wired ethernet is recommended.
- Mismatched Rates: Ensure the sample rate matches the receiver to avoid audio artifacts.
- Bandwidth: Use
silence.thresholdto pause network transmission during silent periods.
Receiving the stream
Any Scream receiver works. On Linux, the Unix receiver from the main Scream repository
(./scream -o pulse); on Windows, ScreamReader from the Scream package. Receivers must
open UDP port 4010, and for multicast the network needs working IGMP:
ip route show
sudo ip route add 224.0.0.0/4 dev eth0
Checking it works
pactl list sinks short | grep Scream
paplay --device=Scream /path/to/audio.wav
mpv --audio-device=pipewire/Scream music.mp3
journalctl --user -u pipewire -f | grep -i scream
sudo tcpdump -i any udp port 4010
Troubleshooting
- Module fails to load — check
journalctl --user -u pipewire -fand verify the path withfind /usr/lib* -name "*scream*". - No audio transmitted — firewall, wrong interface, or no multicast route.
- Dropouts — network jitter; prefer wired. Default 48 kHz / 16-bit / stereo is about 1.5 Mbit/s and higher settings scale proportionally.
Known issues: short WAV files may carry slight noise depending on the source, and PipeWire < 1.0 is untested.
Licence
MS-PL (Microsoft Public License), the same as the main Scream project.