Share any sound card
over Ethernet.
The server PC shares its physical sound card — MOTU, RME, Focusrite, Universal Audio, PreSonus, Behringer — with a remote PC that sees it as a local device. Low-latency UDP streaming (~1.3 ms), auto-discovery over the network, bidirectional 48 kHz / 32-bit float audio. A single Rust binary and zero dependencies.
git clone https://github.com/devfrp/RJ-45-SOUND-CARD.git && cd rj45-sound-card && cargo build --release
An RJ45 cable, a professional audio link
RJ45 Sound Card turns a simple Ethernet cable into a multi-platform audio link. Just three network channels: discovery over UDP broadcast, audio over pure UDP, control over TCP. The client finds the server by itself and the remote sound card shows up as a local device — ideal for real-time monitoring between the studio and a laptop.
Features
Cross-platform
Windows, Linux and macOS. A single Rust binary, no external dependencies.
All sound cards
MOTU, RME, Focusrite, Universal Audio, Presonus, Behringer... compatible with any device recognized by the OS.
Bidirectional
Audio from studio to laptop AND mic/input capture from laptop sent back to studio.
Low latency
Pure UDP streaming with configurable buffers (64–1024 frames). Ideal for real-time monitoring.
Auto-discovery
The client automatically finds servers on the local network via UDP broadcast.
Virtual device
The remote sound card appears as a local device (ALSA loopback, BlackHole, VB-Cable).
Architecture
Server and client linked by three channels: discovery, audio, control.
UDP TX · UDP RX → playbackUDP RX → local playback · capture → UDP TXNetwork ports
| Port | Protocol | Usage |
|---|---|---|
| 42000 | UDP | Service discovery (JSON broadcast every 3s) |
| 42001 | UDP | Audio stream (raw PCM f32) |
| 42002 | TCP | Control (JSON messages, length-prefixed format) |
Install
Build
git clone https://github.com/devfrp/RJ-45-SOUND-CARD.git
cd rj45-sound-card
cargo build --release
./target/release/rjsc --help
Virtual audio device (client)
# Linux 🐧 sudo ./scripts/linux_setup.sh install # macOS 🍎 sudo ./scripts/mac_setup.sh install # Windows 🪟 powershell -ExecutionPolicy Bypass -File scripts\windows_setup.ps1 install
Usage
1 · List devices
# On both machines
rjsc list
2 · Configure
rjsc init # generates rjsc.toml
3 · Server (Studio PC)
# Share the sound card (MOTU, RME...)
rjsc serve
4 · Client (Laptop)
# Automatic connection rjsc connect # Or direct address rjsc connect --server 192.168.1.100:42002
5 · GUI
# Control panel
rjsc gui
Latency
For 48 channels @ 48 kHz: ~55 Mbps, well within Gigabit Ethernet capacity.
| Buffer | Latency (48 kHz) | Usage |
|---|---|---|
| 64 frames | ~1.3 ms | Real-time monitoring |
| 128 frames | ~2.7 ms | Optimal performance |
| 256 frames | ~5.3 ms | Standard usage |
| 512 frames | ~10.7 ms | Non-optimized network |
| 1024 frames | ~21.3 ms | Troubleshooting |
Concrete example · Studio → Laptop
The studio PC (server) shares its physical sound card (e.g. MOTU, RME, Focusrite...) with a laptop (client) via RJ45. The client sees the remote sound card as a local device thanks to the virtual audio device. Latency is configurable down to ~1.3 ms over Gigabit Ethernet.
Technical specifications
| Specification | Value |
|---|---|
| Language | Rust (edition 2021) |
| Build | Rust 1.96+, cargo build --release |
| Supported OS | Windows 10/11, Linux (kernel 5.10+), macOS 12+ |
| Architectures | x86_64 (AMD64), ARM64 (Apple Silicon native) |
| Sample rate | 44.1 kHz, 48 kHz, 88.2 kHz, 96 kHz, 176.4 kHz, 192 kHz |
| Audio format | PCM f32 (32-bit float), stereo by default |
| Channels | 1 (mono) to 48 simultaneous channels |
| Buffer | 64 — 1024 frames (configurable) |
| Minimum latency | ~1.3 ms @ 48 kHz / 64 frames (Gigabit Ethernet) |
| Bandwidth | ~55 Mbps for 48 channels @ 48 kHz |
| Discovery protocol | UDP JSON broadcast (port 42000), every 3 seconds |
| Audio protocol | UDP raw PCM stream (port 42001) |
| Control protocol | TCP JSON messages length-prefixed (port 42002) |
| Virtual device | ALSA snd-aloop (Linux), BlackHole (macOS), VB-Cable (Windows) |
| GUI | egui / eframe (Rust), real-time control panel |
| License | MIT |
FAQ
What is the actual latency in practice?
Over Gigabit Ethernet with a 64-frame buffer: ~1.3 ms. With a 128-frame buffer: ~2.7 ms. Latency mainly depends on cable quality and network load. A dedicated Cat6 or Cat7 cable is recommended.
Can I use Wi-Fi instead of Ethernet?
Technically yes, but it is strongly discouraged. Wi-Fi introduces jitter and packet loss that degrade audio. Gigabit Ethernet is required for professional-grade latency.
How many simultaneous audio channels?
Up to 48 simultaneous channels in 48 kHz stereo. The required bandwidth is about 55 Mbps, well below the 1000 Mbps of Gigabit Ethernet.
Does it work with an external USB sound card?
Yes. The server shares any device recognized by the OS — internal PCIe cards, USB interfaces, FireWire, Thunderbolt. The client receives the stream as a local device.
How to configure the virtual audio device on the client?
Linux: sudo ./scripts/linux_setup.sh install (installs snd-aloop).
macOS: sudo ./scripts/mac_setup.sh install (installs BlackHole).
Windows: provided PowerShell script (VB-Cable).
Is the project stable for production use?
The project is functional for monitoring and light production sessions. We recommend prior testing before any use in critical environments.
Documentation
Select a document to view its content.
📚 RJ45 Sound Card Documentation
Select a document to view its content.