🎧 Integrated Audio Monitoring System

Aggregate audio alerts from multiple devices over LAN using the Scream Protocol

Windows Linux / PipeWire CLI / Automation Embedded

This 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.

🌐 Network Requirements

Before installing any software, confirm your network is ready:

Protocol
UDP Multicast
Default Multicast IP
239.255.77.77
Port
4010
Signaling
IGMP (auto)
⚠️ Open UDP port 4010 on all receiver firewalls. Ensure your switches/routers allow multicast traffic (IGMP). For networks without multicast support, unicast mode is also available.

🏗️ System Architecture

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.

[ SENDERS ] [ NETWORK ] [ RECEIVER ] +-------------------------+ | Windows Desktop / Server| | Apps / System Audio | | ▼ | | Scream Kernel Driver |---+ +-------------------------+ | +------------------+ | UDP Multicast | LAN Switch | +------------------------+ +-------------------------+ +----------------->| 239.255.77.77 |-->| Central Monitor PC | | Linux Server / Laptop | | (Raw PCM) | Port: 4010 | |------------------------| | System / Media Audio | | | IGMP Signaling | | [Win] ScreamReader | | ▼ | | +------------------+ | [Lin] PulseAudio/ALSA | | PipeWire Virtual Sink |---+ | [Emb] ESP32 / STM32 | +-------------------------+ | +-------------|----------+ | ▼ +-------------------------+ | [ Speakers / Headset ] | CLI / Automation Script | | | Audio Files (WAV/MP3) | | | ▼ | | | screamplay Utility |---+ +-------------------------+

🖼️ Visual Overview

Architecture Infographic

Scream Ecosystem Architecture Infographic Generated by NotebookLM · Virtual Network Audio Ecosystem Overview

Protocol Mind Map

Scream Protocol Mind Map The Scream Ecosystem Audio Architecture and Networking Map

🪟 Step 1 — Windows Sender (duncanthrax/scream)

Installs a virtual sound card driver. All audio played on the machine is broadcast as a PCM multicast stream.

Windows 10

  1. Download the ZIP (signed builds for x64, x86, arm64) from the GitHub releases page.
  2. If Secure Boot is enabled, disable it in BIOS first (cross-signed kernel drivers require it to be off).
  3. Extract the ZIP and run the installer batch file as Administrator.
  4. Open Sound Settings and set Scream as the default playback device.

Windows 11

⚠️ The installer batch file uses devcon, which is not compatible with Windows 11. Use the pnputil method below instead.
  1. Ensure Secure Boot is disabled.
  2. Open an Administrator command prompt and enable Test Mode:
    bcdedit /set testsigning on
    Reboot and confirm "Test Mode" appears on the desktop wallpaper.
  3. Navigate to the driver folder and install:
    cd <scream folder>\Install\driver\x64
    pnputil /add-driver .\Scream.inf /install
  4. Disable Test Mode and restart:
    bcdedit /set testsigning off
  5. Open Sound Settings and set Scream as the default playback device.

🐧 Step 2 — Linux PipeWire Sender (zirize/pipewire-scream)

Creates a virtual audio sink in PipeWire. Audio routed to this sink is transmitted via Scream protocol.

Prerequisites

Install Dependencies

# 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

Build & Install

  1. Clone and build:
    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/).
  2. Configure auto-load on PipeWire startup:
    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.
  3. Apply changes by restarting PipeWire:
    systemctl --user restart pipewire

PipeWire Module Configuration Parameters

ArgumentTypeDefaultDescription
sink.namestringScreamName of the virtual sink
ipstring239.255.77.77Destination IP (multicast or unicast)
portint4010Destination UDP port
rateint48000Default sample rate
channelsint2Default channel count
formatstringS16LEAudio format (S16LE, S24LE, S32LE)
multicast.ttlint1Multicast TTL (1–255)

⌨️ Step 3 — CLI Audio Playback (zirize/screamplay)

Streams audio files directly onto the Scream network without needing a virtual sound card. Ideal for automation, alerting scripts, or batch playback.

Dependencies & Build

  1. Install dependencies:
    # Ubuntu / Debian
    sudo apt install libsndfile1-dev libsamplerate0-dev
  2. Clone and build:
    git clone https://github.com/zirize/screamplay.git
    cd screamplay && make
  3. Play an audio file:
    ./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.

📡 Step 4 — Receiver Setup

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.

🪟 Windows — ScreamReader

Included in the duncanthrax/scream installer package (v1.2+). Run as administrator. Does not support positional mapping for multichannel setups.

🐧 Linux — Unix Receiver

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.

🔌 Embedded — cornrow / ESP32 / STM32

For ethernet-attached active speakers. Third-party receivers for cornrow, ESP32, and STM32F429 are available.

Receiver Troubleshooting

IssueCheck
No audio receivedVerify firewall allows UDP 4010; confirm multicast/IGMP on network
PipeWire module fails to loadjournalctl --user -u pipewire -f · verify module path with find /usr/lib* -name "*scream*"
Packet inspectionsudo tcpdump -i any udp port 4010
High bit rate warningUse 48 kHz / 16-bit for 5.1+ channels; avoid 24/32-bit in multichannel