echowarp

module
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 4, 2026 License: MIT

README

EchoWarp Logo

EchoWarp

Real-time network audio streaming between hosts

English | Русский | 简体中文 | Español | Français | Italiano | 한국어 | 日本語 | Deutsch | Português | Türkçe | Tiếng Việт | Polski

Release CI License Downloads


Capture audio on one machine, play it on another — in real time over the network. EchoWarp uses WebRTC for transport and Opus for compression, delivering low-latency audio with end-to-end encryption.

Features

  • 1:1 streaming — server captures, client plays (or reverse)
  • Duplex mode — bidirectional audio, both sides hear each other
  • Broadcast (1:N) — one server streams to multiple clients
  • Conference (N:N) — multi-participant mixing with personal mixes (total minus self)
  • Virtual microphone — received audio appears as a mic input (Discord, Zoom, OBS)
  • LAN discovery — automatic server detection via mDNS
  • Recording — WAV recording: mixed, per-track, or both
  • SIMD acceleration — AVX/SSE (x86) and NEON (ARM) for audio mixing
  • End-to-end encryption — AES + DTLS/SRTP
  • Cross-platform — macOS, Linux, Windows

Quick Start

  1. Download a pre-built binary from Releases (no dependencies — opus is statically linked)
  2. Run EchoWarp — an interactive menu lets you pick Server, Client, Diagnostics, and more. Or jump straight to a mode with EchoWarp server / EchoWarp client
  3. Configure everything in the interactive TUI and press Enter to start

Windows users: Download launcher scripts and place them next to EchoWarp.exe. Double-click EchoWarp.bat to launch the TUI menu — no need to open cmd.exe manually.

Interactive TUI

The TUI is the primary interface for EchoWarp. Just run EchoWarp server or EchoWarp client — the interactive setup screen opens automatically.

Setup Screen

The setup screen has a two-column layout:

Left column — Audio devices. Lists all available input/output devices with their properties (channels, sample rate, bit depth). In duplex or conference mode you assign separate capture [C] and playback [P] roles. Virtual device creation is available directly from the list.

Right column — Settings. All session parameters are configurable here with inline validation:

Setting Description
Server address Server IP/hostname (client only)
Port TCP port (default: 4415)
Password Authentication password
Mode Normal / Reverse / Duplex
Max clients Maximum connections (server only)
Sample rate 8000 / 16000 / 24000 / 48000 Hz
Channels Mono / Stereo
Opus bitrate 16–512 kbps
Echo cancellation AEC for duplex mode
TLS Enable/disable with cert and key paths
Log level debug / info / warn / error

Navigate between columns with Tab, move through fields with arrow keys, and press Enter to confirm and start streaming.

LAN Discovery

On the client setup screen, press Ctrl+F to open the discovery overlay. EchoWarp uses mDNS to automatically find servers on the local network — select one from the list and the address/port fields are filled in automatically.

Device Profiles

Press Ctrl+O to open the profiles overlay. Save your current device configuration as a named profile, load a previously saved one, or delete profiles you no longer need. Profiles remember device assignments and roles.

Streaming Screen

Once connected, the TUI shows real-time streaming status:

  • Connection stats — RTT, jitter, packet loss with threshold bars showing proximity to quality limits
  • Connection quality — overall indicator (Excellent / Good / Fair / Poor) calculated from RTT, jitter, and loss
  • Spectrum analyzer — real-time FFT frequency visualization of the audio signal
  • VU meters — per-channel audio level meters
  • Bitrate — live upload/download bitrate display
  • Device controls — volume adjustment, mute, device switching
  • Log panel — toggleable scrollable log view

TUI Keyboard Shortcuts

Key Action
Tab Switch columns (setup)
Ctrl+F LAN discovery (client setup)
Ctrl+O Device profiles (setup)
Enter Confirm and start
Ctrl+Q Quit
Ctrl+P Pause/resume streaming
Ctrl+L Toggle log panel
Ctrl+M Mute/unmute
+ / - Volume up/down
Ctrl+Up/Down Scroll logs
Ctrl+R Start/stop recording
Ctrl+D Kick client (server)
Ctrl+B Ban client (server)

Streaming Modes

EchoWarp has four streaming modes. Choose the one that fits your scenario — the mode is selected in the TUI setup screen (server side) or detected automatically (client side).

Normal — One-Way: Server to Clients

The server captures audio and sends it to all connected clients. Clients only listen.

Server [captures audio] ───→ Client 1 [plays audio]
                         ├──→ Client 2 [plays audio]
                         └──→ Client N [plays audio]

When to use: stream music/podcasts to listeners, broadcast system audio (YouTube, Spotify) to another room, send a loopback feed to a remote machine.

Devices needed:

Side Capture (input) Playback (output)
Server required
Client required

Participants: 1 server + 1…N clients (set Max clients in the TUI).


Reverse — One-Way: Clients to Server

The opposite of Normal. Clients capture audio and send it to the server. The server only listens.

Client 1 [captures audio] ───→ Server [plays audio]
Client 2 [captures audio] ──┘

When to use: use a remote microphone on the server machine, collect audio from a remote location, send a client's mic to the server speakers.

Devices needed:

Side Capture (input) Playback (output)
Server required
Client required

Participants: 1 server + 1…N clients.


Duplex — Two-Way

Both sides capture and play simultaneously. Everyone hears everyone.

Server [mic + speakers] ⟷ Client 1 [mic + speakers]
                        ⟷ Client 2 [mic + speakers]

When to use: voice call between two or more machines, intercom between rooms, collaborative audio session.

Devices needed:

Side Capture (input) Playback (output)
Server required required
Client required required

Participants: 1 server + 1…N clients. Supports AEC (echo cancellation) to prevent feedback loops.


Conference — Multi-User Mixing (N:N)

The server acts as a mixing hub. Each participant (server + clients) sends their audio and receives a personal mix of everyone else (total minus self). This prevents hearing your own voice.

Client 1 ──┐              ┌──→ Client 1 (hears Server + 2 + 3)
Client 2 ──┤  Server hub  ├──→ Client 2 (hears Server + 1 + 3)
Client 3 ──┘              └──→ Client 3 (hears Server + 1 + 2)

When to use: group calls with 3+ machines, remote rehearsals, multi-participant conferences.

Devices needed:

Side Capture (input) Playback (output)
Server (hub-only)
Server (participant) required required
Client required required

The server can work as a hub-only (no local audio — just mixing for clients) or as a full participant with its own mic and speakers.

Participants: 1 server + 2…N clients. Supports recording (mixed, per-track, or both), kick/ban, and per-participant volume control.


Mode Summary

Normal Reverse Duplex Conference
Direction Server → Clients Clients → Server Both ways Everyone ⟷ Everyone
Server devices Capture only Playback only Both Both (or none if hub)
Client devices Playback only Capture only Both Both
Max participants 1 + N 1 + N 1 + N 1 + N
AEC support yes yes
Personal mix yes
Recording yes
CLI flag (default) -r -X --conference

Tip: The number of clients is controlled by the Max clients setting in the TUI (default: 1). Set it higher if you need broadcast or multi-user scenarios.

Audio Routing Guide

Use Cases

EchoWarp supports several audio routing scenarios. The table below shows which mode and device setup to use for each:

Scenario Mode Server devices Client devices
Stream mic to remote speakers Normal Mic [Input] Speakers [Output]
Stream system audio (YouTube, Spotify) Normal 🔄 Loopback [Input] Speakers [Output]
Use remote mic in Discord/Zoom Reverse Speakers [Output] Mic [Input]
Bidirectional voice chat Duplex Mic + Speakers Mic + Speakers
Group call (3+ machines) Conference — (hub) Mic + Speakers
Remote audio as virtual mic in OBS Normal 🔄 Loopback [Input] ⟡ Virtual mic [Output]
Stream + local mic as one virtual mic Normal Mic [Input] ⟡ Virtual [Output] + 🎤 Mix mic

Loopback — Capture System Audio

Loopback devices capture all audio playing on a machine (music, video calls, game sound) and make it available as an input source.

Platform How it works Setup
macOS Aggregate Device (speakers + BlackHole) Install BlackHole: brew install blackhole-2ch. Loopback devices appear in the TUI automatically
Windows WASAPI native loopback Built-in, no extra software needed
Linux PulseAudio monitor sources Built-in with PulseAudio/PipeWire

In the TUI, loopback devices are marked with 🔄 and appear in the Input section.

Virtual Microphone — Route Audio to Other Apps

A virtual microphone makes received audio appear as a mic input that Discord, Zoom, OBS, and other applications can use.

Platform Driver Install
macOS BlackHole brew install blackhole-2ch
Windows VB-Audio Virtual Cable Download from vb-audio.com
Linux PulseAudio null-sink Created from TUI: Settings → Virtual mic → Create

On macOS and Windows, install the driver and select it in the Output section of the TUI. On Linux, the TUI creates the virtual sink automatically — in other apps, select "Monitor of EchoWarp" as the microphone.

Virtual devices are marked with ⟡ in the TUI and show adaptive instead of a fixed sample rate.

Mixing Local Microphone into Virtual Output

When you route a remote stream to a virtual output device (BlackHole, VB-Cable), third-party apps like Discord or Zoom see only the stream — they don't hear your local microphone. If you need both your voice and the stream to appear as a single mic input, EchoWarp can mix them together.

How to use: In the TUI, select a virtual device in the Output section. Input devices will appear below it as sub-items — check the microphone you want to mix in:

🔊 Output
  ⟡ BlackHole 2ch                           stereo 32-bit adaptive   [✓]
      └─ 🎤 Built-in Microphone                                      [✓]

The mixed audio (stream + mic) is written to the virtual output. In Discord/Zoom/OBS, select that virtual device as your microphone — both the stream and your voice will be heard.

OS-level alternatives (without using the built-in mixer):

Platform How Details
macOS Aggregate Device Open Audio MIDI Setup → Create Aggregate Device combining your mic + BlackHole. Select the aggregate as input in your app
Windows VoiceMeeter Free virtual mixer — route both VB-Cable and your mic into VoiceMeeter, use its output as the mic in your app
Linux PulseAudio combine-source pactl load-module module-combine-source source_name=combined slaves=<mic>,<virtual>.monitor

The built-in mixer works on all platforms and requires no additional configuration.

Device Sections

The TUI shows only the sections relevant to the current mode:

Mode + Side Visible sections
Normal server / Reverse client 🎤 Input only
Normal client / Reverse server 🔊 Output only
Duplex / Conference 🎤 Input + 🔊 Output

Diagnostics

Run EchoWarp doctor to check your audio setup:

Audio
[OK] Audio system: 2 input device(s), 2 output device(s)
[OK] Virtual audio: BlackHole 2ch detected

If no virtual audio driver is found, the doctor will show installation instructions for your platform.

FAQ

I want to listen to music from my computer on speakers in another room. → Run EchoWarp server on the music machine, select the 🔄 loopback device (your speakers) in Input. Run EchoWarp client on the remote machine, select speakers in Output.

I want to use a remote microphone for Zoom/Discord. → Run EchoWarp server in Reverse mode on the remote machine (the one with the mic). Run EchoWarp client on your machine, select a virtual audio device (BlackHole/VB-Cable) in Output. In Zoom/Discord, select that virtual device as your microphone.

I want to stream system audio (YouTube, Spotify) to another machine. → Same as "music in another room" — use 🔄 loopback on the server side. The loopback device captures everything playing through the selected speakers.

I want remote audio to appear as a mic input in OBS. → Run the server with the audio source. On your machine (client), select a virtual audio device in Output. In OBS, add an "Audio Input Capture" source and select the virtual device.

I want a two-way voice chat between two computers. → Use Duplex mode. On both machines, select a microphone in Input and speakers in Output.

I want a group call with 3+ machines. → Use Conference mode. The server acts as a hub (no devices needed). Each client selects a mic and speakers. Everyone hears everyone else, minus their own voice.

I want Discord to hear both the remote stream AND my voice through one virtual mic. → On the client, select a virtual device (BlackHole/VB-Cable) in Output. A list of input devices will appear below it — check your microphone. EchoWarp will mix the stream and your mic into the virtual output. In Discord, select the virtual device as your microphone.

I don't have BlackHole / VB-Cable installed. → Run EchoWarp doctor — it will tell you exactly what to install and how. On Linux, no extra software is needed.

The loopback device doesn't appear in the TUI. → macOS: Install BlackHole first (brew install blackhole-2ch). Windows/Linux: loopback devices are built-in and should appear automatically.

The virtual device shows "adaptive" instead of a sample rate. → This is normal. Virtual audio drivers (BlackHole, VB-Cable) adapt to whatever sample rate the application uses — the displayed rate is not meaningful.

CLI Mode

All settings available in the TUI can also be passed as CLI flags for scripting and automation:

# Server
EchoWarp server -d 1 -P mypassword

# Client (auto-discovers server on LAN if -a is omitted)
EchoWarp client -a 192.168.1.10 -d 2 -P mypassword

# List audio devices
EchoWarp devices

Modes

See Streaming Modes for detailed descriptions of each mode.

Mode Flag
Normal (default)
Reverse -r
Duplex -X
Conference --conference

Common Flags

Flag Short Description
--device -d Audio device ID
--device-name -D Select device by name (substring match)
--password -P Authentication password
--port -p TCP port (default: 4415)
--sample-rate Sample rate (default: 48000)
--channels 1=mono, 2=stereo (default: 1)
--max-clients Max connected clients (default: 1)
--virtual-mic Create virtual microphone device
--config -c Load YAML config file
--save-config -s Save current settings to YAML
--profile Load saved device profile
--stun-server Custom STUN servers for NAT traversal
--tls-cert / --tls-key TLS certificate and key
--log-level debug, info, warn, error
--aec Acoustic echo cancellation (duplex)
--loopback Capture system audio (macOS, requires BlackHole)
--dry-run Validate config and exit

Configuration

Settings priority: CLI flags > environment variables (ECHOWARP_*) > config file > defaults.

The TUI setup screen allows you to save and load configuration files interactively. You can also use CLI flags:

# Save current settings to a file
EchoWarp server -d 1 -P pass --channels 2 -s myconfig.yml

# Load settings from a file
EchoWarp server -c myconfig.yml

Installation

Pre-built binaries

Download from the Releases page. Available for:

  • macOS — arm64 (Apple Silicon), amd64 (Intel), includes .app bundle
  • Linux — amd64, arm64, armv7, armv6
  • Windows — amd64, arm64

Build from source

Requires Go 1.22+ and libopus development headers.

# macOS
brew install opus pkg-config

# Ubuntu/Debian
sudo apt-get install libopus-dev pkg-config

# Fedora
sudo dnf install opus-devel pkgconfig
git clone https://github.com/lHumaNl/EchoWarp.git
cd EchoWarp
make build

The resulting binary statically links opus — no runtime dependency needed.

System Requirements

  • macOS 11.0+ (arm64, amd64)
  • Linux (amd64, arm64, armv7, armv6)
  • Windows 10+ (amd64, arm64)

For virtual microphone:

Network & Firewall

Server — ports to open

Port Protocol Purpose
4415 TCP Signaling (authentication + WebRTC handshake)
4415 UDP Audio media (WebRTC). Multiplexed — one port handles all clients
4416 TCP Session info probe (client auto-configuration)

Port 4415 is the default and can be changed with --port. The session info port is always port + 1.

In short: open TCP 4415–4416 and UDP 4415 inbound on the server.

Client — no inbound ports required

The client only makes outbound connections. No firewall or port-forwarding rules are needed on the client side.

LAN discovery

If you use mDNS auto-discovery (Ctrl+F in setup), allow UDP multicast on port 5353. This can be disabled with --no-discovery.

NAT traversal (STUN / TURN)

EchoWarp uses STUN servers to establish connections through NAT. If both sides are behind symmetric NAT and a direct connection cannot be established, a TURN relay server can be configured (turn_servers in config). Both STUN and TURN are outbound connections and do not require any inbound firewall rules.

License

MIT — see THIRD_PARTY_NOTICES.md for third-party licenses.

Directories

Path Synopsis
cmd
echowarp command
Package main is the entry point for the EchoWarp application.
Package main is the entry point for the EchoWarp application.
internal
api
Package api provides HTTP REST API and WebSocket for daemon control.
Package api provides HTTP REST API and WebSocket for daemon control.
app
Package app orchestrates the application modes.
Package app orchestrates the application modes.
app/mocks
Package mocks provides mock implementations for testing the app layer.
Package mocks provides mock implementations for testing the app layer.
cli
Package cli implements the command-line interface for EchoWarp.
Package cli implements the command-line interface for EchoWarp.
config
Package config provides configuration management for EchoWarp.
Package config provides configuration management for EchoWarp.
daemon
Package daemon provides process lifecycle management for EchoWarp background operation.
Package daemon provides process lifecycle management for EchoWarp background operation.
logging
Package logging provides structured logging utilities for EchoWarp.
Package logging provides structured logging utilities for EchoWarp.
preset
Package preset provides persistence for device presets (server mode).
Package preset provides persistence for device presets (server mode).
probe
Package probe provides HTTP probing of EchoWarp servers via the session-info endpoint.
Package probe provides HTTP probing of EchoWarp servers via the session-info endpoint.
recent
Package recent persists the most recently connected servers to disk.
Package recent persists the most recently connected servers to disk.
tui
Package tui implements the terminal user interface for EchoWarp using Bubble Tea.
Package tui implements the terminal user interface for EchoWarp using Bubble Tea.
tui/styles
Package styles provides consolidated Lip Gloss styling definitions for the TUI.
Package styles provides consolidated Lip Gloss styling definitions for the TUI.
tui/views
Package views provides the chat panel component for the streaming screen.
Package views provides the chat panel component for the streaming screen.
updater
Package updater provides functionality to check for and install updates from GitHub releases.
Package updater provides functionality to check for and install updates from GitHub releases.
version
Package version provides build-time version information for EchoWarp.
Package version provides build-time version information for EchoWarp.
pkg
echowarp
Package echowarp provides the core EchoWarp audio streaming functionality.
Package echowarp provides the core EchoWarp audio streaming functionality.
echowarp/audio
Package audio provides audio capture and playback functionality.
Package audio provides audio capture and playback functionality.
echowarp/audio/coreaudio
Package coreaudio provides CoreAudio device management (macOS-only, stubs on other platforms).
Package coreaudio provides CoreAudio device management (macOS-only, stubs on other platforms).
echowarp/auth
Package auth provides authentication mechanisms for EchoWarp.
Package auth provides authentication mechanisms for EchoWarp.
echowarp/ban
Package ban provides IP-based banning functionality for EchoWarp.
Package ban provides IP-based banning functionality for EchoWarp.
echowarp/discovery
Package discovery provides LAN discovery functionality for EchoWarp using mDNS/DNS-SD.
Package discovery provides LAN discovery functionality for EchoWarp using mDNS/DNS-SD.
echowarp/errors
Package errors provides structured error handling with error codes for EchoWarp.
Package errors provides structured error handling with error codes for EchoWarp.
echowarp/metrics
Package metrics provides Prometheus metrics for monitoring EchoWarp.
Package metrics provides Prometheus metrics for monitoring EchoWarp.
echowarp/quality
Package quality provides real-time connection quality monitoring for WebRTC connections.
Package quality provides real-time connection quality monitoring for WebRTC connections.
echowarp/transport
Package transport provides WebRTC-based network transport.
Package transport provides WebRTC-based network transport.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL