• v0.2.4 0bf2df9329

    v0.2.4 Stable

    serrebi released this 2026-09-19 11:22:45 -07:00 | 19 commits to main since this release

    Install the same version on both computers, then restart NVDA.

    A second connection type: RemSound, peer to peer

    Connection type in settings now chooses between NVDA Remote Audio server — the existing relay, unchanged and still the default — and RemSound peer to peer. A RemSound connection talks directly to the RemSound apps for Windows, iPhone, Android and Mac: no server, no room name, just the same password on both devices. Allow UDP port 47830 on both, and UDP 47821 if you want discovery to find them.

    Sending and receiving at the same time

    Send and receive at the same time (RemSound) carries audio both ways over one connection, so a phone can hear this computer while this computer hears the phone. Two-way audio is only offered on a RemSound connection, because the relay server carries audio one direction. A new microphone source lets you send the Windows default recording device, or a named one, instead of the system mix.

    Finding devices, and naming them

    Find RemSound devices on this network lists every device that answered, saying for each one whether it sends, receives, or both, and every address it answered on. Devices are grouped by name, so a phone answering on both Wi-Fi and Tailscale appears once, and they are remembered by name so a changed address keeps working.

    Volume and remote control without reconnecting

    Received volume, mute, and the other device's volume can be changed from an unbound gesture or the Tools menu while audio is running, with no reconnect and no return to settings. A RemSound device can change this computer's Windows volume only if you tick Let RemSound devices that share the password change this computer's volume. Those requests are sealed with the audio key, refused when more than ten minutes old, and refused when replayed.

    Under the hood

    The helper speaks RemSound's own wire protocol byte for byte: its header and Format packets, 24-bit PCM in 2.5 ms frames, its nonce-tag-ciphertext layout, and its PBKDF2 key. The helper self-test pins the same key and fingerprint vectors the iPhone app pins, so a drift in that derivation fails the build instead of silently making every device on the network go quiet.

    Requirements

    • Windows 10 build 20348 or newer, or Windows 11.
    • NVDA 2025.1 or newer.
    • Through the audio server: TCP and UDP port 6838 reachable on the sending computer.
    • Peer to peer with RemSound: UDP port 47830 on both devices, plus UDP 47821 for discovery. No server install and no port 6838 rule needed.

    Full notes: RELEASE_NOTES.md

    Downloads
  • v0.2.3 184d9d0bcd

    v0.2.3 Stable

    serrebi released this 2026-09-02 14:06:44 -07:00 | 22 commits to main since this release

    Install the same version on both computers, then restart NVDA.

    Playback follows the output device

    Receiving playback set to follow the Windows default now follows it for the whole session, not only at connect time. Unplugging headphones, a Bluetooth headset dropping, or changing the Windows output moves playback to the device that is now current instead of leaving it on the old one. Volume, pan and EQ carry across the switch. A pinned playback device is re-opened when it is unplugged and returns.

    Version mismatches say which computer to update

    When the two computers can no longer understand each other's audio, the receiver now says which computer to update instead of falling silent. A wrong encryption password, audio damaged on the network, and a version mismatch are reported as three separate problems, because each is fixed in a different place. A single packet damaged in transit is never enough to end a session.

    This computer's address

    New in the Tools menu and in Input Gestures: This computer's address for the other computer. It speaks and copies this machine's Tailscale address, local network address, computer name and port — the details to type on the other computer during setup, without leaving NVDA to look them up.

    Also in this release

    • Emptying the playback buffer for a device change is no longer counted as dropped audio, so a healthy switch stops reading as buffer overflow in diagnostics.
    • Copied diagnostics now include this computer's addresses and the audio format version.
    • A publisher older than 0.2.0 reaching a receiver that requires encryption is named as such, rather than only reported as unencrypted audio.

    Requirements

    • Windows 10 build 20348 or newer, or Windows 11.
    • NVDA 2025.1 or newer.
    • TCP and UDP port 6838 reachable on the sending computer.

    Full notes: RELEASE_NOTES.md

    Downloads
  • v0.2.2 24cf59fa3b

    serrebi released this 2026-07-25 21:44:43 -07:00 | 26 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 | 27 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 | 28 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:14:29 -07:00 | 34 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 | 35 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 | 38 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 | 42 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 | 43 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