Aggregate audio alerts from multiple devices over LAN using the Scream Protocol
Windows Linux / PipeWire CLI / Automation EmbeddedThis guide covers the complete deployment of a network audio monitoring system using the Scream ecosystem — a set of tools that transmit raw PCM audio over UDP multicast/unicast on a local network. Monitor audio alerts from dozens of machines without a single audio cable.
Before installing any software, confirm your network is ready:
Audio from each sender is captured by a virtual device driver and broadcast as raw PCM over the LAN. Any receiver on the same network can pick up and play the stream.
Generated by NotebookLM · Virtual Network Audio Ecosystem Overview
The Scream Ecosystem Audio Architecture and Networking Map
duncanthrax/scream)Installs a virtual sound card driver. All audio played on the machine is broadcast as a PCM multicast stream.
installer batch file as Administrator.devcon, which is not compatible with Windows 11. Use the pnputil method below instead.bcdedit /set testsigning onReboot and confirm "Test Mode" appears on the desktop wallpaper.cd <scream folder>\Install\driver\x64
pnputil /add-driver .\Scream.inf /installbcdedit /set testsigning offzirize/pipewire-scream)Creates a virtual audio sink in PipeWire. Audio routed to this sink is transmitted via Scream protocol.
# Ubuntu / Debian
sudo apt install pipewire libpipewire-0.3-dev cmake gcc
# Fedora / RHEL
sudo dnf install pipewire-devel cmake gcc
# Arch Linux
sudo pacman -S pipewire cmake gcc
git clone https://github.com/zirize/pipewire-scream.git
cd pipewire-scream
cmake -B build && cmake --build build
sudo cmake --install build
Module is installed to /usr/lib/pipewire-0.3/ (or /usr/lib/x86_64-linux-gnu/pipewire-0.3/).
mkdir -p ~/.config/pipewire/pipewire.conf.d
cp scream-sender.conf.example ~/.config/pipewire/pipewire.conf.d/scream-sender.conf
Optionally edit the file to change IP (unicast), port, or sample rate.
systemctl --user restart pipewire
| Argument | Type | Default | Description |
|---|---|---|---|
sink.name | string | Scream | Name of the virtual sink |
ip | string | 239.255.77.77 | Destination IP (multicast or unicast) |
port | int | 4010 | Destination UDP port |
rate | int | 48000 | Default sample rate |
channels | int | 2 | Default channel count |
format | string | S16LE | Audio format (S16LE, S24LE, S32LE) |
multicast.ttl | int | 1 | Multicast TTL (1–255) |
zirize/screamplay)Streams audio files directly onto the Scream network without needing a virtual sound card. Ideal for automation, alerting scripts, or batch playback.
# Ubuntu / Debian
sudo apt install libsndfile1-dev libsamplerate0-dev
git clone https://github.com/zirize/screamplay.git
cd screamplay && make
./screamplay alert.wav
./screamplay notification.mp3
Supports WAV, FLAC, OGG, AIFF, MP3 (via libsndfile). Non-standard sample rates are automatically resampled to 48 kHz via libsamplerate.
Once senders are transmitting, a receiver on the same LAN picks up the 239.255.77.77:4010 multicast stream and plays it through physical audio output.
Included in the duncanthrax/scream installer package (v1.2+). Run as administrator. Does not support positional mapping for multichannel setups.
Located in Receivers/unix of the main Scream repo. Interfaces with PulseAudio, JACK, or ALSA. Build with cmake and run with your preferred audio backend.
For ethernet-attached active speakers. Third-party receivers for cornrow, ESP32, and STM32F429 are available.
| Issue | Check |
|---|---|
| No audio received | Verify firewall allows UDP 4010; confirm multicast/IGMP on network |
| PipeWire module fails to load | journalctl --user -u pipewire -f · verify module path with find /usr/lib* -name "*scream*" |
| Packet inspection | sudo tcpdump -i any udp port 4010 |
| High bit rate warning | Use 48 kHz / 16-bit for 5.1+ channels; avoid 24/32-bit in multichannel |