EdnunpandClaude Opus 4.7 4915a9afe1 Bump to v1.5.0: cross-lane routing fix, recording double-tap fix, menu reorg
Bug fixes:
* BothIndependent recording was double-tapped — when both WASAPI and
  ASIO outputs were ticked, recordings came out garbled and ~2x the
  expected duration. AudioRecorder now uses four per-lane rings
  (sent-wasapi, sent-asio, recv-wasapi, recv-asio) plus a writer-
  thread mix step that drains min(wasapi, asio) frames and sum-mixes
  with the soft-tanh limiter. Tap signatures gained a RenderRoute
  parameter; Mixed maps to the wasapi slot.
* A peer announcing on the WASAPI lane was inaudible when the
  receiver only had an ASIO output ticked (and vice versa). The
  session opened, samples flowed into the SessionPlayout ring, but
  ReadForRoute(AsioLane) skipped any session whose Route was
  WasapiLane so nothing drained the ring. PlayoutEngine now tracks
  per-lane "is this lane backed by a device" via volatile bools
  settable through SetLaneActive(RenderRoute, bool), called from
  CompositeRenderBackend.SetOutputDevices whenever the device split
  changes. ReadForRoute admits orphan sessions when the other lane
  is inactive.

Menu reorganisation:
* New Options menu (Alt+O) holds Recording settings (Alt+S), Keyboard
  shortcuts (Alt+K, Ctrl+K), Startup behaviour (Alt+T), Preferences
  (Alt+P, Ctrl+P). Pre-v1.5 these were scattered across File menu,
  Record menu, and inside the Preferences dialog itself.
* Record menu mnemonic moved from Alt+O to Alt+K, rendered as
  "Record (Alt+K)" so the chord is visible despite K not being a
  letter in "Record". Alt+R is taken by Receive audio.
* File menu — new Recent profiles submenu (Alt+F, R) listing the
  five most-recently-opened profiles. Press 1..5 inside the submenu
  to jump to a slot. Missing files are skipped from the menu but
  kept in storage.
* Rename current profile moves to Alt+M (was R), Minimise to tray
  moves to Alt+N (was M).
* Lock to audio clock was Alt+K, now Alt+D.

UX additions:
* Ctrl+O = Open profile (matches the menu chord).
* New global hotkey: Start / Stop recording. Pickable from Options
  -> Keyboard shortcuts. Unbound by default. Works system-wide.

Wire format and audio pipeline unchanged from v1.4 — v1.4 and v1.5
peers interoperate.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 17:20:01 +01:00
2026-05-13 15:15:27 +01:00
2026-05-13 15:15:27 +01:00
2026-05-13 15:15:27 +01:00
2026-05-13 17:05:41 +01:00
2026-05-13 15:15:27 +01:00

RemSound

Low-latency peer-to-peer audio between two or more Windows PCs over UDP. Pick what each machine captures and what it plays back; audio flows directly between them, no central server.

Built for music collaboration over the internet, live monitoring across rooms in a house, podcast co-hosting, NVDA-Remote audio workflows, and anything else that wants "send the sound from this PC to that PC, fast".

Highlights

  • WASAPI and ASIO side by side. Run them as two independent UDP streams at their own native latencies, or use WASAPI alone. ASIO drivers get hardware-clocked timing; WASAPI gets push-mode timing on single-source captures.
  • Profiles. Save your full setup (device ticks, peers, codec, latency targets, hotkeys, ASIO driver) into one JSON file. Pick which profile to load at launch.
  • Continuous auto-tune. Watches receive jitter and nudges the latency target to stay click-free without forcing you to overshoot. Independent per-lane in WASAPI+ASIO mode.
  • Opus with inband FEC. Single-packet losses recover transparently — no click. PCM 24-bit 48 kHz is also available for clean LAN.
  • Remote control hotkeys. Configurable global hotkeys can nudge a peer's RemSound volume or their Windows system master volume, opt-in on the receiver.
  • Built-in self-updater. Optional GitHub-driven update check on a schedule you set.
  • Designed for screen readers. Each control has a paired Alt+letter mnemonic. State changes raise the right UIA notifications. F1 anywhere opens the user manual.

Install

  1. Download the latest RemSound-vX.Y.zip from Releases.
  2. Extract somewhere it can write — e.g. C:\RemSound\, your Documents, or a folder in your user profile. Avoid Program Files unless you grant write permission to the install folder (the self-updater needs to overwrite files in place).
  3. Run RemSound.exe. On first launch Windows Firewall will prompt — allow on private networks.
  4. Open the user manual from the Help menu (or press F1) for the full walkthrough.

RemSound requires the .NET 10 Desktop Runtime. If it's not installed, Windows offers to fetch it on first launch. You can also install it from https://dotnet.microsoft.com/download/dotnet/10.0 (pick the "Windows x64 Desktop Runtime").

Updates

RemSound can check this repository's Releases page on a schedule (never, hourly, every 6 hours, every 24 hours) and either prompt you to install or do it silently. Configure via File → Preferences. You can also trigger a manual check from the Help menu or the same Preferences dialog.

Build from source

You need the .NET 10 SDK. The solution lives at RemSound.slnx.

cd D:\proj\RemSound
dotnet build -c Release
dotnet publish src\RemSound.App\RemSound.App.csproj -c Release

The publish output lands at src\RemSound.App\bin\Release\net10.0-windows\publish\. Copy its contents into a folder of your choice — or zip it for distribution. Don't enable PublishSingleFile or SelfContained=true; RemSound ships framework-dependent on purpose so the publish folder stays under 2 MB.

Project layout

src/RemSound.Core      packet protocol, peer discovery, hotkeys, MMCSS, heartbeat, settings, AppConfig
src/RemSound.Sender    capture → mix → encode → UDP send
src/RemSound.Receiver  UDP receive → ring buffer → drift-corrected playout → render
src/RemSound.Harness   console test program (1 sender → 1 receiver, no UI)
src/RemSound.App       WinForms UI (sender + receiver + heartbeat + discovery + updater)
server/                optional Raspberry Pi / systemd-Linux relay bundle (see below)

Optional: running your own relay server

Two RemSound peers normally reach each other directly over your LAN, or via Tailscale across the internet. If neither of those work for your situation — for example one peer is behind a router that won't forward inbound UDP and you'd prefer not to use Tailscale — you can run a small Python relay on a publicly-reachable host (a Raspberry Pi at home with one UDP port forwarded works fine) and have both peers dial that.

The server/ folder in this repo is a self-contained bundle: relay script, systemd unit, install / uninstall / smoke-test scripts, and a step-by-step README. See server/README.md for the setup walkthrough.

Issues and feedback

Open an issue on the GitHub issues page. If reporting an audio problem, please tick File → Preferences → Enable logs, reproduce the issue, then attach the latest log file from logs\ next to RemSound.exe.

Licence

MIT. See LICENSE.

S
Description
Fork of RemSound
Readme MIT
20 MiB
Languages
C# 95.5%
Python 1.8%
PowerShell 1.7%
Shell 0.9%