From e6d47e229dd4afc7bb18b657b9b050bfe3b20eac Mon Sep 17 00:00:00 2001 From: Ednunp <29843396+Ednunp@users.noreply.github.com> Date: Tue, 19 May 2026 11:07:05 +0100 Subject: [PATCH] Bump to v1.8.0: updater hardening + plain-language manual rewrite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updater (RemSoundUpdater.cs), all from Andre's feedback: * CheckForUpdateAsync now requests /releases?per_page=100 instead of the default 30-item page, so a burst of server-vX.Y relay releases can't push the newest client release off page 1. * The install helper's robocopy now excludes remsound.config.json and the logs / profiles / recordings folders — an update replaces app files only and can never overwrite the user's own config or data. * On a successful update the helper now also deletes _update-helper.log and any stale update-failed.txt (the _update folder was already removed), leaving a tidy install folder. The failure branch still keeps them all for diagnosis. * update-failed.txt rewritten as plain user-facing instructions: numbered steps, no brand names, names the real _update folder, no robocopy jargon. The exit code now goes to _update-helper.log only. Manual (readme.html): rewritten in plain language — developer jargon removed or explained in everyday terms — and a second pass removed the keystroke-navigation choreography and screen-reader narration from the prose. The Keyboard shortcuts section and all shortcut reference are kept intact. No wire-format or audio-pipeline changes — v1.5 through v1.8 interoperate. Co-Authored-By: Claude Opus 4.7 --- RELEASE_NOTES.md | 21 +- readme.html | 805 +++++++++++++-------------- src/RemSound.App/AboutDialog.cs | 22 + src/RemSound.App/RemSound.App.csproj | 2 +- src/RemSound.App/RemSoundUpdater.cs | 63 ++- 5 files changed, 480 insertions(+), 433 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index f8360a6..4baf737 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,16 +1,21 @@ -# RemSound v1.7 +# RemSound v1.8 -A self-updater fix. Wire format and audio pipeline are unchanged from v1.4 / v1.5 / v1.6 — all releases interoperate. +Updater improvements and a rewritten user manual. Wire format and audio pipeline are unchanged from v1.4 onward — all versions interoperate. -## Bug fix +## Updater improvements -- **Check for updates now reliably finds RemSound releases.** RemSound and the RemSound relay server are published from the same GitHub repository; the relay's releases use `server-` prefixed tags. The updater previously asked GitHub only for the single newest release of *any* kind — so whenever a relay release was the most recent, the updater misread its version and concluded RemSound was already up to date, silently skipping a real client update. The updater now scans the full release list and considers only RemSound client versions, ignoring server releases, drafts and pre-releases. +- **Check for updates is more reliable.** It now looks further down the GitHub release list when deciding what the newest version is, so it always finds the latest RemSound release. +- **An update can no longer overwrite your own data.** The update now replaces RemSound's program files only — it leaves your settings file, and your profiles, logs and recordings folders, untouched. Previously a release package could in principle carry stray files over the top of yours; the updater now refuses to copy those even if they were present. +- **A successful update leaves a tidy folder.** Once an update finishes cleanly, the temporary update files, the update log, and any leftover failure note are all cleared automatically. +- **The "update failed" note is now plain English.** If an update can't finish, the `update-failed.txt` note left next to RemSound is written in clear, non-technical language with simple numbered steps. Technical detail for support stays in the separate update log. -If your copy is stuck on an older version because of this, install v1.7 once by hand (below) — from v1.7 onward, **Help → Check for updates** works correctly on its own. +## Rewritten user manual + +The user manual (press F1 inside RemSound, or open `readme.html`) has been rewritten from the ground up in plain language. Technical jargon has been removed or explained in everyday terms, and the writing now describes what to do rather than narrating keystrokes. ## Install -1. Download `RemSound-v1.7.zip` from this release. +1. Download `RemSound-v1.8.zip` from this release. 2. Extract somewhere with write permission (e.g. `C:\RemSound\`, `Documents\RemSound\`). Avoid `Program Files` unless you grant write permission so the self-updater can replace files in place. 3. Run `RemSound.exe`. Allow on private networks when Windows Firewall prompts. 4. Press F1 (or use the Help menu) for the user manual. @@ -19,6 +24,6 @@ Requires the .NET 10 Desktop Runtime. If it's missing, Windows offers to fetch i ## Upgrading -v1.5 / v1.6 users: use **Help → Check for updates** — it pulls v1.7 cleanly (their updater can still see v1.7 as long as it's the newest release at check time). To be certain, the manual install above always works. +v1.5 / v1.6 / v1.7 users: use **Help → Check for updates** — it pulls v1.8 cleanly. The manual install above always works too. -If you installed RemSound inside a Dropbox-synced (or other file-sync) folder and your install is v1.0 / v1.1 / v1.2, see the [v1.3 release notes](https://github.com/Ednunp/RemSound/releases/tag/v1.3) for one-time manual install steps. From v1.3 onward Check-for-updates handles Dropbox correctly. +If you installed RemSound inside a Dropbox-synced (or other file-sync) folder and your install is v1.0 / v1.1 / v1.2, see the [v1.3 release notes](https://github.com/Ednunp/RemSound/releases/tag/v1.3) for one-time manual install steps. From v1.3 onward Check-for-updates handles synced folders correctly. diff --git a/readme.html b/readme.html index 9ed81d8..fdaa47a 100644 --- a/readme.html +++ b/readme.html @@ -21,9 +21,9 @@ ul, ol { padding-left: 1.4em; }

RemSound — user manual

-

RemSound is a Windows program for sending live audio between two or more computers with very low delay. You can think of it as a private, peer-to-peer audio link: each machine picks what it wants to capture and what it wants to play out, and audio flows directly between them over UDP.

+

RemSound is a Windows program that sends live sound from one computer to another, with very little delay. Picture a private audio link between two or more computers: each one decides what sound it wants to send and what sound it wants to play, and the audio travels straight between them over your network.

-

It was built for music collaboration over the internet (a guitarist on one machine, a vocalist on another, listening to each other in real time), but works just as well for low-latency monitoring across rooms in a house, podcast co-hosting, or any other “send audio from this PC to that PC, fast” use case.

+

It was built for playing music together over the internet — a guitarist on one computer and a singer on another, hearing each other in real time — but it works just as well for listening to one room from another room in your house, co-hosting a podcast, or anything else where you want to get sound from one PC to another, fast.

Table of contents

    @@ -52,331 +52,318 @@ ul, ol { padding-left: 1.4em; }

    1. What RemSound does

    -

    RemSound moves audio from one PC’s microphone or sound card to another PC’s speakers or audio interface, in close-to-real-time, over your network. It’s symmetric: each side runs the same program and chooses independently whether to send, receive, or both.

    +

    RemSound carries sound from one PC's microphone or sound card to another PC's speakers or audio interface, almost instantly, over your network. Both computers run the same program, and each one decides for itself whether it wants to send sound, receive sound, or do both.

    The basic flow

    - - - - + + + +
    StepWhat happens
    1You tick “Send my audio” on the Audio inputs and outputs tab and pick which microphone or audio output you want captured.
    2Your friend ticks “Receive audio” on the same tab and picks which speakers or headphones to play received audio through.
    3One of you ticks the other in the Discovered peers list on the Connectivity tab (or types their IP address manually).
    4Audio starts flowing. The other direction works exactly the same way, independently — both can speak at once.
    1You tick “Send my audio” on the Audio inputs and outputs tab and choose which microphone or sound output you want sent.
    2Your friend ticks “Receive audio” on the same tab and chooses which speakers or headphones should play the sound they receive.
    3One of you ticks the other person in the Discovered peers list on the Connectivity tab (or types their address by hand).
    4Sound starts flowing. The other direction works exactly the same way, on its own — both of you can speak at the same time.
    -

    There is no central server, no account, nothing in the cloud. Packets go straight from one machine to the other.

    +

    There is no central server, no account, and nothing stored online. The sound goes straight from one computer to the other.

    2. Quick start

    -

    Assume you and a friend both have RemSound running and a way to reach each other on the network (same Wi-Fi, same Tailscale account, etc.).

    +

    Let's assume you and a friend both have RemSound running, and that your two computers can reach each other on the network (the same Wi-Fi, the same Tailscale account, and so on).

      -
    1. Launch RemSound. The first thing you’ll see is the profile picker. On a fresh install your only option is (Blank template) — select it and press Enter or click OK. Once you’ve saved a profile or two later on, this dialog is how you pick which one to load. See Profiles for the full story.
    2. -
    3. Once the main window opens, use Ctrl+Tab to move to the Audio inputs and outputs tab. Tick Receive audio (Alt+R), then tick the device you want incoming audio played through in WASAPI outputs for received sound (Alt+3).
    4. +
    5. Start RemSound. The first thing you'll see is the profile picker. On a brand-new install your only choice is (Blank template) — select it and press Enter or click OK. Later, once you've saved a setup or two of your own, this is the dialog where you choose which one to load. See Profiles for the full story.
    6. +
    7. Once the main window opens, go to the Audio inputs and outputs tab. Tick Receive audio (Alt+R), then tick the device you want incoming sound played through in WASAPI outputs for received sound (Alt+3).
    8. On the same tab, tick Send my audio (Alt+S) and tick your microphone in WASAPI inputs to send (Alt+5).
    9. -
    10. Move to the Connectivity tab (Ctrl+Shift+Tab to go back left, or Ctrl+Tab from elsewhere). Find your friend in the Discovered peers (Alt+D) list and tick them. Or, if they aren’t appearing, click Add peer by IP (Alt+A) and type their address.
    11. -
    12. Have your friend do the same with you on their machine.
    13. -
    14. Within a second or two, both sides will hear each other.
    15. -
    16. Open the File menu (Alt+F) and choose Save as to give your setup a name. Next time you launch, picking that profile from the startup dialog restores all your settings, device ticks, peers, and connections in one go.
    17. +
    18. Go to the Connectivity tab, find your friend in the Discovered peers (Alt+D) list, and tick them. If they aren't showing up, use Add peer by IP (Alt+A) and type their address.
    19. +
    20. Have your friend do the same with you on their computer.
    21. +
    22. Within a second or two, both of you will hear each other.
    23. +
    24. In the File menu (Alt+F), choose Save as to give your setup a name. Next time you start the program, picking that name from the startup dialog restores all your settings, device choices, peers, and connections in one go.
    -If you have a pro audio interface (Audient, Komplete Audio, RME, Focusrite, etc.): on the Audio inputs and outputs tab pick your driver in the ASIO driver (Alt+D) list to unlock its low-latency channels. Selecting a real driver makes the ASIO device lists appear; selecting (none) hides them again and the app runs WASAPI-only. See ASIO and WASAPI below. +If you have a professional audio interface (Audient, Komplete Audio, RME, Focusrite, and the like): on the Audio inputs and outputs tab pick your driver in the ASIO driver (Alt+D) list to use its low-delay channels. Choosing a real driver makes the ASIO device lists appear; choosing (none) hides them again and the app uses the ordinary Windows sound path only. See ASIO and WASAPI below.

    3. Profiles

    -

    RemSound saves your entire setup — device ticks, send / receive states, codec, packet size, smoothness, latency targets, hotkeys, ASIO driver choice, remembered peers, currently-connected peers — into one JSON file per profile. You pick which profile to load every time you launch the program. Tick a different combination of devices for “morning podcast” vs “evening jam session” and switch between them in two clicks.

    +

    RemSound saves your whole setup — which devices are ticked, whether you're sending or receiving, your sound quality settings, delay targets, hotkeys, your ASIO driver choice, remembered peers, currently connected peers — into a single settings file. Each saved setup is called a profile. You choose which profile to load every time you start the program. You might keep one profile for “morning podcast” and another for “evening jam session”, each with a different mix of devices ticked, and switch between them in a couple of clicks.

    The startup picker

    -

    When RemSound launches, the first thing you see is the profile selection dialog. It’s a listbox of profile names plus a synthetic (Blank template) entry at the top. The keys are deliberate:

    +

    When RemSound starts, the first thing you see is the profile picker. It is a list of your saved profile names, with an extra entry called (Blank template) at the top. The keys are deliberately simple:

    - + - - - - + + + +
    KeyAction
    Up / DownMove between profiles in the list.
    EnterLoad the highlighted profile (or blank template) and open the main window.
    EnterLoad the highlighted profile (or the blank template) and open the main window.
    OK buttonSame as Enter.
    DelDelete the highlighted profile, with a yes / no confirmation.
    Browse… buttonPick a different folder to read profiles from. Useful if you keep your profiles in Dropbox or another sync folder so they roam between machines. The choice is remembered next time RemSound launches.
    EscDeliberately ignored. Picking a profile is required to launch.
    Alt+F4Closes the dialog and exits RemSound — equivalent to “I don’t want to start the program right now.”
    DelDelete the highlighted profile, after a yes / no confirmation.
    Browse… buttonChoose a different folder to read profiles from. Handy if you keep your profiles in Dropbox or another sync folder so they follow you between computers. Your choice is remembered next time RemSound starts.
    EscDeliberately does nothing here. You have to pick a profile to start the program.
    Alt+F4Closes the dialog and quits RemSound — in other words, “I don't want to start the program right now.”
    -

    The first profile in the list is highlighted by default, so a fresh install where you only have (Blank template) is just Enter to proceed.

    +

    The first profile in the list is highlighted to begin with, so on a fresh install where the only entry is (Blank template), you just press Enter to get going.

    What “Blank template” means

    -

    Blank template is a one-shot session with all defaults: nothing ticked in any device list, neither Receive nor Send checked, default codec, no ASIO driver selected, no remembered peers, default hotkeys. You’d pick it for a one-off session you don’t intend to save, or as the starting point for a new profile. The Save and Update button is intentionally hidden when on Blank template — there’s nothing to update, only to save-as-new.

    +

    The blank template is a one-off session with all the defaults: nothing ticked in any device list, neither Receive nor Send turned on, the standard sound settings, no ASIO driver chosen, no remembered peers, and the standard hotkeys. You'd pick it for a quick session you don't plan to save, or as a clean starting point for a new profile. The Save button is hidden while you're on the blank template — there's no existing setup to update, only a new one to save.

    Saving and updating

    -

    The File menu has two save items:

    +

    The File menu has two ways to save:

    - - + +
    ItemWhat it does
    File → Save (Ctrl+S)Overwrites the active profile with the current state. If you’re on Blank template, this falls through to Save as (because there’s no existing profile to overwrite).
    File → Save as… (Alt+F, A)Always available. Prompts for a profile name. From Blank template this is how you create the first profile. From an existing profile this forks a copy under a new name and switches to the copy as the active profile.
    File → Save (Ctrl+S)Updates the current profile with whatever your settings are right now. If you're on the blank template, this turns into Save as instead, because there's no existing profile to update.
    File → Save as… (Alt+F, A)Always available. Asks you for a name. From the blank template, this is how you create your first profile. From an existing profile, it makes a fresh copy under a new name and switches to that copy.
    -

    The window title bar shows which profile is currently active: RemSound — Active profile: My session name. NVDA reads this on Alt+Tab.

    +

    The window title bar always shows which profile is in use: RemSound — Active profile: My session name.

    Switching, renaming, and deleting

    - - - + + +
    ActionHow
    Switch to a different profileFile → Open profile (Alt+F, O). Pick a JSON in the file picker. RemSound reloads under that profile.
    Rename the active profileFile → Rename current profile (Alt+F, M). Prompts for the new name and renames the JSON on disk; window title updates immediately.
    Delete a profileFile → Open profile, then right-click the entry in the Windows file picker and choose Delete. Hands the action off to Windows Explorer rather than reimplementing it inside RemSound.
    Switch to a different profileFile → Open profile (Alt+F, O). Pick a profile in the file picker. RemSound reloads using that profile.
    Rename the current profileFile → Rename current profile (Alt+F, M). It asks for the new name and renames the profile's file; the window title updates straight away.
    Delete a profileFile → Open profile, then right-click the entry in the Windows file picker and choose Delete. RemSound lets Windows handle this rather than having its own delete button.
    -

    Where profiles live on disk

    +

    Where profiles are stored

    -

    One JSON file per profile. By default, stored at:

    +

    Each profile is one small file on your computer. By default they live at:

    -
    <RemSound folder>\profiles\<your machine name>\<profile name>.json
    +
    <RemSound folder>\profiles\<your computer name>\<profile name>
    -

    The per-machine subfolder keeps each computer’s profiles separate. If you used the Browse… button on the startup dialog to pick a different folder (e.g. inside Dropbox), profiles are stored directly under that folder — no per-machine subfolder, so two machines pointing at the same shared folder see exactly the same list.

    +

    The folder named after your computer keeps each machine's profiles separate. If you used the Browse… button on the startup dialog to pick a different folder (for example, one inside Dropbox), the profiles are stored directly in that folder — with no per-computer subfolder — so two computers pointed at the same shared folder see exactly the same list.

    -

    You can also copy a profile JSON between machines: drop it into the other machine’s profile folder and it appears in their startup dialog. If the new machine doesn’t have the same hardware (different sound cards, different ASIO drivers), those device ticks are silently skipped at load time — RemSound won’t error or warn, the relevant lists just won’t have those entries ticked.

    +

    You can also copy a profile file from one computer to another: drop it into the other computer's profile folder and it will appear in that computer's startup dialog. If the other computer doesn't have the same equipment (different sound cards, different ASIO drivers), those device choices are simply skipped when the profile loads — RemSound won't show an error or a warning, the relevant lists just won't have those items ticked.

    -Tip: profile JSON files are plain text and human-readable. If you ever need to manually edit one (e.g. to change a hotkey without launching the app), open it in any text editor. +Tip: profile files are plain text and readable by people. If you ever want to change something by hand (for example, a hotkey) without opening the app, you can open the file in any text editor.
    -

    What’s NOT in profiles

    +

    What is NOT saved in a profile

    -

    A short list of things that intentionally aren’t profile-saved:

    +

    A few things are deliberately kept out of profiles:

    4. The main window: menu bar + three tabs

    -

    The main window has three things stacked vertically:

    +

    The main window has three parts, stacked top to bottom:

      -
    1. A menu bar at the top with two menus — File (profile management, preferences, keyboard shortcuts, minimise to tray, exit) and Help (open the user manual, check for updates, About). See Menus.
    2. -
    3. A tab strip with three tabs — Connectivity, Audio inputs and outputs, Audio profile. Use Ctrl+Tab and Ctrl+Shift+Tab to move between them, or arrow left/right when focus is on the tab strip. Each tab has its own Alt+letter shortcuts that fire only when that tab is the visible one — the same letter can mean different things on different tabs without conflict.
    4. -
    5. A status footer updating once a second with connect uptime, peer count, send/receive activity, and heartbeat health.
    6. +
    7. A menu bar at the top with four menus — File, Record, Options and Help. See Menus.
    8. +
    9. A row of tabs with three tabs — Connectivity, Audio inputs and outputs, Audio profile. Each tab has its own Alt+letter shortcuts that only work when that tab is the one showing — so the same letter can do different things on different tabs without clashing.
    10. +
    11. A status line at the bottom that updates once a second with how long you've been connected, how many peers you have, whether sound is flowing, and connection health.
    - - - - + + + +
    TabWhat it’s for
    ConnectivityConnected, discovered, and remembered peers. Add a peer by IP. Connection status read-out.
    Audio inputs and outputsASIO driver picker (when an ASIO driver is installed), the Receive audio and Send my audio checkboxes, and all the device-tick lists. Selecting a real driver in the picker brings up the ASIO device lists alongside the WASAPI ones; (none) hides them.
    Audio profileCodec, packet size, lock-to-audio-clock, latency, continuous auto-tune, buffer smoothness, artefact sound. Split into Audio send parameters and Audio receive parameters sections so NVDA announces which group you’ve entered as you tab through.
    TabWhat it's for
    ConnectivityConnected, discovered and remembered peers. Adding a peer by address. A connection status read-out.
    Audio inputs and outputsThe ASIO driver picker (when an ASIO driver is installed), the Receive audio and Send my audio checkboxes, and all the device lists. Choosing a real driver in the picker brings up the ASIO device lists alongside the ordinary Windows ones; choosing (none) hides them.
    Audio profileCodec, packet size, lock-to-audio-clock, latency, continuous auto-tune, buffer smoothness, artefact sound. Split into an Audio send parameters group and an Audio receive parameters group.
    -

    Four top-level menus on the main window: File (Alt+F), Record (Alt+K), Options (Alt+O), and Help (Alt+H). The Record menu's mnemonic is the unusual Alt+K — chosen because Alt+R is taken by the Receive audio checkbox on the main form, and Alt+O has the natural fit on the Options menu. The Record menu's title is rendered as “Record (Alt+K)” so the chord is discoverable despite K not being a letter in the word.

    +

    There are four menus on the main window: File (Alt+F), Record (Alt+K), Options (Alt+O) and Help (Alt+H). The Record menu opens with Alt+K rather than Alt+R because Alt+R is already used by the Receive audio checkbox on the main window. The menu's title is shown as “Record (Alt+K)” so you can find the shortcut even though there is no K in the word.

    File menu

    -

    Press Alt+F to open the menu, then the underlined letter for the item you want, or use the single-press shortcut from the table below.

    +

    The File menu holds everything to do with profiles — opening, saving, renaming — plus minimising to the tray and exiting.

    - - - - - - - + + + + + + +
    ItemShortcutWhat it does
    Open profile…Ctrl+O, or Alt+F, OOpens a Windows file picker rooted at the profiles folder. Pick a JSON, RemSound reloads under that profile (window closes and reopens with all its device ticks, peers, and settings restored). To delete a profile from disk, right-click an entry inside the file picker and choose Delete — that hands the action off to Windows Explorer.
    Recent profiles →Alt+F, RSubmenu listing the last five profiles you’ve opened, most-recent first. Each row carries a single-digit mnemonic: press 1 while the submenu is open to jump to the most recent, 2 for the second most-recent, and so on up to 5. Or arrow down and press Enter on the row you want. Same close-and-relaunch behaviour as Open profile. If a recent profile’s file has been deleted or moved away, it’s skipped from the submenu (the entry stays in storage in case the file comes back — e.g. an external drive remount). Empty list shows a disabled “(No recent profiles)” entry.
    SaveCtrl+SOverwrites the active profile with the current state. If there’s no active profile (you’re on Blank template), this falls through to Save as automatically.
    Save as…Alt+F, APrompts for a profile name and saves a copy. Use this to fork the current state under a new name, or to save the first time from Blank template.
    Rename current profile…Alt+F, MRenames the JSON file on disk and updates the window title. No-op on Blank template (no profile to rename). Mnemonic is M (Rename) — was R until v1.5 when Recent profiles took the R slot.
    Minimise to trayAlt+F, NHides the window to the system tray. Mnemonic is N (Minimise) — was M until v1.5 when Rename took the M slot. To bring the window back, click the tray icon or use the configurable “Show or hide window” global hotkey (Keyboard shortcuts dialog, default Ctrl+Shift+F10).
    ExitAlt+F, X (or Alt+F4)Closes RemSound. If there are unsaved profile changes you’ll be prompted first.
    Open profile…Ctrl+O, or Alt+F, OOpens a Windows file picker showing your profiles folder. Pick a profile, and RemSound reloads using it (the window closes and reopens with all that profile's device choices, peers and settings restored). To delete a profile, right-click its entry inside the file picker and choose Delete — that lets Windows handle the deletion.
    Recent profiles →Alt+F, RA submenu listing the last five profiles you've opened, most recent first. Each row has a single-digit shortcut: while the submenu is open, press 1 for the most recent, 2 for the next, and so on up to 5. Or just select the one you want. It reloads the profile the same way Open profile does. If a recent profile's file has been deleted or moved away, it's left out of the submenu (it stays in the list in case the file comes back later — for example when you reconnect an external drive). If the list is empty, you see a greyed-out “(No recent profiles)” entry.
    SaveCtrl+SUpdates the current profile with your current settings. If there's no current profile (you're on the blank template), this becomes Save as automatically.
    Save as…Alt+F, AAsks for a name and saves a copy. Use it to save your current setup under a new name, or to save for the first time from the blank template.
    Rename current profile…Alt+F, MRenames the current profile's file and updates the window title. Does nothing on the blank template (there's no profile to rename).
    Minimise to trayAlt+F, NHides the window down to the system tray (the small icons near the clock). To bring the window back, click the tray icon or use the “Show or hide window” global hotkey (set in the Keyboard shortcuts dialog, default Ctrl+Shift+F10).
    ExitAlt+F, X (or Alt+F4)Closes RemSound. If you have unsaved profile changes, it asks you first.

    Record menu

    -

    Press Alt+K to open the menu, then the underlined letter for the item you want. (Alt+K rather than the natural Alt+R because Alt+R is taken on the main form by the Receive audio checkbox; Alt+O moved to the Options menu in v1.5.) The recording feature taps the audio path at the right place to capture either what you’re sending, what you’re receiving, or both, and writes it to disk as a WAV, MP3, OGG-Opus, or FLAC file. See Recording to a file for the full chapter; this is the menu summary.

    +

    The recording feature can save what you're sending, what you're receiving, or both, to a file on your computer as a WAV, MP3, OGG-Opus or FLAC file. See Recording to a file for the full chapter; this is just the menu summary.

    - - - + + +
    ItemShortcutWhat it does
    Start recording / Stop recordingCtrl+R, or Alt+K, RToggle. The label flips between “Start recording” and “Stop recording” so NVDA announces whichever action the next press would perform. Either label is activated by Alt+R (the underline stays on a letter R in both). Each press of Start plays a short cue sound (if enabled in Preferences), then creates a new file in your recordings folder named RemSound-yyyy-MM-dd_HH-mm-ss.<ext>. Stop closes the file then plays the stop cue. Ctrl+R works from anywhere in the main window.
    Open current recordings folderAlt+K, OOpens your current recordings folder in Windows Explorer. Creates the folder if it doesn’t exist yet (first launch after a fresh install).
    Change recordings folder…Alt+K, CFolder picker. Pick a different folder for future recordings. The choice is saved on the current profile, so different profiles can record to different places.
    Start recording / Stop recordingCtrl+R, or Alt+K, RA toggle. The label switches between “Start recording” and “Stop recording” to show whichever action the next press would do. Either label is activated by the letter R. Each time you start, RemSound plays a short cue sound (if you've enabled it in Preferences), then creates a new file in your recordings folder with a name like RemSound-2026-05-19_14-30-00 and the right file extension. Stopping closes the file and plays the stop cue. Ctrl+R works from anywhere in the main window.
    Open current recordings folderAlt+K, OOpens your recordings folder in Windows File Explorer. It creates the folder if it doesn't exist yet (which happens the first time on a fresh install).
    Change recordings folder…Alt+K, CA folder picker. Choose a different folder for future recordings. The choice is saved in the current profile, so different profiles can record to different places.
    -

    Recording settings used to live here as a third menu item; it moved to the Options menu in v1.5.

    -

    Options menu

    -

    Press Alt+O to open the menu, then the underlined letter for the item you want. The Options menu collects everything you’d want to configure about the app — recording settings, keyboard shortcuts, startup behaviour, general preferences. Pre-v1.5 these were scattered across File and Record menus and the Preferences dialog itself.

    +

    The Options menu gathers everything you might want to configure about the app — recording settings, keyboard shortcuts, startup behaviour, and general preferences.

    - - - - + + + +
    ItemShortcutWhat it does
    Recording settings…Alt+O, SOpens the Recording settings dialog. Up to five listboxes: Recording source (Alt+S), File format (Alt+F), Audio format attributes (Alt+A), FLAC compression level (Alt+L — visible only when FLAC is selected), Channels (Alt+C). The attributes list repopulates based on the selected format. OK saves to the current profile; Cancel discards.
    Keyboard shortcuts…Ctrl+K, or Alt+O, KOpens the global hotkey configuration dialog (mute, volume, tray show/hide, start/stop recording, remote-control sends).
    Startup behaviour…Alt+O, TOpens the Startup behaviour dialog directly (in v1.4 and earlier this was a button inside Preferences). Choose whether to auto-launch with Windows, which profile to load by default, and whether to start minimised to tray.
    Preferences…Ctrl+P, or Alt+O, POpens the Preferences dialog. Sticky machine-local choices live here: profile folder, the Cue sounds (Alt+N) checklist (one tickable item per cue: connect, disconnect, recording start, recording stop), accept remote volume commands, update-check frequency, manual check-for-updates button, silently install updates, enable logs, write logs now. Esc or the Close button dismisses.
    Recording settings…Alt+O, SOpens the Recording settings dialog. Up to five lists: Recording source (Alt+S), File format (Alt+F), Audio format attributes (Alt+A), FLAC compression level (Alt+L — only shown when FLAC is chosen), and Channels (Alt+C). The attributes list changes to match the format you pick. OK saves to the current profile; Cancel discards.
    Keyboard shortcuts…Ctrl+K, or Alt+O, KOpens the global hotkey dialog (mute, volume, show/hide window, start/stop recording, remote-control commands).
    Startup behaviour…Alt+O, TOpens the Startup behaviour dialog. Choose whether to launch automatically with Windows, which profile to load by default, and whether to start hidden in the tray.
    Preferences…Ctrl+P, or Alt+O, POpens the Preferences dialog. This holds the settings that stay the same on this computer no matter which profile is loaded: the profiles folder, the Cue sounds (Alt+N) checklist (one tickable item per cue: connect, disconnect, recording start, recording stop), whether to accept remote volume commands, how often to check for updates, a manual check-for-updates button, whether to install updates quietly, whether to keep logs, and a button to write logs now. Esc or the Close button dismisses it.

    Help menu

    -

    Press Alt+H to open the menu, then the underlined letter for the item you want.

    +

    The Help menu opens this manual, checks for updates, and shows the About dialog.

    - - - + + +
    ItemShortcutWhat it does
    HelpF1 (anywhere), or Alt+H, HOpens this user manual in your default browser. F1 also works from inside every dialog (Preferences, Keyboard shortcuts, About, Startup behaviour) and from the startup profile picker before the main window has loaded.
    Check for updatesAlt+H, CAsks the RemSound GitHub Releases page whether a newer build is available. If yes, you get a confirmation dialog with the release notes and a Yes / No to install. If you’re already on the latest version, an “you are running the latest version” popup confirms it. (For automatic background checks instead of pressing this button by hand, see Updating RemSound.)
    About RemSoundAlt+H, ASmall modal dialog showing the current version and the latest release notes in a scrollable read-only box. Tab into the box and arrow up/down to read it under NVDA. Close (or Esc) dismisses.
    HelpF1 (anywhere), or Alt+H, HOpens this user manual in your default web browser. F1 also works from inside every dialog (Preferences, Keyboard shortcuts, About, Startup behaviour) and from the startup profile picker, before the main window has even loaded.
    Check for updatesAlt+H, CAsks the RemSound website whether a newer version is available. If there is one, you get a confirmation dialog with the release notes and a Yes / No to install. If you're already up to date, a popup tells you so. (To have RemSound check on its own instead of pressing this button, see Updating RemSound.)
    About RemSoundAlt+H, AA small dialog showing the version you're running and the latest release notes in a scrollable read-only box. Close (or Esc) dismisses it.

    6. Connectivity tab

    -

    This is where peers and logging live. Tab order on this tab:

    +

    This is where you manage peers and reach the logging options. The controls on this tab, in tab order:

    - - - - - + + + + +
    ControlShortcutWhat it does
    Connected peersAlt+CPeers you currently have audio flowing with. Unticking a row disconnects that peer.
    Discovered peersAlt+DPeers RemSound has heard from in the last few seconds — either via LAN broadcast or via direct unicast announcement (which works over Tailscale and any other VPN). Tick to connect.
    Remembered peersAlt+RPeers you’ve previously connected to or manually added. Persists across sessions. Tick to reconnect.
    Add peer by IPAlt+AOpens a small prompt for an IP address or hostname. Adds it to remembered and connects.
    Connection statusAlt+SA read-only multi-line text box that summarises everything currently happening — connect uptime, peer count, send/receive packet rates, heartbeat health for each peer. Tab into it and arrow up/down to read it line by line under NVDA.
    Connected peersAlt+CThe people you currently have sound flowing with. Unticking a row disconnects that peer.
    Discovered peersAlt+DPeople RemSound has heard from in the last few seconds. Tick someone to connect to them.
    Remembered peersAlt+RPeople you've connected to before, or added by address. This list is kept between sessions. Tick someone to reconnect.
    Add peer by IPAlt+AOpens a small box where you type an address or computer name. It adds that peer to the remembered list and connects.
    Connection statusAlt+SA read-only box of text that sums up everything happening right now — how long you've been connected, how many peers you have, how much sound is flowing each way, and the connection health of each peer. Open it to read the current connection status.

    7. Audio inputs and outputs tab

    -

    This tab controls everything to do with which audio devices are involved. The ASIO driver picker at the top decides whether ASIO is in the pipeline at all; the Receive and Send sides each have their own master checkbox and device lists.

    +

    This tab controls everything to do with which sound devices are involved. The ASIO driver picker at the top decides whether ASIO is being used at all. The Receive side and the Send side each have their own master checkbox and their own device lists.

    - - - - - - - + + + + + + + - +
    ControlShortcutWhat it does
    ASIO driverAlt+DListbox starting with (none). Pick (none) and the app runs in WASAPI-only mode; pick a real driver and the ASIO device lists below appear and the Audio profile tab gains a second ASIO-latency row. Arrowing between drivers swaps which interface RemSound talks to. On a machine with no ASIO drivers installed this control is hidden entirely.
    Receive audioAlt+RMaster toggle for receiving. When off, no audio plays out regardless of which output devices are ticked.
    WASAPI outputs for received soundAlt+3Tick which Windows audio outputs (speakers, headsets) should play received audio. Multiple ticks means received audio plays out of all of them simultaneously.
    ASIO outputs for received soundAlt+1(Visible when an ASIO driver is selected.) Tick ASIO channel pairs to play received audio out of.
    Set volume for all received audioAlt+VSlider: master volume for everything coming in. There is no per-device or per-source volume.
    Send my audioAlt+SMaster toggle for sending.
    WASAPI outputs to sendAlt+4Tick which Windows output devices to capture from (system audio loopback — what’s currently playing on those speakers gets sent).
    ASIO driverAlt+DA list that starts with (none). Pick (none) and the app uses the ordinary Windows sound path only; pick a real driver and the ASIO device lists appear below, and the Audio profile tab gains a second delay setting. If your computer has no ASIO drivers installed, this control is hidden completely.
    Receive audioAlt+RThe master switch for receiving. When it's off, no sound plays out, no matter which output devices are ticked.
    WASAPI outputs for received soundAlt+3Tick which ordinary Windows outputs (speakers, headsets) should play the received sound. Ticking more than one means the received sound plays out of all of them at once.
    ASIO outputs for received soundAlt+1(Shown when an ASIO driver is chosen.) Tick which ASIO channel pairs should play the received sound.
    Set volume for all received audioAlt+VA slider: the master volume for everything coming in. There is no separate volume per device or per person.
    Send my audioAlt+SThe master switch for sending.
    WASAPI outputs to sendAlt+4Tick which Windows output devices to capture from — this captures whatever is currently playing on those speakers and sends it.
    WASAPI inputs to sendAlt+5Tick which Windows input devices to capture (microphones, line-ins).
    ASIO inputs to sendAlt+2(Visible when an ASIO driver is selected.) Tick ASIO channel pairs to capture and send.
    ASIO inputs to sendAlt+2(Shown when an ASIO driver is chosen.) Tick which ASIO channel pairs to capture and send.
    -

    All device lists are checkable list boxes — arrow up and down to browse, spacebar to toggle a tick. Profiles save device ticks; Blank template starts with everything unticked.

    +

    All the device lists are checkable lists — tick or untick an item to include or exclude that device. Profiles save which devices are ticked; the blank template starts with everything unticked.

    Receiving

    -

    Receiving has two requirements: Receive audio ticked, and at least one output device ticked. Without an output device, even if packets arrive there’s nowhere for them to go.

    +

    To receive sound you need two things: Receive audio ticked, and at least one output device ticked. Without an output device, even when sound arrives there is nowhere for it to go.

    -

    Tick as many outputs as you like across both the WASAPI and ASIO output lists — the same received audio plays out of all of them. Common combinations:

    +

    Tick as many outputs as you like across the WASAPI and ASIO output lists — the same received sound plays out of all of them. Common combinations:

    -

    Cross-lane routing (v1.5+): a peer always announces which lane it’s sending from (WASAPI lane or ASIO lane). On the receiving side, if you have only one type of output device ticked, audio from a peer’s opposite lane is still routed through whatever output IS ticked. Pre-v1.5 a WASAPI-lane peer was inaudible to a receiver who only had ASIO outputs ticked (and vice versa) — the session opened but never produced audio. Now a single ticked output is enough to hear everything.

    +

    Hearing everyone with one output ticked. A peer always tells you which sound path it's sending from. On your end, if you only have one type of output device ticked, sound from a peer using the other type is still routed through whatever output you do have ticked. So a single ticked output is enough to hear everyone.

    Sending

    -

    Sending requires Send my audio ticked, plus at least one capture source ticked across the three send lists.

    +

    To send sound you need Send my audio ticked, plus at least one capture source ticked across the three send lists.

    - - - + + +
    ListWhat it capturesTypical use
    WASAPI outputs to sendSystem audio loopback — whatever Windows is currently sending out through that output. So picking your “Speakers” device captures whatever you’re hearing.Sharing music playback, sharing a video call’s audio, anything coming out of your own speakers.
    WASAPI inputs to sendDirect capture from a microphone or line input.Your USB microphone, a headset mic, a line-in.
    ASIO inputs to sendAn ASIO channel pair — typically a hardware input on a pro audio interface.Instrument input on an Audient EVO, microphone preamp on a Focusrite, etc.
    WASAPI outputs to sendWhatever Windows is currently playing through that output. So picking your “Speakers” device captures whatever you're hearing.Sharing music playback, sharing the sound from a video call, anything coming out of your own speakers.
    WASAPI inputs to sendSound captured straight from a microphone or line input.Your USB microphone, a headset mic, a line-in.
    ASIO inputs to sendAn ASIO channel pair — usually a hardware input on a professional audio interface.An instrument input on an Audient EVO, a microphone preamp on a Focusrite, and so on.
    -

    Tick any combination across the three lists. RemSound mixes them into a single stream and sends that to all selected peers. So you can send a mic plus a guitar plus your system audio at once, mixed together, and your friends hear all three.

    +

    Tick any combination across the three lists. RemSound mixes them together into one stream and sends that to all your chosen peers. So you can send a mic plus a guitar plus your system sound all at once, mixed together, and your friends hear all three.

    -System audio loopback can cause feedback loops. If you tick the same device for both “WASAPI outputs to send” (loopback) and as your “WASAPI outputs for received sound”, the received audio plays out of that device, gets captured by the loopback, and gets sent back. The other side hears their own voice on a delay. Don’t tick a device on both sides at once. +Capturing your speakers can cause an echo loop. If you tick the same device both in “WASAPI outputs to send” and in “WASAPI outputs for received sound”, then the received sound plays out of that device, gets captured again, and gets sent back. The other person ends up hearing their own voice on a delay. Don't tick the same device on both sides at once.

    8. Audio profile tab

    -

    Everything that shapes the audio quality / latency trade-off lives here. The first thing you land on when you Tab into the tab is the Priority mode checkbox — kept ungrouped at the top because it's the single biggest knob for cold-start audio feel. Below that, two NVDA-announced groups: Audio send parameters first, Audio receive parameters below. As you tab through, NVDA announces which group you’ve entered.

    +

    Everything that shapes the trade-off between sound quality and delay lives here. The first control on the tab is the priority mode checkbox — it sits on its own at the top because it has the biggest single effect on how the audio feels in the first few seconds. Below it are two groups: Audio send parameters first, then Audio receive parameters.

    Use CPU and Windows performance settings in high priority mode (Alt+U)

    -

    The first control on the tab. When ticked, RemSound asks Windows for high-priority treatment across the board, the entire time RemSound is open under this profile. Specifically:

    +

    This is the first control on the tab. When it's ticked, RemSound asks Windows to keep it running at full speed the whole time RemSound is open under this profile.

    - +

    The effect is that the “the first few seconds sound rough, then it warms up” behaviour goes away — nothing in the system is allowed to coast while RemSound is sitting quietly between bursts of sound.

    -

    Net effect: the cold-start “first few seconds sound terrible, then it warms up” behaviour goes away. Nothing in the OS coasts while RemSound is sitting between bursts of activity.

    - -

    It’s a per-profile setting, so you can have one profile for live sessions where this is on and another for casual background-listening profiles where it stays off. Toggling marks the profile as having unsaved changes; save the profile to keep the choice.

    +

    This is a per-profile setting, so you can have one profile for live sessions where it's on, and another for casual background listening where it stays off. Turning it on or off marks the profile as having unsaved changes; save the profile to keep your choice.

    - +
    When to tick itWhen to leave it off
    Live music collaboration. Anything where the first few seconds matter. Pro-audio setups using ASIO at very low latency targets (sub-15 ms). Sessions where the CPU sits idle between brief bursts of activity (one person presses Push-To-Talk on the other end).Battery-powered laptop, especially when running long. Background listening over hours. A passive monitoring profile that doesn’t need responsive cold starts.
    Playing music together live. Anything where the first few seconds matter. Professional setups using ASIO at very low delay targets (under 15 ms). Sessions where the computer sits idle between short bursts of sound.A laptop running on battery, especially for a long session. Background listening for hours at a time. A passive monitoring setup that doesn't need a fast start.
    -

    Cost on a desktop: a couple of watts more while RemSound is open. Cost on a laptop on battery: more aggressive battery drain over the session because the cores park in a higher power state instead of dropping to deep idle — RemSound’s actual CPU usage doesn’t change, the cores just don’t sleep. The override is automatically reversed when RemSound closes (or when you untick it), so leaving the app running with the box on for a session is fine — turning it off mid-session also works.

    +

    The cost on a desktop is a couple of extra watts while RemSound is open. The cost on a laptop running on battery is that the battery drains a bit faster over the session, because the processor stays more wakeful instead of dozing — RemSound's own workload doesn't change, the processor just doesn't sleep as deeply. The setting is reversed automatically when RemSound closes (or when you untick it), so it's fine to leave the app running with the box ticked for a whole session, and turning it off partway through works too.

    -

    None of the other apps on your machine are affected. RemSound only asks Windows to keep itself at high priority; the OS keeps throttling everything else normally, so your screen reader, browser and background services still get the usual power-saving treatment.

    +

    None of the other apps on your computer are affected. RemSound only asks Windows to keep itself running at full speed; Windows still saves power on everything else as normal, so your screen reader, browser and background programs are untouched.

    Audio send parameters

    - - - + + +
    ControlShortcutWhat it does
    Audio codecAlt+CPCM 48k 24-bit, Opus high quality (20 ms), or Opus lower quality (10 ms). See codec choice.
    Packet sizeAlt+PStandard (default) or Small (LAN only). Smaller packets save a couple of milliseconds of send-side accumulator latency at the cost of doubling the packet rate.
    Lock to audio clockAlt+DSender-side timing tightener. Locks packet emission to the audio device’s hardware clock instead of a Stopwatch loop. Saves a few milliseconds of jitter; brief clicks possible if the link can’t keep up. The label changes depending on whether ASIO is in the pipeline so it tells you what it actually does in your current setup. Mnemonic was Alt+K until v1.5 (Record menu took Alt+K at the menu-bar level) — now Alt+D, the D from “audio”.
    Audio codecAlt+CThe codec is the method RemSound uses to package the sound before sending it. Choices: PCM 48k 24-bit, Opus high quality (20 ms), or Opus lower quality (10 ms). See codec choice.
    Packet sizeAlt+PStandard (the default) or Small (for a local network only). Smaller packets save a couple of milliseconds of delay on the sending side, but they double how many packets are sent.
    Lock to audio clockAlt+DA timing setting on the sending side. It ties the sending of packets to the sound device's own hardware clock, which removes a little jitter (jitter means uneven packet timing). Brief clicks are possible if the connection can't keep up. The label changes depending on whether ASIO is in use, so it always describes what it does in your setup.

    Audio receive parameters

    -

    The shape of this section depends on whether an ASIO driver is selected on the Audio inputs and outputs tab. With no ASIO driver, you see one latency row (the WASAPI one, labelled simply “Audio latency”). With an ASIO driver selected, you see two latency rows — one per lane — each with its own auto-tune toggle. The two lanes are independent: a WASAPI underrun doesn’t pull the ASIO target up, and vice versa.

    +

    What you see in this section depends on whether an ASIO driver is chosen on the Audio inputs and outputs tab. With no ASIO driver, you see one delay setting (labelled simply “Audio latency”). With an ASIO driver chosen, you see two delay settings — one for each sound path — each with its own auto-tune toggle. The two paths are independent: a problem on one doesn't affect the other.

    - - - - - - + + + + + +
    ControlShortcutWhat it does
    ASIO latency in millisecondsAlt+L(Only when an ASIO driver is selected.) Spinner. Target receive buffer for the ASIO lane. Default 10 ms. ASIO’s native pipeline can sustain very low targets, but values below the platform’s real-world jitter floor (typically 15–25 ms) cause constant micro-corrections that you can hear — pick 25 ms as a safe floor unless you’re on localhost or wired LAN.
    Continuous auto-tune ASIO latencyAlt+T(Only when an ASIO driver is selected.) Checkbox. Nudges the ASIO latency target as ASIO-lane jitter changes. Independent of the WASAPI toggle.
    WASAPI latency in milliseconds (called just “Audio latency” with no ASIO driver)Alt+W (Alt+L when no ASIO driver)Spinner. Target receive buffer for the WASAPI lane (or the only lane in WASAPI-only setups). Smaller = less delay, more clicks. Most people want 20–80 ms.
    Continuous auto-tune WASAPI latency (called “Continuous auto-tune latency” with no ASIO driver)Alt+Y (Alt+T when no ASIO driver)Checkbox. When on, RemSound nudges the WASAPI lane latency value automatically as the network changes. The accompanying interval combo (Alt+I) sets how often it re-evaluates: 3, 5, 10, 15, or 30 seconds. The combo’s label is “Auto-tune latency interval” in WASAPI-only mode and “Auto-tune interval — WASAPI and ASIO” when an ASIO driver is selected, because the single tick rate drives both lanes’ auto-tunes when ASIO is in play. Each lane still independently lands at whatever target its own algorithm chooses; only the cadence is shared.
    Buffer smoothnessAlt+BListbox, 1 to 10. Controls how patient the receiver is with late-arriving audio on either lane. Higher = more click protection, longer steady-state delay. Default 3.
    Artefact sound typeAlt+AListbox. Noise burst (default) replaces an empty-buffer moment with a brief broadband shhh, which blends into music. Click uses raw zero-fill (no concealment) for diagnostic purposes — you hear an obvious click on every buffer underrun.
    ASIO latency in millisecondsAlt+L(Only when an ASIO driver is chosen.) A small up/down number control. It sets the target amount of sound to keep buffered for the ASIO path. Default 10 ms. ASIO can sustain very low values, but going below the network's real-world jitter level (typically 15–25 ms) causes constant tiny corrections that you can hear — pick 25 ms as a safe floor unless both computers are on the same wired network or the same machine.
    Continuous auto-tune ASIO latencyAlt+T(Only when an ASIO driver is chosen.) A checkbox. It nudges the ASIO delay target as the ASIO path's jitter changes. It works independently of the WASAPI toggle.
    WASAPI latency in milliseconds (called just “Audio latency” when there's no ASIO driver)Alt+W (Alt+L when no ASIO driver)A small up/down number control. It sets the target amount of sound to keep buffered for the WASAPI path (or the only path, in WASAPI-only setups). Smaller means less delay but more clicks. Most people want 20–80 ms.
    Continuous auto-tune WASAPI latency (called “Continuous auto-tune latency” when there's no ASIO driver)Alt+Y (Alt+T when no ASIO driver)A checkbox. When it's on, RemSound nudges the WASAPI delay value automatically as the network changes. The companion interval combo box (Alt+I) sets how often it re-checks: 3, 5, 10, 15, or 30 seconds. The combo's label is “Auto-tune latency interval” in WASAPI-only setups and “Auto-tune interval — WASAPI and ASIO” when an ASIO driver is chosen, because that one timer drives both paths' auto-tuning. Each path still settles at whatever target its own calculation chooses; only the timing of the re-checks is shared.
    Buffer smoothnessAlt+BA list, 1 to 10. It controls how patient the receiving side is with sound that arrives late, on either path. Higher means more protection from clicks but a longer steady delay. Default 3.
    Artefact sound typeAlt+AA list. Noise burst (the default) fills a momentary gap with a brief soft hiss, which blends into music. Click leaves the gap unfilled so you hear an obvious click — useful when you want to hear every problem.
    -

    Most people only need to pick a codec and a smoothness level and let the rest sit on defaults.

    +

    Most people only need to pick a codec and a smoothness level, and leave everything else at its default.

    9. ASIO and WASAPI

    -

    RemSound speaks two audio backends. Which one is in play depends on the ASIO driver (Alt+D) listbox at the top of the Audio inputs and outputs tab.

    +

    RemSound can use two different ways of handling sound. Which one it uses depends on the ASIO driver (Alt+D) list at the top of the Audio inputs and outputs tab.

    WASAPI (the default)

    -

    Windows’ standard audio engine. Every device in your Windows Sound control panel is reachable via WASAPI. Latency from a WASAPI capture or playback is typically 10–30 milliseconds. Anyone running RemSound has WASAPI; no special hardware needed.

    +

    WASAPI is the normal Windows way of handling sound — every speaker and microphone in your Windows sound settings works this way. The delay added by capturing or playing through WASAPI is usually 10–30 milliseconds. Everyone running RemSound has WASAPI; no special equipment is needed.

    ASIO (needs a driver)

    -

    A separate audio path used by professional audio interfaces. ASIO drivers bypass the Windows audio engine and talk directly to the hardware, giving sub-5-millisecond hardware latency.

    +

    ASIO is a faster, more direct way of handling sound used by professional audio equipment. ASIO drivers talk straight to the hardware, giving a hardware delay of under 5 milliseconds. It only works if your audio interface came with an ASIO driver.

    -

    The ASIO driver picker is omitted entirely on a machine with no ASIO drivers installed. Common drivers that do appear:

    +

    The ASIO driver picker doesn't appear at all on a computer with no ASIO drivers installed. Common drivers that do appear:

    -

    How the driver picker chooses the pipeline

    +

    How the driver picker decides

    One control, two outcomes:

    - - - + + +
    ASIO driver selectionPipelineLatency
    (none)WASAPI captures and plays out directly. No ASIO code in the pipeline at all.~10–30 ms WASAPI buffer + WasapiOut. Lowest possible for users without an ASIO driver.
    Any real driver nameWASAPI and ASIO run as two independent UDP streams alongside each other. Each lane keeps its own native latency — ASIO stays sub-5 ms even when WASAPI is also active.WASAPI at its WASAPI rate, ASIO at its ASIO rate. No cross-lane tee, no intermediate buffer; each lane has its own latency knob on the Audio profile tab (see Latency).
    ASIO driver choiceWhat happensDelay
    (none)WASAPI captures and plays the sound directly. ASIO is not used at all.About 10–30 ms. The lowest possible for anyone without an ASIO driver.
    Any real driver nameWASAPI and ASIO both run, side by side, as two independent streams. Each keeps its own native delay — ASIO stays under 5 ms even while WASAPI is also running.WASAPI at its rate, ASIO at its rate. Each one has its own delay setting on the Audio profile tab (see Latency).
    -

    Default on a fresh install is (none). If you have an ASIO driver and want to use it, arrow down to it in the picker. To go back to WASAPI-only, arrow back up to (none).

    +

    On a fresh install the choice is (none). If you have an ASIO driver and want to use it, select it in the picker. To go back to WASAPI only, select (none).

    ASIO channel pairs

    -

    ASIO doesn’t expose “devices” the way Windows does. Instead it gives you a list of channels (typically 2, 4, 6, 8, or more depending on the interface), grouped into stereo pairs. RemSound labels each pair with the driver name, the pair number, and the channel names the driver itself reports. For an Audient EVO 8 you’d see entries like:

    +

    ASIO doesn't list “devices” the way Windows does. Instead it gives you a list of channels (usually 2, 4, 6, 8 or more, depending on the interface), grouped into stereo pairs. RemSound labels each pair with the driver name, the pair number, and the channel names the driver itself reports. For an Audient EVO 8 you'd see entries like:

     Audient USB Audio ASIO Driver — Pair 1 (channels 1/2): Mic | Line | Instrument 1 / Mic | Line 2
    @@ -385,224 +372,217 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L
     

    Buffer size for ASIO

    -

    RemSound doesn’t expose a buffer-size control of its own. To change ASIO buffer size, open the audio interface’s own control panel application (NI’s Komplete Audio Control Panel, Audient EVO Control software, etc.) and set it there. The driver remembers its buffer size between sessions; RemSound just uses whatever the driver is configured to do.

    +

    RemSound has no buffer-size control of its own. To change the ASIO buffer size, open the control panel program that came with your audio interface (such as NI's Komplete Audio Control Panel or the Audient EVO software) and set it there. The driver remembers its buffer size between sessions; RemSound simply uses whatever the driver is set to.

    -About Realtek ASIO: if you see “Realtek ASIO” in the driver list, treat it with caution. Despite the name, it’s not bound to Realtek hardware specifically — it’s a generic wrapper that opens whatever Windows considers the default audio device. On a machine with a real audio interface (Audient, Komplete, etc.) selecting Realtek ASIO will often grab that interface via Windows’ WDM path, fighting both your real ASIO driver and your screen reader for the same hardware. Usually safe to ignore Realtek ASIO entirely. +About Realtek ASIO: if you see “Realtek ASIO” in the driver list, be careful with it. Despite the name, it isn't tied to Realtek hardware — it's a generic driver that opens whatever Windows treats as the default sound device. On a computer that has a real audio interface (Audient, Komplete, and so on), choosing Realtek ASIO will often grab that interface and end up fighting both your real ASIO driver and your screen reader for the same hardware. It's usually best to ignore Realtek ASIO completely.
    -

    Same driver, sender and receiver, on one machine

    -

    RemSound supports this — you can capture from your audio interface and play received audio out of the same interface simultaneously, on the same machine. Most modern pro audio drivers handle this fine.

    +

    Same driver, sending and receiving, on one computer

    +

    RemSound supports this — you can capture from your audio interface and play received sound out of the same interface at the same time, on the same computer. Most modern professional audio drivers handle this fine.

    10. Peers — finding and connecting

    -

    “Peer” means another machine running RemSound that you want to talk to. Peers are managed on the Connectivity tab. The tab has three lists, all of them checkable:

    +

    A “peer” is another computer running RemSound that you want to talk to. You manage peers on the Connectivity tab. It has three lists, all of them checkable:

    - - - + + +
    ListContentsWhat ticking does
    Connected peersPeers you currently have audio flowing with.Unticking disconnects.
    Discovered peersPeers RemSound has heard from in the last few seconds — either via LAN broadcast, or via direct unicast announcement (which works over Tailscale and any other VPN).Connects you to that peer. Audio starts flowing both ways.
    Remembered peersPeers you’ve connected to before, plus any IPs you’ve manually typed in. Persists across sessions.Connects to that remembered peer if they’re online (and adds them as a manual connection if discovery hasn’t found them yet).
    Connected peersPeople you currently have sound flowing with.Unticking disconnects.
    Discovered peersPeople RemSound has heard from in the last few seconds — either from an announcement sent across your local network, or from a direct announcement (which is how it works over Tailscale and other VPNs).Connects you to that peer. Sound starts flowing both ways.
    Remembered peersPeople you've connected to before, plus any addresses you've typed in by hand. This list is kept between sessions.Connects to that remembered peer if they're online (and adds them as a manual connection if discovery hasn't found them yet).
    -

    Plus the Add peer by IP (Alt+A) button which opens a small prompt for a hostname or IP. Useful for first-time connection over a VPN where discovery hasn’t reached them yet.

    +

    There's also the Add peer by IP (Alt+A) button, which opens a small box for a computer name or address. It's useful for a first connection over a VPN, where discovery hasn't reached the other computer yet.

    -

    Audio only plays from peers you’ve ticked

    -

    Even if a peer is sending audio in your direction, you won’t hear it until you’ve ticked their checkbox. This is deliberate — connecting is a consent step. A peer’s name shows up in Discovered the moment they come online, but they can’t make sound on your speakers until you say yes.

    +

    You only hear peers you've ticked

    +

    Even if a peer is sending sound your way, you won't hear it until you've ticked their checkbox. This is deliberate — connecting is a step where you give your consent. A peer's name appears in Discovered the moment they come online, but they can't make any sound on your speakers until you say yes.

    -

    Heartbeat indicator

    -

    For each connected peer, the status read-out at the bottom of the window shows a small status: their latest round-trip time in milliseconds, or pending, stale, or unreachable if heartbeat replies have stopped. RemSound plays a connect cue (a short sound) when a peer transitions to healthy and a disconnect cue when one becomes unreachable. Both cues can be silenced via Mute connect/disconnect sounds in the Preferences dialog (Options → Preferences, or Ctrl+P).

    +

    Connection health

    +

    For each connected peer, the status read-out at the bottom of the window shows a small health note: the latest round-trip time in milliseconds, or pending, stale or unreachable if the regular check-in messages have stopped. (Round-trip time is how long sound takes to travel to the other computer and back.) RemSound plays a connect cue (a short sound) when a peer becomes healthy and a disconnect cue when one becomes unreachable. You can silence both cues using Cue sounds in the Preferences dialog (Options → Preferences, or Ctrl+P).

    11. How the network works (LAN, WAN, Tailscale)

    -

    RemSound uses two UDP ports:

    +

    RemSound communicates on two network channels:

    - - - + + +
    PortPurposeDefault
    AudioThe actual sound, sent peer-to-peer. Heartbeat packets share this port too — one socket, one firewall rule, one router pinhole.47830
    Discovery“I’m here” announcements every 1.5 seconds, so peers can find each other.47831
    ChannelPurposeDefault
    AudioThe actual sound, sent straight from one computer to the other. The regular health check-ins use this same channel too — one channel, one firewall rule.47830
    Discovery“I'm here” announcements every 1.5 seconds, so peers can find each other.47831
    -

    One canonical audio port number is used for everything — Tailscale, LAN peer-to-peer, and any relay server. You never need to type a port after a hostname or IP; the default is implied. Both sides of a connection need to use the same audio port number.

    +

    One audio channel number is used for everything — Tailscale, local network connections, and any relay server. You never need to type a channel number after an address; the default is assumed. Both sides of a connection do need to use the same audio channel number.

    -

    Heartbeat packets ride on the same UDP port as audio, so if your audio reaches the peer, your heartbeat does too — one firewall rule covers both.

    +

    The health check-ins travel on the same channel as the audio, so if your sound reaches the other computer, your check-ins do too — one firewall rule covers both.

    -

    Network packet priority (qWAVE / Voice / WMM)

    +

    Network priority

    -

    RemSound asks Windows’ built-in Quality-of-Service service (qWAVE — Quality Windows Audio/Video Experience) to mark its outbound audio packets as Voice priority (DSCP 46, Expedited Forwarding). This happens automatically on every launch — there’s no toggle — and falls back silently if the service is unavailable (some stripped-down Windows images).

    - -

    What it buys you, in order of how much you’ll actually notice:

    - - -

    What it doesn’t buy you: priority across the public internet. Most ISPs strip or rewrite DSCP markings at the network edge, so the qWAVE bits rarely survive past your local ISP’s first hop. LAN and same-house Wi-Fi: tangible benefit. Across the internet: neutral — no harm, no help. RemSound also requests 1 MB kernel send and receive buffers on its UDP sockets so a momentary stall (GC, scheduler hiccup) up to roughly 30 ms doesn’t cause the kernel to drop datagrams on either side.

    +

    RemSound automatically asks Windows to treat its audio as high-priority traffic, which helps most on a busy Wi-Fi network where other devices are streaming, downloading or video-calling. There's nothing to set up — it happens on its own every time RemSound starts. This helps on your local network and your home Wi-Fi; it makes no difference once the traffic leaves your home, but it does no harm either.

    LAN — same Wi-Fi or Ethernet

    -

    On a normal home network, discovery and heartbeat both work without configuration. Launch RemSound on two machines and they’ll see each other within a second or two via the discovery broadcast. No firewall changes are usually needed because UDP broadcast is allowed by default.

    +

    On a normal home network, finding peers and checking their health both work with no setup. Start RemSound on two computers and they'll see each other within a second or two. You usually don't need to change any firewall settings.

    -

    WAN — different physical locations

    -

    Direct internet peer-to-peer connections require either:

    +

    WAN — computers in different places

    +

    Connecting two computers directly across the internet needs one of these:

    -

    Discovery on Tailscale and other VPNs

    -

    UDP broadcast doesn’t traverse a VPN — Tailscale’s virtual interface ignores broadcast packets entirely. RemSound works around this by also sending discovery announcements directly (unicast) to every IP in your Remembered peers list. So:

    +

    Finding peers on Tailscale and other VPNs

    +

    The ordinary “I'm here” announcements that work on a home network don't travel across a VPN. RemSound works around this by also sending announcements directly to every address in your Remembered peers list. So:

      -
    1. One time only: each side adds the other’s Tailscale IP to its Remembered peers list (via the “Add peer by IP” button).
    2. -
    3. From then on, RemSound auto-unicasts announcements at those IPs every 1.5 seconds.
    4. -
    5. The receiving side’s discovery hears the announcement, adds the sender to its own unicast list, and announces back.
    6. -
    7. Within seconds, both sides see each other in Discovered peers without further typing.
    8. +
    9. One time only: each side adds the other's Tailscale address to its Remembered peers list (using the “Add peer by IP” button).
    10. +
    11. From then on, RemSound sends announcements straight to those addresses every 1.5 seconds.
    12. +
    13. The other side hears the announcement, adds the sender to its own list, and announces back.
    14. +
    15. Within seconds, both sides see each other in Discovered peers, with no further typing.
    -

    So the rule is: only one side has to type the other’s IP once. After that, discovery is bidirectional automatically.

    +

    So the rule is: only one side has to type the other's address once. After that, the discovery works both ways on its own.

    Round-trip time and what it means

    +

    Round-trip time is how long it takes for sound to travel to the other computer and back.

    - - - - - - + + + + + +
    RTTWhat you’ll experience
    0–2 msLocalhost (same machine talking to itself).
    2–10 msSame LAN. Effectively instant.
    15–40 msTypical Tailscale or modern broadband-to-broadband. Comfortable for conversation.
    50–100 msTailscale via a relay, or one end on Wi-Fi from a long way off. Still usable but you start to feel it for music.
    100 ms+Something is wrong, or you’re across the world. Music collaboration is challenging.
    Round-trip timeWhat you'll experience
    0–2 msThe same computer talking to itself.
    2–10 msSame local network. Effectively instant.
    15–40 msTypical for Tailscale or modern broadband-to-broadband. Comfortable for conversation.
    50–100 msTailscale via a relay, or one end on Wi-Fi a long way off. Still usable, but you start to notice it for music.
    100 ms+Something is wrong, or you're talking across the world. Playing music together is hard.

    12. Latency and audio quality

    -

    Five controls together shape the latency / audio-quality trade-off, all on the Audio profile tab:

    +

    Latency is the small delay between sound leaving one computer and arriving at the other. Five controls together shape the trade-off between latency and sound quality, all on the Audio profile tab:

    -

    Plus the codec choice (PCM / Opus 20 ms / Opus 10 ms), also on the Audio profile tab. Most people only need to pick a codec and a smoothness level and let the rest sit on defaults.

    +

    Plus the codec choice (PCM, Opus 20 ms or Opus 10 ms), also on the Audio profile tab. Most people only need to pick a codec and a smoothness level and leave the rest at the default.

    -

    Audio latency slider

    +

    Audio latency control

    -

    The Audio latency spinner tells the receiver how much audio to keep buffered as a cushion against network jitter. Bigger buffer = more delay, fewer clicks. Smaller buffer = less delay, more clicks when the network wobbles.

    +

    The Audio latency control tells the receiving side how much sound to keep in reserve as a cushion against uneven network timing. A bigger cushion means more delay but fewer clicks. A smaller cushion means less delay but more clicks when the network wobbles.

    - - - - + + + +
    SettingBest forTrade-off
    5–10 msLAN, localhost.Crackles on any WAN with even modest jitter.
    20–40 msStable Tailscale or wired internet.Good balance — usually inaudible delay added.
    50–80 msWAN with some Wi-Fi or jitter.Noticeable delay; very robust to drops.
    100 ms+Bad networks; voice-only.Definitely feels delayed.
    5–10 msLocal network, same computer.Crackles on any internet connection with even modest jitter.
    20–40 msStable Tailscale or wired internet.A good balance — the added delay is usually inaudible.
    50–80 msInternet with some Wi-Fi or jitter.Noticeable delay, but very robust against drop-outs.
    100 ms+Bad networks; voice only.The delay is definitely noticeable.
    -

    Smaller is better when the network can handle it. If you don’t want to think about this number, switch on continuous auto-tune (below) and leave it.

    +

    Smaller is better when the network can handle it. If you'd rather not think about this number, turn on continuous auto-tune (below) and leave it.

    Buffer smoothness

    -

    The Buffer smoothness listbox sets a 1-to-10 scale that controls how patient the receiver is when network jitter spikes. The default is 3.

    +

    The Buffer smoothness list is a 1-to-10 scale for how patient the receiving side is when network jitter spikes. The default is 3.

    - - - - + + + +
    SmoothnessBehaviourPick when
    10 — smoothestReceiver tolerates the largest jitter spikes without dropping audio. Longest steady-state delay.Bad Wi-Fi, busy ISP, music collaboration where every click is unacceptable.
    4–7Middle ground. Smooths most everyday internet jitter without much added delay.Most WAN sessions over Tailscale or direct internet.
    3 — defaultModerate protection; brief clicks possible on jitter spikes.Stable internet or quiet LAN.
    1 — tightest delayReceiver gives up immediately when audio is late. Frequent clicks; lowest delay.LAN testing, latency-critical experiments.
    10 — smoothestThe receiving side tolerates the biggest jitter spikes without dropping any sound. Longest steady delay.Bad Wi-Fi, a busy internet connection, music sessions where any click is unacceptable.
    4–7A middle ground. Smooths out most everyday internet jitter without much added delay.Most internet sessions over Tailscale or a direct connection.
    3 — defaultModerate protection; brief clicks possible when jitter spikes.A stable internet connection or a quiet local network.
    1 — tightest delayThe receiving side gives up immediately when sound is late. Frequent clicks, lowest delay.Testing on a local network, experiments where you want the lowest possible delay.
    -

    Smoothness and the Audio latency spinner work together — smoothness controls how the receiver responds when audio runs late; the latency value controls how big a head-start it builds. Real-world tip: if you can hear clicks, try raising smoothness by one or two before reaching for a bigger latency target.

    +

    Smoothness and the Audio latency control work together — smoothness controls how the receiving side reacts when sound runs late; the latency value controls how big a head-start it builds up. A practical tip: if you can hear clicks, try raising smoothness by one or two before you reach for a bigger latency value.

    Packet size — Standard or Small

    -

    Two options: Standard (default) and Small. Controls the frame size each network packet carries:

    +

    Two choices: Standard (the default) and Small. This controls how much sound each network packet carries:

    - - + +
    Packet sizeWhat changesPick when
    Standard (5 ms PCM, 10/20 ms Opus)One audio packet every 5 ms (PCM) or 10/20 ms (Opus, depending on codec choice).WAN, Tailscale, internet — any time you don’t have a guaranteed-clean LAN.
    Small (2.5 ms PCM, 5/10 ms Opus, LAN only)Halves the effective frame size. Saves up to 2.5 ms of accumulator latency at the sender.Same-house LAN over wired Ethernet, where the network simply isn’t going to drop or jitter.
    StandardOne audio packet every 5 ms with PCM, or every 10 or 20 ms with Opus, depending on the codec you chose.Any internet or Tailscale connection — any time you don't have a guaranteed-clean local network.
    Small (local network only)Halves how much sound each packet carries. Saves up to 2.5 ms of delay on the sending side.A same-house local network over wired Ethernet, where the network simply isn't going to drop packets or jitter.
    -

    The latency win is small — at most a few milliseconds end-to-end. Small packets are useful when you and your collaborator are on the same LAN and want to chase every last millisecond; for any internet path it’s a false economy because doubling the packet rate also doubles your odds of running into jitter at exactly the wrong moment, which translates into clicks.

    +

    The saving is small — at most a few milliseconds end to end. Small packets are useful when you and your collaborator are on the same local network and want to chase every last millisecond. For any internet connection it's a false economy, because doubling how many packets are sent also doubles the chance of running into jitter at the wrong moment, which you hear as clicks.

    Lock to audio clock

    -

    The Lock to audio clock checkbox locks RemSound’s send timing path to the audio device’s own hardware clock instead of letting Windows’ general thread scheduler set the pace. Off by default. The label tells you what it does in your current setup:

    +

    The Lock to audio clock checkbox ties RemSound's sending timing to the sound device's own hardware clock, instead of letting Windows decide the pace. It's off by default. The label tells you what it does in your particular setup:

    - - - + + +
    Current setupWhat “Lock to audio clock” does
    No ASIO driver selected (WASAPI only)Sender uses the WASAPI capture event for timing instead of a Stopwatch tick. Tightens send-side delay.
    ASIO driver selected (WASAPI + ASIO running as independent lanes)Both lanes tighten independently. WASAPI lane uses push-mode (when there is exactly one WASAPI capture source); ASIO lane emits one packet per ASIO callback with no accumulation. Brief clicks possible on either lane if the link can’t keep up.
    Your setupWhat “Lock to audio clock” does
    No ASIO driver chosen (WASAPI only)The sender takes its timing from the WASAPI capture instead of from Windows' general timer. Tightens the sending delay.
    An ASIO driver chosen (WASAPI and ASIO both running)Both paths tighten independently. Brief clicks are possible on either path if the connection can't keep up.
    -Why you’d use it: Windows’ thread scheduler can wake the audio loop with up to ~6 ms of jitter even at top priority. At target latencies under ~15 ms, that jitter shows up as clicks. Locking to the audio clock removes the Stopwatch loop from the timing path entirely — the audio device interrupts directly drive the encoder. +Why you'd use it: Windows' general timer can wake the audio loop with up to about 6 ms of wobble, even at top priority. At target latencies under about 15 ms, that wobble shows up as clicks. Locking to the audio clock takes Windows' timer out of the picture — the sound device itself drives the timing.

    Continuous auto-tune

    -

    The Continuous auto-tune latency checkbox hands the latency value over to RemSound itself. When on, RemSound observes incoming-packet jitter every few seconds and nudges the latency target up if it’s seeing late packets, or down if the network has been calm. The companion Auto-tune latency interval (Alt+I) combo sets how often it re-evaluates — 3, 5, 10, 15, or 30 seconds. Faster values respond quickly to a network change but can also feel “twitchy”. Treat continuous auto-tune as a hands-off way to keep the cushion right-sized as your network mood changes.

    +

    The Continuous auto-tune latency checkbox hands the latency value over to RemSound itself. When it's on, RemSound watches how evenly packets are arriving, every few seconds, and nudges the latency target up if it's seeing late packets, or down if the network has been calm. The companion Auto-tune latency interval (Alt+I) combo box sets how often it re-checks — 3, 5, 10, 15, or 30 seconds. Faster values react quickly to a change in the network but can feel a bit twitchy. Think of continuous auto-tune as a hands-off way to keep the cushion the right size as your network changes through the session.

    -

    If you turn auto-tune off, the latency value stays wherever it last was.

    +

    If you turn auto-tune off, the latency value just stays wherever it last was.

    Artefact sound type

    -

    When the playback buffer comes up empty for a moment (an underrun), RemSound has to fill the gap. The Artefact sound type listbox decides what that gap sounds like:

    +

    When the playback reserve briefly runs empty, RemSound has to fill the gap with something. The Artefact sound type list decides what that gap sounds like:

    -

    Opus packet-loss recovery (built in, no setting)

    +

    Opus repairs lost sound automatically (built in, no setting)

    -

    Both Opus modes ship with built-in forward error correction: each packet carries a small redundant copy of the previous packet’s audio, and the receiver uses it to reconstruct any single packet that goes missing in transit. The result is that single-packet losses become inaudible — no click, no glitch — instead of the small pop you’d otherwise hear. Two-packet-in-a-row losses still produce one click; that’s a fundamental Opus limitation, not something configurable.

    +

    Both Opus modes can automatically repair lost audio: each packet quietly carries a small backup copy of the previous packet's sound, so the receiving side can rebuild any single packet that goes missing on the way. The result is that a single missing packet becomes inaudible — no click, no glitch — instead of the small pop you'd otherwise hear. Two missing packets in a row still produce one click; that's just a limit of how Opus works, not something you can change.

    -

    This is automatic — there’s no switch. PCM mode does not have it.

    +

    This happens on its own — there's no switch for it. PCM mode doesn't have it.

    Codec choice

    +

    Remember, the codec is the method RemSound uses to package the sound before sending it.

    - - - - + + + +
    CodecQualityBandwidthUse when
    PCM 48k 24-bitBest~2.3 MbpsLAN, fast WAN connections.
    Opus high quality (20 ms)Very good~96 kbpsMost WAN connections — the right default.
    Opus lower quality (10 ms)Good~64 kbpsSlower or less reliable connections; tighter latency.
    CodecQualityNetwork useUse when
    PCM 48k 24-bitBestAbout 2.3 MbpsLocal networks, fast internet connections.
    Opus high quality (20 ms)Very goodAbout 96 kbpsMost internet connections — the right default.
    Opus lower quality (10 ms)GoodAbout 64 kbpsSlower or less reliable connections; tighter delay.
    -

    PCM gives the absolute best audio with no encoding artefacts but uses about 30× the bandwidth of Opus. Over the open internet, Opus is almost always the right call.

    +

    PCM gives the very best sound with no quality loss at all, but it uses about 30 times the network bandwidth of Opus. Over the open internet, Opus is almost always the right choice.

    13. Keyboard shortcuts (within the main window)

    -

    Each tab has its own Alt+letter shortcuts. The same letter can mean different things on different tabs without conflict — mnemonics fire only on the active tab. Move between tabs with Ctrl+Tab and Ctrl+Shift+Tab.

    +

    Each tab has its own Alt+letter shortcuts. The same letter can do different things on different tabs without clashing — the shortcuts only work on the tab that's showing. Move between tabs with Ctrl+Tab and Ctrl+Shift+Tab.

    Connectivity tab

    - - - + + + - +
    KeyAction
    Alt+CFocus Connected peers list
    Alt+DFocus Discovered peers list
    Alt+RFocus Remembered peers list
    Alt+CFocus the Connected peers list
    Alt+DFocus the Discovered peers list
    Alt+RFocus the Remembered peers list
    Alt+AAdd peer by IP
    Alt+SFocus Connection status read-out
    Alt+SFocus the Connection status read-out
    -

    (Logging controls — Enable logs and Write logs now — live in the Preferences dialog; reach them via Options → Preferences or Ctrl+P, then Alt+L / Alt+W within the dialog.)

    +

    (The logging controls — Enable logs and Write logs now — are in the Preferences dialog; reach it via Options → Preferences or Ctrl+P, then use Alt+L / Alt+W within the dialog.)

    Audio inputs and outputs tab

    - + - +
    KeyAction
    Alt+DFocus ASIO driver listbox (hidden if no ASIO drivers are installed)
    Alt+DFocus the ASIO driver list (hidden if no ASIO drivers are installed)
    Alt+RToggle Receive audio
    Alt+1Focus ASIO outputs for received sound
    Alt+2Focus ASIO inputs to send
    Alt+3Focus WASAPI outputs for received sound
    Alt+4Focus WASAPI outputs to send
    Alt+5Focus WASAPI inputs to send
    Alt+VFocus volume slider
    Alt+VFocus the volume slider
    Alt+SToggle Send my audio

    Audio profile tab

    -

    Some of these shortcuts shift depending on whether an ASIO driver is selected. When one is selected the ASIO-lane controls take the simpler Alt+L / Alt+T mnemonics; the WASAPI-lane controls move to Alt+W / Alt+Y so they don’t collide.

    +

    Some of these shortcuts shift depending on whether an ASIO driver is chosen. When one is chosen, the ASIO-path controls take the simpler Alt+L / Alt+T shortcuts, and the WASAPI-path controls move to Alt+W / Alt+Y so they don't collide.

    @@ -610,11 +590,11 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L - - - - - + + + + +
    KeyAction
    Alt+CFocus Audio codec
    Alt+PFocus Packet size
    Alt+DToggle Lock to audio clock
    Alt+LFocus latency spinner — ASIO lane when an ASIO driver is selected, otherwise the single Audio latency spinner
    Alt+TToggle continuous auto-tune — ASIO lane when an ASIO driver is selected, otherwise the single Continuous auto-tune toggle
    Alt+W(Only when an ASIO driver is selected.) Focus the WASAPI-lane latency spinner
    Alt+Y(Only when an ASIO driver is selected.) Toggle the WASAPI-lane continuous auto-tune
    Alt+IFocus Auto-tune latency interval combo. Drives the tick rate for the WASAPI auto-tune and (when an ASIO driver is selected) the ASIO auto-tune as well — one combo, both lanes. Each lane still independently lands at whatever latency its own algorithm decides; only the cadence is shared. The label changes from “Auto-tune latency interval” in WASAPI-only mode to “Auto-tune interval — WASAPI and ASIO” once an ASIO driver is in play, to make the dual-lane scope visible.
    Alt+LFocus the latency control — the ASIO path when an ASIO driver is chosen, otherwise the single Audio latency control
    Alt+TToggle continuous auto-tune — the ASIO path when an ASIO driver is chosen, otherwise the single Continuous auto-tune toggle
    Alt+W(Only when an ASIO driver is chosen.) Focus the WASAPI-path latency control
    Alt+Y(Only when an ASIO driver is chosen.) Toggle the WASAPI-path continuous auto-tune
    Alt+IFocus the Auto-tune latency interval combo box. It drives the timing for the WASAPI auto-tune and, when an ASIO driver is chosen, the ASIO auto-tune too — one combo, both paths. Each path still settles at whatever latency its own calculation chooses; only the timing of the re-checks is shared. The label changes from “Auto-tune latency interval” to “Auto-tune interval — WASAPI and ASIO” once an ASIO driver is in use.
    Alt+BFocus Buffer smoothness
    Alt+AFocus Artefact sound type
    @@ -622,17 +602,17 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L

    File menu shortcuts (work from any tab)

    - - - + + + - - - + + + - + - + @@ -641,329 +621,332 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L
    KeyAction
    Ctrl+SSave active profile (or Save as if on Blank template)
    Ctrl+KOpen Keyboard shortcuts dialog
    Ctrl+POpen Preferences dialog
    Ctrl+SSave the current profile (or Save as if on the blank template)
    Ctrl+KOpen the Keyboard shortcuts dialog
    Ctrl+POpen the Preferences dialog
    Ctrl+RStart or stop recording (toggles)
    Alt+K, RStart or stop recording (via menu — Record menu is Alt+K, item is R for “recording”)
    Alt+K, OOpen current recordings folder
    Alt+K, CChange recordings folder
    Alt+K, RStart or stop recording (via the menu — the Record menu is Alt+K, the item is R for “recording”)
    Alt+K, OOpen the current recordings folder
    Alt+K, CChange the recordings folder
    Alt+F, OOpen profile
    Alt+F, RRecent profiles (submenu — then 1..5 for the matching slot)
    Alt+F, RRecent profiles (submenu — then 1..5 for the matching slot)
    Alt+F, ASave profile as
    Alt+F, MRename current profile
    Alt+F, MRename the current profile
    Alt+F, NMinimise to tray
    Alt+O, SRecording settings
    Alt+O, KKeyboard shortcuts
    Alt+F, XExit
    -

    Always-available

    +

    Always available

    - - - - + + + + - +
    KeyAction
    F1Open this manual in your default browser. Works anywhere in RemSound — main window, every dialog, the profile picker on first launch.
    Ctrl+Tab / Ctrl+Shift+TabMove to next / previous tab
    Tab / Shift+TabMove between controls within the active tab
    SpacebarToggle a tick in any device list, or toggle the focused checkbox
    F1Open this manual in your default web browser. Works anywhere in RemSound — the main window, every dialog, and the profile picker on first launch.
    Ctrl+Tab / Ctrl+Shift+TabMove to the next / previous tab
    Tab / Shift+TabMove between controls within the current tab
    SpacebarTick or untick an item in any device list, or toggle the focused checkbox
    Up / DownMove between items in any list
    Alt+F4Close (standard Windows)
    Alt+F4Close (the standard Windows shortcut)

    14. Global hotkeys (work even when minimised)

    -

    Configurable in the Keyboard shortcuts dialog (Ctrl+K, or Options → Keyboard shortcuts). The dialog is a single list of every bindable shortcut: arrow up and down to move between rows, press Enter to rebind the highlighted row, press Del to clear it (back to not set), press Escape (or Tab to the Close button) to close. Defaults:

    +

    You set these up in the Keyboard shortcuts dialog (Ctrl+K, or Options → Keyboard shortcuts). The dialog is a single list of every hotkey you can set: Enter sets the highlighted row, Del clears it (back to not set), and Escape or the Close button closes the dialog. The defaults:

    - - + + - - - - + + + + - - - + + +
    HotkeyActionDefault
    Receive muteMute / unmute incoming audio (this machine)Ctrl+Shift+Alt+R
    Send muteMute / unmute outgoing audio (this machine)Ctrl+Shift+Alt+S
    Receive muteMute / unmute incoming sound (this computer)Ctrl+Shift+Alt+R
    Send muteMute / unmute outgoing sound (this computer)Ctrl+Shift+Alt+S
    Tray toggleShow / hide the main windowCtrl+Shift+F10
    Volume up / downAdjust this machine's received-audio volumeUnset
    Start / Stop recordingStart or stop a recording on this machine. Same toggle as the Record menu’s start/stop item and the in-app Ctrl+R, but works system-wide (RemSound doesn’t need keyboard focus). See Recording to a file for what gets captured.Unset
    Send remote volume up to peersTell every connected peer to raise their RemSound app volume slider by 5 points (only honoured by peers that have ticked “Accept remote volume commands”). Doesn't change your own volume. See Remote control.Unset
    Send remote volume down to peersMirror, lower direction.Unset
    Volume up / downAdjust this computer's received-sound volumeUnset
    Start / Stop recordingStart or stop a recording on this computer. The same toggle as the Record menu's start/stop item and the in-app Ctrl+R, but it works system-wide (RemSound doesn't need to be the active window). See Recording to a file for what gets captured.Unset
    Send remote volume up to peersTell every connected peer to raise their RemSound volume slider by 5 points (only obeyed by peers that have ticked “Accept remote volume commands”). It doesn't change your own volume. See Remote control.Unset
    Send remote volume down to peersThe same, but lowering.Unset
    Send remote receive mute toggle to peersTell every connected peer to toggle their RemSound receive mute.Unset
    Send Windows global volume up to peersTell every connected peer to nudge their Windows default-output-device volume up by one OS native step (~2%, same as their keyboard volume key). Affects every app on the receiving machine, not just RemSound. Hold the hotkey for bigger jumps. See Remote control.Unset
    Send Windows global volume down to peersMirror, lower direction.Unset
    Send Windows global mute toggle to peersTell every connected peer to toggle their Windows default-output-device mute.Unset
    Send Windows global volume up to peersTell every connected peer to nudge their Windows volume up by one step (about 2%, the same as their keyboard volume key). This affects every app on the receiving computer, not just RemSound. Hold the hotkey down for bigger jumps. See Remote control.Unset
    Send Windows global volume down to peersThe same, but lowering.Unset
    Send Windows global mute toggle to peersTell every connected peer to toggle their Windows mute.Unset
    -

    You can change any of these to whatever combination you prefer. Each accepts modifiers (Ctrl, Shift, Alt) plus one regular key.

    +

    You can change any of these to whatever combination you prefer. Each accepts modifiers (Ctrl, Shift, Alt) plus one ordinary key.

    15. Remote control: adjusting a peer's listening volume from your end

    -

    The use case: you're on your laptop, listening to audio coming from your desktop, and you've got NVDA Remote open so you can drive the desktop with your laptop's keyboard. Every keystroke you make goes to the desktop — including any local volume hotkey on the laptop, which now never reaches the laptop. There's no way from inside that NVDA Remote session to nudge the laptop's listening volume without breaking out of the session.

    +

    Here's the situation this is for: you're on your laptop, listening to sound coming from your desktop, and you've got NVDA Remote open so you can drive the desktop using your laptop's keyboard. Every key you press goes to the desktop — including any volume key on the laptop, which now never reaches the laptop itself. There's no way from inside that NVDA Remote session to nudge the laptop's listening volume without breaking out of the session.

    -

    RemSound's remote control feature gives you a way: configure a hotkey on the desktop (the machine your keyboard is talking to) that sends a command across the audio link telling the laptop's RemSound to raise / lower / mute its own listening volume. You stay in NVDA Remote; the laptop responds.

    +

    RemSound's remote control feature gives you a way around this: you set up a hotkey on the desktop (the computer your keyboard is talking to) that sends a command across the audio link, telling the laptop's RemSound to raise, lower or mute its own listening volume. You stay in NVDA Remote, and the laptop responds.

    -

    Two flavours of remote command

    +

    Two kinds of remote command

    -

    You get two independent sets of remote-control hotkeys, both controlled by the same opt-in toggle on the receiver. Pick whichever fits the situation, or bind both:

    +

    There are two independent sets of remote-control hotkeys, both governed by the same opt-in toggle on the receiving end. Pick whichever fits the situation, or set up both:

    - - - + + +
    SetWhat the receiver doesBest for
    RemSound app volumeAdjusts the receiving peer's RemSound in-app volume slider by 5 percentage points per press, or toggles the RemSound receive-mute. Only RemSound's audio is affected.Fine adjustments while RemSound's slider is in its useful range. Doesn't affect screen-reader volume or any other app.
    Windows global volumeNudges the receiving peer's Windows default-output-device master volume up or down by one OS-native step (~2%, exactly the same as pressing the keyboard volume key on the receiver), or toggles its master mute. Affects every app on the receiver, including the screen reader.Real-world “I need this louder” cases, especially with hearing impairment or when RemSound's slider is already at the top. Hold the hotkey to ramp up over a longer range.
    SetWhat the receiving computer doesBest for
    RemSound app volumeAdjusts the receiving peer's RemSound volume slider by 5 points per press, or toggles RemSound's receive mute. Only RemSound's sound is affected.Fine adjustments while RemSound's slider still has room to move. Doesn't touch the screen reader's volume or any other app.
    Windows global volumeNudges the receiving peer's Windows master volume up or down by one step (about 2%, exactly the same as pressing the keyboard volume key there), or toggles the master mute. This affects every app on the receiving computer, including the screen reader.Real-world “I need this louder” situations, especially with hearing impairment, or when RemSound's slider is already at the top. Hold the hotkey down to ramp up over a longer range.
    -

    Both sets target the receiver. Neither changes anything on the sending machine.

    +

    Both sets target the receiving computer. Neither one changes anything on the sending computer.

    How to set it up

      -
    1. On the machine that should respond to remote commands (the one you're listening on — the laptop in the example): open Preferences (Ctrl+P) and tick Accept remote volume commands from peers. Save the profile (Ctrl+S) so the choice sticks. (One toggle covers both flavours of remote command.)
    2. -
    3. On the machine that should send remote commands (the one your keyboard is driving — the desktop in the example): open the Keyboard shortcuts dialog (Ctrl+K). Bind whichever of the six remote-control rows you want: +
    4. On the computer that should respond to remote commands (the one you're listening on — the laptop in the example): open Preferences (Ctrl+P) and tick Accept remote volume commands from peers. Save the profile (Ctrl+S) so the choice sticks. (One toggle covers both kinds of remote command.)
    5. +
    6. On the computer that should send remote commands (the one your keyboard is driving — the desktop in the example): open the Keyboard shortcuts dialog (Ctrl+K). Set whichever of the six remote-control rows you want:
        -
      • Send remote volume up / down to peers — nudges the receiver's RemSound app slider.
      • +
      • Send remote volume up / down to peers — nudges the receiver's RemSound slider.
      • Send remote receive mute toggle to peers — toggles the receiver's RemSound mute.
      • -
      • Send Windows global volume up / down to peers — nudges the receiver's Windows master volume.
      • +
      • Send Windows global volume up / down to peers — nudges the receiver's Windows volume.
      • Send Windows global mute toggle to peers — toggles the receiver's Windows mute.
      -Bind whatever key combinations you prefer (e.g. Ctrl+Shift+Up / Ctrl+Shift+Down for one set, Ctrl+Alt+Up / Ctrl+Alt+Down for the other). These are global hotkeys: they fire as long as RemSound is running, no matter which app has focus.
    7. -
    8. That's it. Press the configured hotkey on the desktop — the laptop responds the way it would if you'd pressed the corresponding key on the laptop directly, and you hear the change without leaving the NVDA Remote session. Hold the Windows-volume hotkey down for a steady ramp; the OS auto-repeat fires the step over and over.
    9. +Use whatever key combinations you prefer (for example Ctrl+Shift+Up / Ctrl+Shift+Down for one set, and Ctrl+Alt+Up / Ctrl+Alt+Down for the other). These are global hotkeys: they work as long as RemSound is running, no matter which app is in front. +
    10. That's it. Press the hotkey on the desktop — the laptop responds just as it would if you'd pressed the matching key on the laptop directly, and you hear the change without leaving the NVDA Remote session. Hold the Windows-volume hotkey down for a steady ramp, since Windows' key repeat fires the step over and over.
    -Heads-up about “Windows global volume”: system volume affects everything on the receiving machine — not just RemSound. NVDA's voice gets louder with it, browser audio gets louder, every notification gets louder. For a hearing-impaired listener that's usually exactly what you want (everything you hear gets a usable level), but it's a meaningfully different thing from the in-app slider, which only changes RemSound's audio. Use the right knob for the situation. +A heads-up about “Windows global volume”: the Windows volume affects everything on the receiving computer — not just RemSound. NVDA's voice gets louder with it, browser sound gets louder, every notification gets louder. For a hearing-impaired listener that's usually exactly what you want (everything gets to a usable level), but it's a very different thing from the in-app slider, which only changes RemSound's sound. Pick the right one for the situation.
    -

    Mutuality

    +

    It works both ways

    -

    The feature is symmetric: both machines can both send and accept. If you configure hotkeys on both ends and tick “Accept remote volume commands” on both ends, either side can drive the other's volume. There is no “controller” / “controllee” designation.

    +

    The feature is symmetric: both computers can both send and accept. If you set up hotkeys on both ends and tick “Accept remote volume commands” on both ends, either side can adjust the other's volume. There's no fixed “controller” and “controlled” computer.

    What it does not touch

    -Diagnostic tip: the log file (Preferences dialog → Enable logs) records every remote-control send and receive, including IGNORED entries when an incoming command was rejected because the sender wasn't in your allow-list or because “Accept remote volume commands” was off. Useful for debugging “why isn't my hotkey working” without guessing. +Tip for troubleshooting: the log file (Preferences dialog → Enable logs) records every remote-control command sent and received, including IGNORED entries when an incoming command was turned down — either because the sender wasn't in your list of ticked peers, or because “Accept remote volume commands” was off. Handy for working out “why isn't my hotkey doing anything” without guessing.

    16. Startup behaviour

    -

    Open the Startup behaviour dialog from Options → Startup behaviour (Alt+O, T). It has three independent toggles, plus a profile picker that appears when the third one is on. Tab cycles between the three checkboxes, the profile list (when visible), and the Close button. Esc closes the dialog. Each tick is saved immediately — there's no OK/Apply button. (Before v1.5 this dialog was reached by a button inside Preferences; it's now its own top-level Options-menu item.)

    +

    Open the Startup behaviour dialog from Options → Startup behaviour (Alt+O, T). It has three independent toggles, plus a profile picker that appears when the third one is on, and a Close button. Esc closes the dialog. Each tick is saved straight away — there's no OK or Apply button.

    - - - + + +
    ToggleWhat it does
    Start minimised to tray (Alt+M)RemSound minimises to the system tray immediately after the main window finishes loading. The window stays accessible via the tray icon and the tray hotkey. Useful when paired with the auto-start option below for a fully unattended “boot the machine, start streaming” flow.
    Start RemSound automatically when this user logs in (Alt+A)Adds (or removes) a per-user entry in the Windows registry under HKCU\Software\Microsoft\Windows\CurrentVersion\Run pointing at RemSound.exe. After ticking, Windows launches RemSound the next time you log in. The setting also shows up under Task Manager → Startup, where you can also disable it. Per-user only — doesn't need admin and doesn't affect anyone else who uses the same machine.
    Start with a specific profile (Alt+P)When ticked, RemSound skips the startup profile picker and loads the profile you choose in the listbox below. When unticked, the profile picker shows as normal. If you have no saved profiles yet, ticking it shows a one-shot warning and stays unticked — save a profile first, then come back. To restore the picker temporarily without losing the choice, untick the box, launch normally, then re-tick after.
    Start minimised to tray (Alt+M)RemSound hides itself in the system tray as soon as the main window finishes loading. The window is still reachable from the tray icon and the tray hotkey. Useful together with the auto-start option below, for a fully hands-off “turn the computer on, start streaming” setup.
    Start RemSound automatically when this user logs in (Alt+A)Adds RemSound to (or removes it from) Windows' standard list of programs that start when you log in. After ticking it, Windows launches RemSound the next time you log in. It also appears under Task Manager → Startup, where you can disable it too. It applies to your account only — it doesn't need admin rights and doesn't affect anyone else who uses the same computer.
    Start with a specific profile (Alt+P)When ticked, RemSound skips the startup profile picker and loads the profile you choose in the list below. When unticked, the profile picker shows as normal. If you don't have any saved profiles yet, ticking this shows a one-time warning and stays unticked — save a profile first, then come back. To bring the picker back temporarily without losing your choice, untick the box, start RemSound normally, then tick it again afterwards.
    -

    Profile to start with (Alt+L) — the listbox of saved profiles. Visible only when the third toggle is on. Arrow up/down to pick, the choice is saved as you move; double-click to pick and close the dialog at the same time.

    +

    Profile to start with (Alt+L) — the list of your saved profiles. It only shows when the third toggle is on. Pick a profile and the choice is saved straight away. Double-click a profile to pick it and close the dialog at the same time.

    -

    Combining the three for a hands-off boot

    +

    Combining the three for a hands-off start

      -
    1. Save a profile with the device ticks, peers, and audio settings you want for “always-on” use.
    2. -
    3. Open Startup behaviour. Tick all three: Start minimised, Start automatically when this user logs in, Start with a specific profile — and pick the profile you just saved.
    4. -
    5. Close the dialog. Reboot or log out and back in to test — RemSound launches itself, loads the profile, and goes straight to the tray. Audio starts flowing as soon as the peer is reachable.
    6. +
    7. Save a profile with the device choices, peers, and sound settings you want for “always-on” use.
    8. +
    9. Open Startup behaviour. Tick all three: Start minimised, Start automatically when this user logs in, and Start with a specific profile — then pick the profile you just saved.
    10. +
    11. Close the dialog. Reboot, or log out and back in, to test — RemSound starts itself, loads the profile, and goes straight to the tray. Sound starts flowing as soon as the peer is reachable.
    -Storage: the start-minimised choice and the start-with-profile name live in <exe>\remsound.config.json (machine-local, profile-independent). The auto-start toggle lives in the Windows registry only — deleting remsound.config.json will not turn off the auto-start; you toggle it from this dialog or from Task Manager → Startup. +Where these are stored: the start-minimised choice and the start-with-profile name are kept in a small settings file on this computer. The auto-start toggle is kept in Windows' standard startup list — you turn it on or off from this dialog, or from Task Manager → Startup.

    17. Updating RemSound

    -

    RemSound can check its own GitHub Releases page for a newer build on a schedule you choose, prompt you to install, and either ask first or do it silently. There’s also a one-press “check now” button so you don’t have to wait for the timer.

    +

    RemSound can check for a newer version on a schedule you choose, prompt you to install it, and either ask first or do it quietly. There's also a one-press “check now” button so you don't have to wait for the timer.

    Settings in Preferences

    -

    Open Options → Preferences (or Ctrl+P). The update settings sit above the logging row:

    +

    Open Options → Preferences (or Ctrl+P). The update settings sit just above the logging row:

    - - - + + +
    SettingShortcutWhat it does
    Check for updates (drop-down)Alt+UHow often RemSound polls GitHub in the background. Options: Never, Every hour, Every 6 hours, Every 24 hours. Default is Every 24 hours. The choice is remembered across launches; if you set it to Never, the only way an update arrives is via the manual button below.
    Check for updates now (button)Alt+NRuns the GitHub check immediately. If you’re already on the latest version you get a small “you are running the latest version” popup. If there’s a newer release, you get a confirmation dialog with the release notes and a Yes / No to install. The same button is in the Help menu (Alt+H, C).
    Silently install updates when available (checkbox)Alt+IWhen ticked, the background timer’s tick installs any available update without prompting — RemSound downloads, exits briefly, swaps the files, and relaunches itself. Off by default. The manual “Check for updates now” path always prompts regardless of this checkbox.
    Check for updates (drop-down)Alt+UHow often RemSound checks for a newer version in the background. Choices: Never, Every hour, Every 6 hours, Every 24 hours. The default is Every 24 hours. Your choice is remembered between launches; if you set it to Never, the only way an update arrives is through the manual button below.
    Check for updates now (button)Alt+NChecks for a newer version straight away. If you're already up to date you get a small popup saying so. If there's a newer version, you get a confirmation dialog with the release notes and a Yes / No to install. The same button is in the Help menu (Alt+H, C).
    Silently install updates when available (checkbox)Alt+IWhen ticked, the background check installs any available update without asking — RemSound downloads it, closes briefly, swaps the files, and reopens itself. Off by default. The manual “Check for updates now” button always asks first, no matter how this checkbox is set.

    What happens during an install

    -

    RemSound can’t overwrite its own .exe while it’s running, so an install spawns a small one-shot helper that finishes the job after RemSound exits:

    +

    RemSound can't replace its own program file while it's running, so an install starts a small helper that finishes the job once RemSound has closed:

      -
    1. RemSound downloads the new release’s RemSound-vX.Y.zip from GitHub into a staging folder next to the running .exe.
    2. -
    3. It writes a tiny detached _apply-update.cmd alongside it that watches the RemSound process.
    4. -
    5. RemSound exits.
    6. -
    7. The detached cmd notices the exit, copies the staged files over the install folder, deletes the staging folder, and relaunches RemSound.exe.
    8. -
    9. The cmd deletes itself.
    10. +
    11. RemSound downloads the new version into a holding folder next to the running program.
    12. +
    13. It writes a tiny helper alongside it that watches for RemSound to close.
    14. +
    15. RemSound closes.
    16. +
    17. The helper notices, copies the new files over the install folder, deletes the holding folder, and reopens RemSound.
    18. +
    19. The helper deletes itself.
    -

    You’ll see the window close, then reopen on the new version within a second or two. Anything that was unsaved on the old session (a profile in mid-edit, for instance) is lost — RemSound will not auto-save before installing. Save first if you’ve been editing.

    +

    You'll see the window close, then reopen on the new version within a second or two. Anything that was unsaved in the old session (a profile you were partway through editing, for example) is lost — RemSound will not save it for you before installing. Save first if you've been making changes.

    -

    If install fails

    +

    If an install fails

    -

    The downloader is best-effort: a flaky network, a locked install folder, or a temporarily-unavailable release will pop a MessageBox saying it couldn’t complete and leave the running version untouched. The release page URL is in the popup so you can grab the zip in a browser and install by hand if needed. If you installed RemSound into Program Files without granting your user write permission to the install folder, the install helper’s file-copy step will fail too — either fix the permission or move RemSound to a writable folder (e.g. somewhere under your user profile).

    +

    The update download is best-effort: a flaky network, a locked install folder, or a temporarily-unavailable version will pop up a message saying it couldn't finish, and leave your running version untouched. The address of the download page is in that message, so you can get the new version in a browser and install it by hand if you need to. If you installed RemSound into Program Files without giving your account permission to write to that folder, the install helper's copy step will fail too — either fix the permission or move RemSound to a folder you can write to (somewhere inside your own user folder, for instance).

    -

    If the helper’s file-copy step itself fails (most often because Dropbox or another file-sync app was holding write locks on the install folder when the helper tried to overwrite the existing binaries), the helper now leaves a file named update-failed.txt next to RemSound.exe with diagnostic detail and the staged new files still sitting in the _update subfolder. It does not relaunch the old binary in that case — so the next time you start RemSound by hand, you’ll either get the (still-old) version with the marker file telling you what to do, or you can copy the contents of _update over the install folder manually. The most reliable recovery is: close RemSound, wait 30 seconds for Dropbox to settle, relaunch, and try Help → Check for updates again. The longer retry window in v1.3 onward almost always succeeds on the second attempt.

    +

    If the helper's copy step itself fails — most often because Dropbox or another sync app was holding the install folder's files open when the helper tried to replace them — the helper leaves a file called update-failed.txt next to the RemSound program, with details, and leaves the new files sitting in an _update subfolder. It does not reopen the old version in that case — so the next time you start RemSound by hand, you'll either get the still-old version with that note telling you what to do, or you can copy the contents of the _update folder over the install folder yourself. The most reliable fix is: close RemSound, wait 30 seconds for Dropbox to settle, start it again, and try Help → Check for updates once more — it almost always works on the second try.

    -

    A step-by-step trace of every helper run is appended to _update-helper.log in the install folder — useful if a failure persists and you want to share the log for diagnosis.

    +

    A step-by-step record of every helper run is kept in a helper log file in the install folder — useful if a failure keeps happening and you want to share it for diagnosis.

    The About dialog and release notes

    -

    To see what version you’re currently on without checking for updates, open Help → About RemSound (Alt+H, A). The dialog shows the version number and the release notes for the build you’re running, in a scrollable read-only text box you can tab into and arrow through under NVDA. Close (or Esc) dismisses.

    +

    To see which version you're on without checking for updates, open Help → About RemSound (Alt+H, A). The dialog shows the version number and the release notes for the version you're running, in a scrollable read-only box. Close (or Esc) dismisses it.

    18. Recording to a file

    -

    RemSound can write the audio passing through it to a file on disk — useful for keeping a copy of a music session, capturing a long jam for later editing, or just saving a one-off voice exchange you want to refer back to.

    +

    RemSound can save the sound passing through it to a file on your computer — useful for keeping a copy of a music session, capturing a long jam for editing later, or just saving a one-off voice exchange you want to come back to.

    What gets recorded

    -

    Recording taps the audio path at fully-mixed, fully-processed points: for the received side, after volume / mute / limiter have been applied (so the file mirrors what you hear); for the sent side, the raw captured float audio just before it’s encoded for the wire (so the file is independent of which codec you chose). The three source options:

    +

    Recording captures the sound at fully-mixed, fully-finished points: for the received side, after volume and mute have been applied (so the file matches what you hear); for the sent side, the raw captured sound just before it's packaged for sending (so the file is the same whatever codec you chose). The three source choices:

    File formats

    -

    All four formats record at 48 kHz — that’s the engine’s internal mix rate — and labels in the attributes list make the rate explicit so it’s never ambiguous.

    +

    All four formats record at a 48 kHz sample rate, and every row in the attributes list states the rate clearly so it's never in doubt.

    - - - - + + + +
    FormatWhat you getWhen to pick it
    WAV (default)Uncompressed RIFF WAVE. Lossless and large — about 17 MB / minute at 24-bit stereo. Bit-depth choices: 16-bit PCM, 24-bit PCM (default, matches RemSound’s on-wire format with no extra quantisation), or 32-bit IEEE float (no quantisation at all). Plus stereo or mono.Archival, editing in a DAW, anything where you might re-master later.
    MP3MPEG Layer III at one of four CBR bitrates: 128 / 192 / 256 / 320 kbps. Stereo or mono. Encoder is LAME via the NAudio.Lame package — the same library every other Windows MP3-encoding app uses, so output should play in everything.Long sessions where filesize matters; quick distribution to people who just want a listen-once file.
    OGG-OpusOGG container holding Opus-encoded audio at one of four target VBR bitrates: 96 / 128 / 192 / 256 kbps. Stereo or mono. File extension is .opus. Encoder is Concentus — the same managed Opus implementation the wire path uses, so the encoded result is byte-identical to what you’d transmit on a live Opus session at the same bitrate.Smaller files than MP3 at comparable quality; broad modern playback support (VLC, mpv, web browsers).
    FLACFree Lossless Audio Codec, integer-PCM only. Bit-depth choices: 16-bit or 24-bit (default, matches RemSound’s on-wire format). Stereo or mono. Files are typically ~50% the size of equivalent WAV with zero quality loss. Encoder is pure managed (CUETools FLAKE) — no native DLL ships with RemSound.Lossless archival when you also want a sensible file size. Picks the WAV-vs-MP3 dilemma squarely — the file plays back bit-identical to WAV but is half the size.
    WAV (default)An uncompressed file. No quality loss, but large — about 17 MB per minute at 24-bit stereo. Bit-depth choices: 16-bit, 24-bit (the default), or 32-bit float (the highest quality). Plus stereo or mono.Keeping a master copy, editing in audio software, anything where you might want to re-master later.
    MP3A compressed file at one of four bitrates: 128 / 192 / 256 / 320 kbps. Stereo or mono. MP3 plays just about everywhere.Long sessions where file size matters; quickly sending someone a listen-once file.
    OGG-OpusA compressed file using Opus, at one of four target bitrates: 96 / 128 / 192 / 256 kbps. Stereo or mono. The file extension is .opus.Smaller files than MP3 at similar quality; plays in most modern players (VLC, mpv, web browsers).
    FLACA compressed file with no quality loss at all. Bit-depth choices: 16-bit or 24-bit (the default). Stereo or mono. Files are typically about half the size of the same recording as WAV, with no loss of quality.Keeping a master copy when you also want a sensible file size — it plays back identically to WAV but is half the size.
    -

    Crash resilience. All four formats are designed to leave a playable file behind even if RemSound crashes mid-recording. WAV re-patches its RIFF / data-chunk size fields every 5 seconds; MP3, OGG-Opus, and FLAC all use stream formats where every frame is self-decoding, so a truncated file is automatically a valid shorter file of the same format. You lose at most ~5 seconds of recently-captured audio on a crash, never the whole session.

    +

    Surviving a crash. All four formats are designed to leave a playable file behind even if RemSound crashes partway through a recording. You lose at most about 5 seconds of recently-captured sound on a crash, never the whole session.

    -

    Start / stop sound cues

    +

    Start and stop sound cues

    -

    RemSound plays a short ding when a recording starts and another when it stops, so you have an audible confirmation that the toggle actually took effect. The cues are record start.wav and record stop.wav in the RemSound install folder — you can drop your own files in to customise them, as long as they keep the same filenames.

    +

    RemSound plays a short ding when a recording starts and another when it stops, so you have an audible confirmation that the toggle actually took effect. The cues are record start.wav and record stop.wav in the RemSound install folder — you can drop in your own sounds to customise them, as long as you keep the same filenames.

    -

    Each cue can be turned off independently via Preferences → Cue sounds (Alt+N). The same checklist also controls the older connect / disconnect cues. The cues play through the default Windows output device using System.Media.SoundPlayer, which sits outside the recording pipeline — so a normal RemSound recording does not contain the cue. The exception is if your sender side is using WASAPI loopback of the very same output device the cue plays to as one of its capture sources, in which case the loopback grabs the cue alongside the rest of the device’s output; in that case you’ll have to live with the start cue appearing in the file unless you disable it.

    +

    Each cue can be turned off on its own via Preferences → Cue sounds (Alt+N). The same checklist also controls the connect and disconnect cues. The cues play through your default Windows output device, separately from the recording, so a normal RemSound recording doesn't contain the cue. The one exception: if your sending side is capturing the very same output device the cue plays through, then the cue gets captured along with everything else from that device. In that case you'll have to live with the start cue appearing in the file, unless you turn it off.

    Where recordings go

    -

    By default, recordings live in <RemSound install folder>\recordings\<machine name>\. Each recording session creates a new file named RemSound-yyyy-MM-dd_HH-mm-ss.<ext>, so files never collide.

    +

    By default, recordings live in <RemSound install folder>\recordings\<computer name>\. Each recording creates a new file with a name like RemSound-2026-05-19_14-30-00, so files never overwrite each other.

    -

    You can change the folder via Record → Change recordings folder. Picking a different folder writes that path to your current profile, so the choice rides along with the rest of your settings — switching profiles can switch recording destinations too. If a saved profile points at a folder that doesn’t exist on the loading machine, the recorder silently falls back to the default location for the current machine.

    +

    You can change the folder via Record → Change recordings folder. Choosing a different folder saves that location into your current profile, so it travels with the rest of your settings — switching profiles can switch your recording destination too. If a saved profile points at a folder that doesn't exist on the computer loading it, the recorder quietly falls back to the default location for that computer.

    -

    Record → Open current recordings folder launches Windows Explorer on whatever the configured folder currently is, creating it on the fly if a recording hasn’t been made there yet.

    +

    Record → Open current recordings folder opens Windows File Explorer on whatever folder is currently set, creating it on the spot if no recording has been made there yet.

    Starting and stopping

    -

    Four ways to start or stop a recording:

    +

    There are four ways to start or stop a recording:

    -

    The recorder runs on its own background thread with a generous queue, so neither the audio nor the network path is affected by disk speed. If the disk ever can’t keep up with the audio rate, the recorder drops the oldest queued audio (never the newest) and notes it in the log; in practice you’ll only see that on a fully-saturated USB stick or a very slow network drive.

    +

    Recording happens in the background, so it doesn't affect the sound or the network. If your disk ever can't keep up, the recorder drops the oldest queued sound (never the newest) and notes it in the log; in practice you'll only see that on a fully-saturated USB stick or a very slow network drive.

    Recording settings dialog

    -

    Reached via Record → Recording settings. Up to five keyboard-navigable listboxes laid out left-to-right. Channel mode used to be folded into every attribute row, which doubled their length for no real gain; it’s now its own dedicated list. FLAC’s compression level has its own list too, but it only shows when the file format is FLAC.

    +

    Reached via Record → Recording settings. Up to five keyboard-navigable lists, laid out left to right. FLAC's compression level has its own list, but it only shows when the file format is FLAC.

    - - - - + + + +
    ListShortcutWhat goes in it
    Recording sourceAlt+SReceive only / Send only / Both. See the source explainer above.
    File formatAlt+FWAV / MP3 / Ogg-Opus / FLAC. The attributes (and FLAC compression) lists to the right repopulate whenever you change this.
    Audio format attributesAlt+ARepopulates per format, with the 48 kHz sample rate stated on every row so there’s no ambiguity. WAV: three rows (16-bit PCM / 24-bit PCM / 32-bit float). MP3: four rows (128 / 192 / 256 / 320 kbps CBR). OGG-Opus: four rows (96 / 128 / 192 / 256 kbps VBR). FLAC: two rows (16-bit / 24-bit) — FLAC is integer-PCM only, so no 32-bit-float row.
    FLAC compression levelAlt+LVisible only when FLAC is the selected file format. Nine rows for levels 0..8, with friendly labels on the endpoints (“0 — fastest encode, biggest file”, “5 — default (libFLAC reference)”, “8 — slowest encode, smallest file”). All levels produce bit-identical lossless audio — it’s a pure encode-time vs file-size trade-off.
    Recording sourceAlt+SReceive only / Send only / Both. See the source explanation above.
    File formatAlt+FWAV / MP3 / Ogg-Opus / FLAC. The attributes list (and FLAC compression list) to the right change whenever you change this.
    Audio format attributesAlt+AChanges to match the format, with the 48 kHz sample rate stated on every row so there's no ambiguity. WAV: three rows (16-bit / 24-bit / 32-bit float). MP3: four rows (128 / 192 / 256 / 320 kbps). OGG-Opus: four rows (96 / 128 / 192 / 256 kbps). FLAC: two rows (16-bit / 24-bit).
    FLAC compression levelAlt+LShown only when FLAC is the chosen file format. Nine rows for levels 0 to 8, with friendly labels on the ends (“0 — fastest, biggest file”, “5 — default”, “8 — slowest, smallest file”). Every level produces an identical, no-loss recording — it's purely a trade-off between encoding speed and file size.
    ChannelsAlt+CStereo or Mono. Applies to every format.
    -

    OK (Alt+O) saves the choices to the current profile. Cancel (Alt+N) or Esc discards. Settings persist via the normal profile-save mechanism — changes here flag the profile as having unsaved changes and you’ll be prompted on exit if you haven’t saved.

    +

    OK (Alt+O) saves your choices to the current profile. Cancel (Alt+N) or Esc discards them. Settings are saved with the profile as usual — changes here mark the profile as having unsaved changes, and you'll be asked about them on exit if you haven't saved.

    19. Logs and diagnostics

    -

    If logging is enabled (the Enable logs checkbox in the Preferences dialog — File → Preferences, or Ctrl+P — default on), RemSound writes a tab-separated log file per session into publish\logs\ (relative to wherever RemSound.exe lives). One file per launch, named RemSound-<machine>-<PID>-<date>-<time>.log.

    +

    If logging is turned on (the Enable logs checkbox in the Preferences dialog — Options → Preferences, or Ctrl+P — on by default), RemSound writes a log file each session into a logs folder next to the RemSound program. One file per launch.

    The file contains two kinds of rows:

    - - + +
    KindContents
    EVTEvent lines — startup, peer selected, capture started, errors, etc.
    SNAPOne-second snapshots of running stats: codec, latency target, buffered audio milliseconds, packets sent, packets received, underruns, drops, peer heartbeat RTTs.
    EVTEvent lines — startup, a peer being selected, capture starting, errors, and so on.
    SNAPOne-second snapshots of running figures: codec, latency target, how much sound is buffered, packets sent, packets received, drop-outs, drops, and peer round-trip times.
    -

    The Write logs now button in the Preferences dialog (Alt+W within that dialog) writes a "user requested write logs now" marker into the log so you can find the moment in the file later.

    +

    The Write logs now button in the Preferences dialog (Alt+W within that dialog) writes a “user requested write logs now” marker into the log, so you can find that moment in the file afterwards.

    -

    Logs are plain UTF-8 text and openable in any spreadsheet (paste-as-tab-separated) or text editor. Most useful columns when something feels wrong:

    +

    Logs are plain text and can be opened in any text editor, or in a spreadsheet. The most useful figures when something feels wrong:

    20. Troubleshooting

    -

    I don’t hear my friend

    +

    I don't hear my friend

      -
    1. Connectivity tab: is your friend in Connected peers with a green RTT (e.g. “192.168.1.5: 27 ms”), not unreachable or pending?
    2. +
    3. Connectivity tab: is your friend in Connected peers with a healthy round-trip time (for example “192.168.1.5: 27 ms”), not unreachable or pending?
    4. Audio inputs and outputs tab: is Receive audio ticked?
    5. -
    6. Same tab: is at least one output device ticked in the WASAPI or ASIO output list?
    7. +
    8. Same tab: is at least one output device ticked, in the WASAPI or the ASIO output list?
    9. Same tab: is the volume slider above zero?
    -

    My friend doesn’t hear me

    +

    My friend doesn't hear me

    1. Audio inputs and outputs tab: is Send my audio ticked?
    2. Same tab: is at least one capture source ticked across the three send lists?
    3. -
    4. If you’re using a microphone: is Windows’ microphone privacy setting allowing apps to use it? (Settings → Privacy → Microphone.)
    5. +
    6. If you're using a microphone: is Windows' microphone privacy setting allowing apps to use it? (Settings → Privacy → Microphone.)
    7. Have they ticked your name in their Discovered peers list?
    -

    I can hear them but the audio crackles

    +

    I can hear them but the sound crackles

    -

    Audio is fine but the delay feels long

    +

    The sound is fine but the delay feels long

    -

    The ASIO lane sounds grainy or constantly micro-clicks

    -

    Most likely your ASIO latency target is below the platform’s real-world jitter floor. The receiver fights to hold the buffer at the target by drift-dropping frames and click-trimming — both are audible. Raise ASIO latency in milliseconds (Alt+L) on the Audio profile tab to 25 ms or more and the grain should vanish. Even pure-ASIO setups don’t safely sustain sub-15-ms receive buffers over real networks; aim higher on Wi-Fi.

    +

    The ASIO sound is grainy or constantly micro-clicks

    +

    Most likely your ASIO latency target is below the network's real-world jitter level. The receiving side fights to hold the reserve at the target, and that fight is audible. Raise ASIO latency in milliseconds (Alt+L) on the Audio profile tab to 25 ms or more and the graininess should disappear. Even pure-ASIO setups can't safely sustain a receive reserve below about 15 ms over real networks; aim higher on Wi-Fi.

    -

    I can’t see my friend in Discovered peers

    +

    I can't see my friend in Discovered peers

    -

    A peer rebooted or changed IP and audio didn’t come back

    -

    As of v1.6, RemSound follows a peer to its current address on its own. If the address you connected to stops responding but the same peer is still reaching RemSound from a different address on your network — because they rebooted onto a new IP, or their computer name resolved to a stale address — RemSound re-points to the live address within a few seconds and audio resumes without you touching anything. If it doesn’t recover, the peer is genuinely unreachable (off, asleep, or a firewall is blocking the new path).

    +

    A peer rebooted or changed address and the sound didn't come back

    +

    RemSound follows a peer to its new address on its own. If the address you connected to stops responding but the same peer is still reaching you from a different address on your network — because they rebooted onto a new address, for example — RemSound re-points to the live address within a few seconds and the sound resumes without you doing anything. If it doesn't recover, the peer is genuinely unreachable (off, asleep, or a firewall is blocking the new path).

    -

    One side says “unreachable” even though audio is flowing

    -

    Heartbeat shares the audio port, so if audio gets through, heartbeat should too. If one side is showing “unreachable” while audio plays, make sure both machines are running the same RemSound build — an older version on either end can speak a different heartbeat dialect.

    +

    One side says “unreachable” even though sound is flowing

    +

    The health check-ins use the same channel as the audio, so if the sound gets through, the check-ins should too. If one side shows “unreachable” while the sound plays fine, make sure both computers are running the same version of RemSound — an older version on either end can speak a slightly different check-in language.

    -

    NVDA went silent or crackly when I selected an ASIO driver

    -

    You probably picked Realtek ASIO. It’s a generic wrapper, not bound to Realtek hardware, and tends to grab whatever Windows’ default audio device is — which is usually the same one NVDA is using. Arrow back to (none) in the ASIO driver picker (or pick a different ASIO driver).

    +

    My other audio went silent or crackly when I selected an ASIO driver

    +

    You probably picked Realtek ASIO. It's a generic driver, not tied to Realtek hardware, and it tends to grab whatever Windows treats as the default sound device — usually the same one your screen reader is using. Set the ASIO driver picker back to (none), or pick a different ASIO driver.

    -

    Audio device list shows old devices that are no longer plugged in

    -

    RemSound refreshes its lists every second. If a device has truly been unplugged it should disappear within a few seconds. If it’s lingering, restart RemSound — Windows’ device cache occasionally needs poking.

    +

    The device list shows old devices that are no longer plugged in

    +

    RemSound refreshes its lists every second. If a device has really been unplugged it should disappear within a few seconds. If it lingers, restart RemSound — Windows' own device list occasionally needs a nudge.

    21. Glossary

    - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +
    TermMeaning
    WASAPIWindows Audio Session API. The standard Windows audio path. Every audio device in your Windows Sound control panel is reachable via WASAPI. Latency around 10–30 ms.
    ASIOAudio Stream Input/Output. A different audio path, written by hardware vendors, that bypasses the Windows audio engine. Used by music production software for sub-5 ms latency. Requires a vendor-supplied driver.
    Loopback captureCapturing what’s currently being played out of an output device (rather than what’s coming in from a microphone). The “WASAPI outputs to send” list is loopback capture.
    Channel pairA stereo pair of channels on an ASIO driver. Pair 1 = channels 1+2, Pair 2 = channels 3+4, etc.
    UDPThe network protocol RemSound uses for audio. Unlike TCP it doesn’t retransmit lost packets — at audio rates a retransmitted packet is too late to be useful, so we just skip it and keep going.
    HeartbeatA small UDP packet exchanged between peers every second to verify they’re still reachable and measure round-trip time. Travels on the audio port (47830 by default).
    DiscoveryThe mechanism by which RemSound peers find each other on the network without needing to know each other’s IP addresses up front.
    TailscaleA user-friendly VPN that puts your machines on a private virtual network. The easiest way to connect RemSound across the internet without router configuration.
    JitterVariation in the arrival time of network packets. The reason a receive-side buffer is needed.
    Auto-tuneThe receiver’s automatic adjustment of the latency target based on observed network jitter. Off by default; turn on via the Continuous auto-tune checkbox on the Audio profile tab.
    ProfileA saved snapshot of every RemSound setting and selection — device ticks, send / receive states, codec, latency, peers, hotkeys, ASIO driver choice, the lot. Stored as one JSON file per profile. Picked at startup; switchable mid-session via File → Open profile.
    Blank templateA startup option in the profile picker that begins a session with all defaults — nothing ticked, no peers, no save name. The starting point for creating a new profile, or for one-off sessions you don’t intend to save.
    Lock to audio clockSender-side timing mode that drives packet emission directly from the audio device’s hardware-clock interrupts instead of from a Windows scheduler tick. Eliminates a few milliseconds of jitter on tight latency targets. Off by default. Toggled via the checkbox of the same name on the Audio profile tab.
    ConcealmentReceiver-side feature that fills brief audio-buffer underruns with a small noise burst (the default) or raw zero-fill / click. Choice lives on the Audio profile tab as the Artefact sound type. Opus has its own packet-loss recovery built into the codec on top of this.
    AppConfigA small machine-local JSON file at <exe>\remsound.config.json that stores preferences which should be sticky regardless of which profile is active — today: the profiles folder location, the Startup behaviour choices, and the “do not show me this again” tick on the Save-profile confirmation popup.
    Remote controlA small RemSound feature that lets one connected peer nudge another peer's listening volume (or toggle their receive mute) via configurable global hotkeys. Two sets of commands: one adjusts the receiver's RemSound app slider, the other adjusts the receiver's Windows default-output-device master volume. Off by default on both ends; the receiver opts in via “Accept remote volume commands from peers” in the Preferences dialog (Ctrl+P), the sender configures hotkeys in the Keyboard shortcuts dialog (Ctrl+K). Designed for the “I'm NVDA-Remote'd into my desktop and want to nudge the laptop's volume” case. See section 15.
    Control packetThe wire-level message used by the remote-control feature. A 14-byte UDP packet (12-byte header + 2-byte payload) carrying a kind enum (RemSound volume up / down / mute toggle, or Windows system volume up / down / mute toggle) and a signed delta. Travels on the same UDP audio port as everything else.
    WASAPIThe normal Windows way of handling sound. Every speaker and microphone in your Windows sound settings works this way. The delay it adds is around 10–30 ms.
    ASIOA faster, more direct way of handling sound, used by professional audio equipment. It talks straight to the hardware, giving a delay of under 5 ms. It only works if your audio interface came with an ASIO driver.
    Loopback captureCapturing what's currently being played out of an output device, rather than what's coming in from a microphone. The “WASAPI outputs to send” list does loopback capture.
    Channel pairA stereo pair of channels on an ASIO driver. Pair 1 is channels 1 and 2, Pair 2 is channels 3 and 4, and so on.
    CodecThe method RemSound uses to package the sound before sending it. RemSound offers PCM (no compression) and Opus (compressed).
    OpusA high-quality codec that compresses sound to use much less network bandwidth, and can repair single lost packets on its own. The right choice for internet connections.
    PCMAn uncompressed codec — the very best quality with no loss at all, but it uses far more network bandwidth than Opus. Best on a local network or a fast connection.
    FLACA file format for recordings that compresses the sound with no loss of quality — the file plays back identically to an uncompressed WAV, but is about half the size.
    LatencyThe small delay between sound leaving one computer and arriving at the other.
    JitterWhen network packets arrive unevenly instead of in a steady stream. This is why a reserve of sound is kept on the receiving side.
    PeerAnother computer running RemSound that you're connected to or want to connect to.
    HeartbeatA small message that connected computers exchange every second to confirm they can still reach each other and to measure the round-trip time. It travels on the audio channel (47830 by default).
    DiscoveryThe way RemSound computers find each other on the network without you having to know each other's addresses up front.
    TailscaleAn easy-to-use VPN that puts your computers on a private network together. The simplest way to connect RemSound across the internet without changing your router settings.
    Auto-tuneRemSound automatically adjusting the latency target based on how evenly packets are arriving. Off by default; turn it on with the Continuous auto-tune checkbox on the Audio profile tab.
    ProfileA saved snapshot of every RemSound setting and choice — device ticks, send / receive states, codec, latency, peers, hotkeys, ASIO driver choice, the lot. Stored as one settings file. You pick one at startup, and can switch with File → Open profile.
    Blank templateAn entry in the startup profile picker that begins a session with all the defaults — nothing ticked, no peers, no saved name. A clean starting point for a new profile, or for a one-off session you don't plan to save.
    Lock to audio clockA sending-side timing mode that takes its timing straight from the sound device's hardware clock instead of from Windows. Removes a few milliseconds of wobble at tight latency targets. Off by default. Set with the checkbox of the same name on the Audio profile tab.
    ConcealmentA receiving-side feature that fills brief gaps in the playback reserve with a small noise burst (the default) or an obvious click. You choose which on the Audio profile tab, in the Artefact sound type list. Opus also has its own repair of lost packets on top of this.
    Remote controlA RemSound feature that lets one connected peer adjust another peer's listening volume (or toggle their receive mute) using global hotkeys. There are two sets of commands: one adjusts the receiver's RemSound volume slider, the other adjusts the receiver's Windows volume. Off by default on both ends; the receiver opts in via “Accept remote volume commands from peers” in the Preferences dialog (Ctrl+P), and the sender sets up hotkeys in the Keyboard shortcuts dialog (Ctrl+K). Designed for the “I'm NVDA-Remote'd into my desktop and want to nudge the laptop's volume” case. See section 15.

    diff --git a/src/RemSound.App/AboutDialog.cs b/src/RemSound.App/AboutDialog.cs index 62def6f..c892ead 100644 --- a/src/RemSound.App/AboutDialog.cs +++ b/src/RemSound.App/AboutDialog.cs @@ -20,6 +20,28 @@ internal sealed class AboutDialog : Form /// updates" path. private const string ReleaseNotes = """ + RemSound v1.8 + + Updater polish and a rewritten user manual. No + wire-format or audio-pipeline changes — v1.5 through + v1.8 peers interoperate. + + Changes: + * Check for updates looks further down the release + list, so it reliably finds the newest RemSound + version. + * An update can no longer overwrite your own + settings, profiles, logs or recordings — it only + replaces program files. + * After a successful update the install folder is + left tidy: temporary update files, the update log + and any old failure note are cleared automatically. + * If an update ever fails, the note it leaves + (update-failed.txt) is now written in plain + language with clear steps to follow. + * The user manual (press F1) has been rewritten in + plain language throughout. + RemSound v1.7 Updater fix. No wire-format or audio-pipeline changes — diff --git a/src/RemSound.App/RemSound.App.csproj b/src/RemSound.App/RemSound.App.csproj index 5d52cef..ec0104a 100644 --- a/src/RemSound.App/RemSound.App.csproj +++ b/src/RemSound.App/RemSound.App.csproj @@ -14,7 +14,7 @@ tag_name on the latest GitHub release; bump it on every public release. The AssemblyVersion / FileVersion default to this value, and Assembly.GetName().Version is what the About dialog and the updater both read. --> - 1.7.0 + 1.8.0 diff --git a/src/RemSound.App/RemSoundUpdater.cs b/src/RemSound.App/RemSoundUpdater.cs index b665f4d..5b338cb 100644 --- a/src/RemSound.App/RemSoundUpdater.cs +++ b/src/RemSound.App/RemSoundUpdater.cs @@ -70,7 +70,10 @@ internal sealed class RemSoundUpdater : IDisposable // then be fed to ParseTag ("server-v2.3" -> a bogus 0.0.3) and the updater would // wrongly conclude "up to date". We pull the list and consider ONLY releases // whose tag is a RemSound client tag (see IsClientReleaseTag). 2026-05-18. - var url = $"https://api.github.com/repos/{RepoOwner}/{RepoName}/releases"; + // per_page=100 (vs the API default of 30): the repo holds both client (vX.Y) and + // relay-server (server-vX.Y) releases, so a burst of server releases could push the + // newest client release off a 30-item first page. 100 keeps it comfortably in view. + var url = $"https://api.github.com/repos/{RepoOwner}/{RepoName}/releases?per_page=100"; Log?.Invoke($"updater: GET {url}"); using var req = new HttpRequestMessage(HttpMethod.Get, url); req.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github+json")); @@ -214,6 +217,14 @@ internal sealed class RemSoundUpdater : IDisposable /// for post-mortem when the copy goes wrong. Robocopy's own output is appended via /// /LOG+:. /// + /// 2026-05-18 changes: + /// * Robocopy now also excludes remsound.config.json (the user's machine-local + /// config) and the logs / profiles / recordings folders, so an + /// update can never overwrite the user's own state — only app files are replaced. + /// * On SUCCESS the helper now also deletes _update-helper.log and any stale + /// update-failed.txt (the _update folder was already removed), leaving + /// a tidy install folder. The FAILURE branch still keeps all of them for diagnosis. + /// /// The helper is detached from RemSound at start time, so it survives the parent's exit. private static string BuildInstallScript(string stagingRoot, string installDir) { @@ -240,29 +251,55 @@ internal sealed class RemSoundUpdater : IDisposable ) echo %DATE% %TIME% parent exited, starting robocopy (R:60 W:1) >> "%LOG%" - robocopy "{stagingRoot}" "{installDir}" /E /IS /IT /NFL /NDL /NJH /NJS /R:60 /W:1 /XF _apply-update.cmd /XF _update-helper.log /XF update-failed.txt /LOG+:"%LOG%" + rem /XF + /XD keep the update from ever overwriting the USER's own state: their + rem machine-local config (remsound.config.json — holds the profiles-folder choice and + rem startup settings) and their data folders (logs / profiles / recordings). An update + rem replaces APP files only. build-release.ps1 already keeps those out of the release + rem zip; this is the second line of defence so a bad zip still can't clobber them. + robocopy "{stagingRoot}" "{installDir}" /E /IS /IT /NFL /NDL /NJH /NJS /R:60 /W:1 /XF _apply-update.cmd /XF _update-helper.log /XF update-failed.txt /XF remsound.config.json /XD logs profiles recordings _update /LOG+:"%LOG%" set "ROBO_EXIT=%ERRORLEVEL%" echo %DATE% %TIME% robocopy exit=%ROBO_EXIT% >> "%LOG%" if %ROBO_EXIT% GEQ 8 ( - echo Update copy FAILED. > "%MARKER%" - echo Robocopy exit code = %ROBO_EXIT% ^(anything ^>= 8 is a real failure^). >> "%MARKER%" - echo Staged files are intact at: {stagingDir} >> "%MARKER%" - echo Helper log: %LOG% >> "%MARKER%" + echo RemSound could not finish updating. > "%MARKER%" echo. >> "%MARKER%" - echo Most common cause: Dropbox or another file-sync app was holding write locks >> "%MARKER%" - echo on the existing RemSound binaries during the update window. Close RemSound, >> "%MARKER%" - echo wait 30 seconds for the sync to settle, then either: >> "%MARKER%" - echo * Re-launch RemSound and try Help -^> Check for updates again, OR >> "%MARKER%" - echo * Manually copy everything from the staged folder above into this folder. >> "%MARKER%" - echo %DATE% %TIME% FAILURE: leaving staging intact, NOT restarting RemSound >> "%LOG%" + echo The new version downloaded correctly, but RemSound could not >> "%MARKER%" + echo replace its program files with it. Nothing is broken - your >> "%MARKER%" + echo current version still works and has been left as it was. >> "%MARKER%" + echo. >> "%MARKER%" + echo What to do: >> "%MARKER%" + echo. >> "%MARKER%" + echo 1. Close RemSound completely. >> "%MARKER%" + echo 2. Wait about 30 seconds. A file-syncing, backup or antivirus >> "%MARKER%" + echo program may have been using RemSound's files; this gives it >> "%MARKER%" + echo time to finish and let go of them. >> "%MARKER%" + echo 3. Start RemSound again, open the Help menu, and choose >> "%MARKER%" + echo Check for updates to try once more. It usually works on the >> "%MARKER%" + echo second attempt. >> "%MARKER%" + echo. >> "%MARKER%" + echo If it still will not update: the new version's files are ready >> "%MARKER%" + echo and waiting in the folder named _update, next to RemSound.exe. >> "%MARKER%" + echo You can finish the update yourself by copying everything from >> "%MARKER%" + echo inside that _update folder into this folder, replacing the older >> "%MARKER%" + echo files when asked. >> "%MARKER%" + echo. >> "%MARKER%" + echo Once RemSound has updated successfully you can delete this file. >> "%MARKER%" + echo Technical details for support are in _update-helper.log in this folder. >> "%MARKER%" + echo %DATE% %TIME% FAILURE: robocopy exit=%ROBO_EXIT%, update folder kept, NOT restarting RemSound >> "%LOG%" del "%~f0" exit /b %ROBO_EXIT% ) rmdir /S /Q "{stagingDir}" 2>nul - echo %DATE% %TIME% staging removed, restarting RemSound >> "%LOG%" + echo %DATE% %TIME% update applied OK, cleaning up and restarting RemSound >> "%LOG%" + del "%MARKER%" 2>nul start "" "{remsoundExe}" + rem Success cleanup: the staged _update folder is already gone (rmdir above). Now drop + rem the helper log and the failure marker too, so a clean update leaves the install + rem folder tidy with no _update / _update-helper.log / update-failed.txt left behind. + rem (The FAILURE branch above deliberately keeps all of these for diagnosis.) + rem The helper log is deleted last, after the final line is written to it. + del "%LOG%" 2>nul del "%~f0" """; }