• v0.2.2 24cf59fa3b

    serrebi released this 2026-07-25 21:44:43 -07:00 | 1 commits to main since this release

    NVDA Remote Audio Client release notes

    0.2.2

    Safe add-on reloads

    • Fixes NVDA terminating when Reload Add-ons is invoked from the Tools menu or its assigned keyboard gesture.
    • Removes the stale Tools-menu item after the active event returns while retaining its unsafe wx wrapper until NVDA exits.
    • Preserves normal Remote Audio timer, helper-process, settings-panel, and NVDA Remote script cleanup during reload.

    0.2.1

    Relay restart recovery

    • Automatically tears down and recreates capture or playback after the relay server restarts or a heartbeat transport fails.
    • Prevents a disconnected publisher from remaining alive without a working control session.
    • Adds the negotiated TCP heartbeat and UDP timeout to connection diagnostics.
    • Extends the real-relay integration test past the control idle timeout and verifies recovery after forcibly restarting the relay.
    • Tested with NVDA 2026.2 beta 7 in addition to the automated helper and add-on checks.

    0.2.0

    Secure payload-v2 transport

    • Optional end-to-end AES-256-GCM encryption with PBKDF2-SHA256 key derivation.
    • The password is passed to the helper through an environment variable and never sent to the relay.
    • Clear rejection of wrong passwords, unencrypted publishers when encryption is required, and damaged packets.
    • Backward-compatible reception of legacy Opus streams when no password is configured.

    Audio routing and quality

    • Send all system audio except NVDA, or isolate one running application.
    • Choose adaptive Opus, 5 ms live Opus, broadcast-quality Opus, or uncompressed PCM16.
    • Select the receive playback endpoint and set gain from 0 to 200 percent.
    • Pan the received stream and apply bass, midrange, and treble EQ from -12 to +12 dB.

    Recording, profiles, and diagnostics

    • Record received audio to timestamped 48 kHz stereo WAV files.
    • Toggle recording and open its folder from the Tools menu.
    • Save, load, and delete named connection profiles.
    • Run protocol and encryption self-tests from the Tools menu.
    • Expanded copied diagnostics for security, codec, shaping, recording, and profile state.

    Compatibility

    • Requires NVDA 2025.1 or newer and Windows 10 build 20348 or newer.
    • Uses the existing NVDARemoteAudioServer 0.5 relay; no relay protocol upgrade is required because payload v2 is opaque to the server.
    • Both endpoints must run 0.2.0 to use encryption or PCM. Leave the password empty for legacy Opus compatibility during a staged upgrade.
    Downloads
  • v0.2.1 ff45cbfc8a

    serrebi released this 2026-07-17 14:44:15 -07:00 | 1 commits to main since this release

    Relay restart recovery

    • Automatically tears down and recreates capture or playback after the relay restarts or a heartbeat transport fails.
    • Continues retrying through temporary relay downtime and bounds each reconnect attempt.
    • Cleans up sockets and partially registered sessions between retries.
    • Adds negotiated heartbeat and UDP timeout values to connection diagnostics.

    Validation

    • Full helper protocol, encryption, audio-shaping, discovery, Python, manifest, and documentation checks passed.
    • Encrypted Opus ran beyond the relay idle timeout through the real Rust relay.
    • Encrypted PCM, WAV recording, and wrong-password rejection passed.
    • A forced eight-second relay outage recovered successfully after failed reconnect attempts.
    • Tested with NVDA 2026.2 beta 7.

    This release remains compatible with the unmodified NVDARemoteAudioServer 0.5 relay; no server-side protocol update is required.

    Downloads
  • v0.2.0 549fb3deb6

    serrebi released this 2026-07-17 14:23:31 -07:00 | 4 commits to main since this release

    NVDA Remote Audio Client 0.2.0

    Secure payload-v2 transport

    • Optional end-to-end AES-256-GCM encryption with PBKDF2-SHA256 key derivation.
    • The password is passed to the helper through an environment variable and never sent to the relay.
    • Clear rejection of wrong passwords, unencrypted publishers when encryption is required, and damaged packets.
    • Backward-compatible reception of legacy Opus streams when no password is configured.

    Audio routing and quality

    • Send all system audio except NVDA, or isolate one running application.
    • Choose adaptive Opus, 5 ms live Opus, broadcast-quality Opus, or uncompressed PCM16.
    • Select the receive playback endpoint and set gain from 0 to 200 percent.
    • Pan the received stream and apply bass, midrange, and treble EQ from -12 to +12 dB.

    Recording, profiles, and diagnostics

    • Record received audio to timestamped 48 kHz stereo WAV files.
    • Toggle recording and open its folder from the Tools menu.
    • Save, load, and delete named connection profiles.
    • Run protocol and encryption self-tests from the Tools menu.
    • Expanded copied diagnostics for security, codec, shaping, recording, and profile state.

    Compatibility

    • Requires NVDA 2025.1 or newer and Windows 10 build 20348 or newer.
    • Uses the existing NVDARemoteAudioServer 0.5 relay; no relay protocol upgrade is required because payload v2 is opaque to the server.
    • Both endpoints must run 0.2.0 to use encryption or PCM. Leave the password empty for legacy Opus compatibility during a staged upgrade.
    Downloads
  • v0.1.18 63c96667ff

    serrebi released this 2026-07-04 20:27:12 -07:00 | 8 commits to main since this release

    Fixes a second, more subtle cause of the NVDA restart hang from v0.1.17.

    v0.1.17 deferred the tray menu teardown in terminate() via wx.CallAfter
    to avoid calling toolsMenu.Remove() while NVDA's wx event loop was
    tearing down. That wasn't quite enough: NVDA's core destroys the system
    tray icon (and every menu it owns, including this add-on's submenu)
    synchronously right after terminate() returns, in the same call stack,
    before the deferred callback gets a separate turn to run. Touching the
    menu ourselves at that point could still reproduce the hang.

    terminate() now checks core._hasShutdownBeenTriggered (the same
    private flag NVDA's own bundled NVDA Remote client uses to detect a real
    exit) and skips menu teardown entirely during a genuine NVDA exit, since
    NVDA tears the tray icon down for us moments later. Teardown still runs
    normally for a plugin reload, where NVDA does not destroy the tray icon.

    Downloads
  • v0.1.17 e9ae00e8f2

    serrebi released this 2026-07-04 15:43:31 -07:00 | 10 commits to main since this release

    Fixes a bug where NVDA would hang on restart while this add-on was enabled.

    terminate() was calling toolsMenu.Remove() synchronously during NVDA
    shutdown. If the wx event loop was already tearing down at that point,
    the call could block forever, wedging the restart. Tray menu teardown is
    now deferred via wx.CallAfter, so shutdown drops it harmlessly instead
    of blocking.

    Downloads
  • v0.1.16 1dce37f064

    v0.1.16 Stable

    serrebi released this 2026-05-26 15:43:07 -07:00 | 12 commits to main since this release

    What's new

    Bug fixes

    • Fixed NVDA hanging on restart/shutdown when the remote audio helper was running. The addon's erminate() path was touching wx menus, callLater timers, and NVDA Remote local-script lists while those subsystems were already tearing down, which could block NVDA's main thread indefinitely. Now only the helper subprocess is stopped (non-blocking) during shutdown.
    • Fixed a secondary shutdown-blocking issue where the helper process wait could hold NVDA's main thread.
    • Fixed JSON config loading failing silently when the config file had a UTF-8 BOM.

    New features

    • Announce connection status messages setting (default on): when disabled, routine connect/listen/capture/stopped messages are kept quiet. Errors and explicit status commands still speak.
    • Use Opus packet-loss recovery setting (default on): controls Opus in-band FEC. Can be disabled for advanced LAN testing.
    • Verbose diagnostic logging setting (default off): when enabled, helper diagnostic/statistics lines are written to nvda.log.
    • NVDA Input Gestures for receive, send, disconnect, reconnect, and report status — assignable under the NVDA Remote Audio category in NVDA's Input Gestures dialog.
    • Gestures stay local when controlling another machine with NVDA Remote (registered with NVDA Remote's local-script list).
    • Updated NAudio dependency from 2.2.1 to 2.3.0.
    Downloads
  • v0.1.15 c93253a001

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

    Changes:

    • Add configurable 5/10/20 ms Opus packet duration, with Opus in-band FEC enabled by default.
    • Replace receiver playback with WASAPI event-sync output, a low-latency ring buffer, underrun smoothing, backlog trimming, and drift correction.
    • Tighten LAN/Tailscale/Internet latency profiles and pass the Opus frame size to both sender and receiver.
    • Add audio diagnostics for FEC, PLC, buffer level, underruns, drops, and drift corrections.

    Build verified with dotnet build, Python syntax check, helper --help, and build.ps1.

    Downloads
  • v0.1.14 8f20f7d782

    serrebi released this 2026-05-11 12:16:16 -07:00 | 17 commits to main since this release

    • Registers NVDARemoteAudioServer through a per-user Startup shortcut so it starts again after Windows sign-in. If shortcut creation fails, the add-on falls back to the scheduled task path.
    • Repairs existing server installs on add-on startup and when the install menu item is selected, then starts the server if it is not already running.
    • Keeps UAC limited to optional Windows Firewall rule setup for inbound TCP/UDP 6838; installing and startup persistence remain per-user.
    Downloads
  • v0.1.13 164f990f9d

    serrebi released this 2026-05-10 13:49:43 -07:00 | 18 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 | 19 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