Use ScreamReader to receive and play back Wave-streams
masterscream. It utilizes the NAudio library for audio playback and provides a simple volume-control interface.repository·master·Indexed 23 days ago
https://github.com/duncanthrax/screamA virtual network sound card for Microsoft Windows that broadcasts audio as a PCM multicast stream over a local network. It enables low-latency audio streaming to receivers on Unix/Linux, Windows, or embedded devices (STM32F429, ESP32). The project includes a Windows driver, a C# receiver (ScreamReader), a Unix receiver supporting PulseAudio, JACK, and ALSA, and a Wireshark dissector for protocol analysis. It also supports IVSHMEM for Windows guest to Linux host audio in QEMU/KVM environments.
scream. It utilizes the NAudio library for audio playback and provides a simple volume-control interface.Scream transfers raw PCM audio in UDP frames.
Packet Structure:
dwChannelMask from the Microsoft WAVEFORMATEXTENSIBLE structure, mapping channels to speaker positions.Receiver Implementation Note: Receivers should open a multicast listen socket and implement minimal buffering (approximately 4 times the UDP payload size) to account for jitter.
The Scream driver emits UDP datagrams consisting of a 5-byte header followed by interleaved, little-endian PCM audio data. The default multicast destination is 239.255.77.77:4010.
| Offset | Size | Description |
|---|---|---|
| 0 | 1 | Sample rate marker |
| 1 | 1 | Bits per sample (16, 24, or 32) |
| 2 | 1 | Number of interleaved channels (1–8) |
| 3 | 2 | Channel map (little-endian Windows speaker mask) |
| 5 | N | PCM payload (interleaved, little-endian samples) |
The first byte encodes the base sampling family and a multiplier via the lower 7 bits:
1 → 48 kHz, 2 → 96 kHz, 4 → 192 kHz, etc.1 → 44.1 kHz, 2 → 88.2 kHz, 4 → 176.4 kHz, etc.The 2-byte mask follows the Windows speaker mask layout (KS digital). Examples include:
0x0001: Front Left0x0002: Front Right0x0003: Stereo (Front Left + Front Right)0x060F: 5.1 surround (Front L/R/C, Low Frequency, Back L/R)To decode Scream traffic in Wireshark, install the scream.lua plugin into your Wireshark plugin directory and restart the application.
%APPDATA%\Wireshark\plugins~/Library/Application Support/Wireshark/Plug-ins~/.local/lib/wireshark/plugins/<version>After restarting, packets should be labeled SCREAM with decoded header information.
Scream publishes audio as a PCM multicast stream on the local network.
Default Stream Details:
239.255.77.774010 (UDP)Available Receivers:
ScreamReader (included in the installer package). Note: It does not support positional mapping for multichannel setups.Receivers/unix folder in the repository).cornrow (for embedded devices), STM32F429 (ARM), and ESP32 receivers.Firewall Requirement: If your receiver system has a firewall, you must open UDP port 4010 (or your custom port).
Scream can receive audio over the network using either Multicast or Unicast modes.
scream without arguments to start in multicast mode using the default audio output.-u option.-i option to specify the interface that should receive the Scream packets.Example for specifying an interface:
scream -i eth0The standard installer is not compatible with Windows 11. You must use pnputil and put Windows into Test Mode.
Steps:
bcdedit /set testsigning on
Reboot your machine. You should see "Test Mode" in the bottom-right corner of your wallpaper.<scream folder>/Install/driver/<architecture>/, and run:
pnputil /add-driver .\Scream.inf /installbcdedit /set testsigning off
Restart your computer. Ensure "Test Mode" is no longer visible. The Scream audio device should now appear in your audio settings.bcdedit /set testsigning on
pnputil /add-driver .\Scream.inf /install
bcdedit /set testsigning offDownload the signed builds from the GitHub releases page. The installer is a batch file that must be run with administrator rights.
If your Windows 10 installation has tightened kernel driver signing rules (common in newer installations), the driver may fail to install. You can use one of these workarounds:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy]
"UpgradedSystem"=dword:00000001The libpcap mode allows the Scream client to act as a sniffer. This is useful if UDP multicast/unicast traffic is visible in tools like wireshark or tcpdump but is not being delivered to the user-space Scream client. Use the -P flag and specify the interface with -i.
Example:
scream -P -i macvtap0Scream can use IVSHMEM for shared memory communication. Ensure you have read and execute permissions for the shared memory device before running.
Example:
scream -m /dev/shm/scream-ivshmemThe Scream receiver for Unix can be compiled using CMake. The build process automatically detects Pulseaudio or ALSA headers. If Pulseaudio is found, it becomes the default output; otherwise, ALSA is used. If neither is found, the receiver defaults to raw/stdout output.
To compile, create a build directory, run CMake, and then make:
$ mkdir build && cd build
$ cmake ..
$ make