• v0.1.13 164f990f9d

    serrebi released this 2026-05-10 13:49:43 -07:00 | 44 commits to main since this release

    Validates the server key client-side using the same rules NVDARemoteAudioServer enforces, so a bad key produces a clear message in the settings dialog (or when starting a connection) instead of a generic server handshake failure.

    Rule Behavior
    Empty "Remote audio key is not set"
    Contains control characters (tab, newline, escape, etc.) Rejected in settings; settings can't be saved
    More than 128 UTF-8 bytes Rejected in settings; settings can't be saved
    Any printable string ≤128 UTF-8 bytes (incl. spaces, symbols, Unicode) Allowed

    Matches validate_key() in haitun001/NVDARemoteAudioServer src/protocol.rs. No protocol change.

    Downloads
  • v0.1.12 1b817b6545

    serrebi released this 2026-05-06 16:04:37 -07:00 | 45 commits to main since this release

    LAN profile retuned for lower latency without choppy audio.

    Setting Was Now
    prebufferMs 60 30
    outputLatencyMs 60 40
    bufferMs 300 200

    Saves about 50 ms end-to-end on LAN. The 30 ms prebuffer is two 15 ms wire packets — enough to absorb a single late packet without underrun, since LAN jitter is normally well under a millisecond.

    Tailscale and Internet profiles are unchanged.

    If audio gets choppy after upgrading on a particular LAN, switch to the Tailscale profile in Preferences > Settings > NVDA Remote Audio > Latency profile and tell me — that's a sign your LAN has more jitter than expected and we'd want a middle profile.

    Install

    Download `remoteAudioClient-0.1.12.nvda-addon` below and open it in NVDA on both machines. Settings carry over.

    Downloads
  • v0.1.11 fd207c0d3e

    serrebi released this 2026-05-06 12:12:21 -07:00 | 46 commits to main since this release

    Diagnostic + responsiveness update for the slow-Reconnect report.

    The upstream relay has no cooldown on rapid publisher reconnect (verified against the server source), and a local stop-and-respawn cycle finishes in ~230 ms. So the 30 s being observed is something specific to your network/setup that needs more data than I can see locally.

    What this build does

    • `Reconnect audio` no longer freezes NVDA's UI. The stop+start cycle now runs on a background thread, so NVDA speaks "Reconnecting" immediately and stays responsive while the helper is exiting and restarting.
    • Helper status lines are now mirrored into NVDA's log at INFO level. Every phase the helper reports — `Connected`, `Capture started`, `Listening for remote audio`, `Stopped`, error events, etc. — gets a timestamped entry in `%APPDATA%\nvda\nvda.log`.
    • Reconnect itself logs how long the stop+start took in wall-clock seconds.

    Action

    After installing on both machines and reproducing the slow Reconnect, grab the chunk of `%APPDATA%\nvda\nvda.log` covering the click. Lines containing `remoteAudio` show exactly which phase is eating the time, which is what I need to land a real fix.

    Downloads
  • v0.1.10 3b830d57bb

    serrebi released this 2026-05-06 12:03:48 -07:00 | 47 commits to main since this release

    Fixes "audio dies on the publisher when I click Reconnect" reported in v0.1.9.

    What was wrong

    `Reconnect audio` killed the helper with `TerminateProcess` on Windows. The publisher held WASAPI process-loopback handles which were never released, the TCP/UDP session never closed cleanly, and the next helper could not reacquire the device reliably.

    Fix

    • Helper now watches its own stdin in a background task. When NVDA closes the pipe (or writes any byte) the cancellation token fires and the session's IAsyncDisposable.DisposeAsync runs — IAudioCaptureClient/IAudioClient COM objects are released, TCP/UDP sockets close cleanly. Exits with status Stopped..
    • Add-on spawns the helper with stdin=PIPE, and stop() now closes stdin first and waits up to 2 s for graceful exit. TerminateProcess is only used as a last resort if the helper is hung.

    Verified locally that subscriber and publisher both shut down cleanly in well under a second, and that a stop-immediately-respawn cycle on the publisher reacquires WASAPI cleanly.

    Install

    Download `remoteAudioClient-0.1.10.nvda-addon` below and open it in NVDA on both machines. Settings carry over.

    Downloads
  • v0.1.9 8677e08b27

    serrebi released this 2026-05-06 11:56:07 -07:00 | 48 commits to main since this release

    Fixes a bug where the receiver showed as connected but never played audio after the sender came online, until the add-on was manually reloaded.

    What was happening

    The receiver registered fine, but UDP heartbeats to the relay can be silently dropped by NAT/path issues without raising any error in the helper. After 15 s of dropped heartbeats the server timed out the receiver's UDP session, so when the sender's packets arrived the server had nowhere to forward them. The receiver's helper kept listening on a session the server had already forgotten.

    Helper changes

    • TCP and UDP heartbeat loops now catch send errors. On failure, the session tears down cleanly and the add-on's existing auto-retry kicks in (about 5 s).
    • The UDP heartbeat now also re-sends a UDP register packet about every 15 s, so the relay refreshes the receiver's session even if individual heartbeats are lost.
    • UDP heartbeat interval capped at 3 s (was 5 s) so path flaps are detected sooner.

    Add-on change

    • New Reconnect audio entry in Tools > NVDA Remote Audio. Stops and restarts the helper using the current role. Recovers from a stuck session in one click without reloading plugins.

    Install

    Download `remoteAudioClient-0.1.9.nvda-addon` below and open it in NVDA on both machines. Settings carry over.

    Downloads
  • v0.1.8 4b7b5c4001

    serrebi released this 2026-05-06 11:40:55 -07:00 | 49 commits to main since this release

    The Receive remote audio and Send this computer's audio menu items are now check-items, so NVDA tells you which one is active when you open the menu.

    Behavior

    • Clicking the unchecked item starts that role.
    • Clicking the checked item disconnects.
    • Clicking the other item while one is active switches roles (the helper restarts in the new role).
    • Auto-start, auto-retry on disconnect, and unexpected helper exits all keep the check marks in sync.

    Install

    Download `remoteAudioClient-0.1.8.nvda-addon` below and open it in NVDA. Settings carry over.

    Downloads
  • v0.1.7 39a84107c8

    serrebi released this 2026-05-06 11:34:53 -07:00 | 50 commits to main since this release

    The add-on can now install NVDARemoteAudioServer and the Windows Firewall rules itself. No manual download or netsh.

    New Tools-menu items

    • Install audio server (this machine sends audio)... — downloads the latest NVDARemoteAudioServer Windows ZIP from GitHub, extracts to C:\NVDARemoteAudioServer\ (or %LOCALAPPDATA%\NVDARemoteAudioServer\ if the first is not writable), registers a per-user logon scheduled task, starts the server, and prompts for UAC to add Windows Firewall inbound TCP+UDP allow rules on port 6838.
    • Add firewall rules for audio server... — re-runs only the firewall step (separate UAC prompt). Use this if you declined UAC during install.

    Behaviour change

    Picking Send this computer's audio on a machine without the server installed now offers the install dialog instead of failing silently.

    Notes

    • No admin needed for the download/extract/scheduled-task part.
    • Firewall rules require admin (UAC). Decline UAC and the rest still installs; you can retry firewall rules from the menu.
    • The .NET runtime is not a dependency of this add-on — the helper EXE is published self-contained.

    Install

    Download remoteAudioClient-0.1.7.nvda-addon below and open it in NVDA on both machines. Settings carry over.

    Downloads
  • v0.1.6 622efaf0d7

    serrebi released this 2026-05-06 11:20:58 -07:00 | 51 commits to main since this release

    Security fixes against a hostile or buggy audio server. No protocol or behavioural changes for honest servers.

    Changes

    • Cap server-supplied udp_audio_payload_max_bytes to [64, 1500] bytes so a malicious server cannot inflate every per-packet allocation.
    • Floor server-supplied tcp_heartbeat_interval_ms at 500 ms so a zero/one value cannot spin the heartbeat loop tight.
    • Replace the unbounded StreamReader.ReadLineAsync on the TCP handshake with a bounded byte-level reader (cap 64 KB). A server that streams data without a newline can no longer exhaust client memory.

    Install / upgrade

    Download `remoteAudioClient-0.1.6.nvda-addon` below and open it in NVDA on both machines. Settings carry over.

    Downloads
  • v0.1.5 4433f5c561

    serrebi released this 2026-05-06 11:13:33 -07:00 | 52 commits to main since this release

    First public release of the NVDA Remote Audio Client.

    Install

    1. Install NVDARemoteAudioServer on whichever machine should send audio.
    2. Download `remoteAudioClient-0.1.5.nvda-addon` below and open it on both machines.
    3. In NVDA, open Preferences > Settings > NVDA Remote Audio on both machines and set the same Host, Port (6838), and Key. The key is required — there is no default.
    4. Restart NVDA.

    What it does

    • Streams system audio (music, games, browser, Discord, etc.) between two Windows machines.
    • Excludes NVDA's process tree from WASAPI loopback capture, so NVDA speech stays on NVDA Remote and is not double-sent.
    • Opus 48 kHz stereo at 15 ms packets with packet-loss concealment.
    • Latency profiles: LAN (60/60/300 ms), Tailscale (90/80/450 ms), Internet (150/120/800 ms). Auto-picked from the host you set.

    Requires

    • Windows 10 build 20348+ (process-loopback exclusion API).
    • NVDA 2025.1+.

    Security

    Audio is sent unencrypted over UDP. Run this over LAN, VPN, or Tailscale only.

    Downloads