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.

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.

Table of contents

  1. What RemSound does
  2. Quick start
  3. Profiles
  4. The main window: menu bar + three tabs
  5. Menus (File, Record (Alt+O), and Help)
  6. Connectivity tab
  7. Audio inputs and outputs tab
  8. Audio profile tab
  9. ASIO and WASAPI
  10. Peers — finding and connecting
  11. How the network works (LAN, WAN, Tailscale)
  12. Latency and audio quality
  13. Keyboard shortcuts
  14. Global hotkeys (mute, volume, tray)
  15. Remote control: adjusting a peer's listening volume from your end
  16. Startup behaviour
  17. Updating RemSound
  18. Recording to a file
  19. Logs and diagnostics
  20. Troubleshooting
  21. Glossary

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.

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.

There is no central server, no account, nothing in the cloud. Packets go straight from one machine 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.).

  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. 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).
  3. On the same tab, tick Send my audio (Alt+S) and tick your microphone in WASAPI inputs to send (Alt+5).
  4. 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.
  5. Have your friend do the same with you on their machine.
  6. Within a second or two, both sides will hear each other.
  7. 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.
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.

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.

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:

KeyAction
Up / DownMove between profiles in the list.
EnterLoad the highlighted profile (or 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.”

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.

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.

Saving and updating

The File menu has two save items:

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.

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

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, R). 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.

Where profiles live on disk

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

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

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.

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.

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.

What’s NOT in profiles

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

4. The main window: menu bar + three tabs

The main window has three things stacked vertically:

  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. 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.
  3. A status footer updating once a second with connect uptime, peer count, send/receive activity, and heartbeat 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.

Three top-level menus on the main window: File (Alt+F), Record (Alt+O), and Help (Alt+H). The Record menu uses Alt+O rather than Alt+R so it doesn’t clash with the Receive audio (Alt+R) checkbox on the main form.

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.

ItemShortcutWhat it does
Open profile…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.
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, RRenames the JSON file on disk and updates the window title. No-op on Blank template (no profile to rename).
Minimise to trayAlt+F, MHides the window to the system tray. Reachable via the File menu chain (Alt+F to open the menu, then M for Minimise). 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).
Keyboard shortcuts…Ctrl+KOpens the global hotkey configuration dialog (mute, volume, tray show/hide, remote-control sends).
Preferences…Ctrl+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, startup behaviour, update-check frequency, manual check-for-updates button, silently install updates, enable logs, write logs now. Esc or the Close button dismisses.
ExitAlt+F, X (or Alt+F4)Closes RemSound. If there are unsaved profile changes you’ll be prompted first.

Record menu

Press Alt+O to open the menu, then the underlined letter for the item you want. (Alt+O rather than Alt+R because Alt+R is taken on the main form by the Receive audio checkbox.) 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.

ItemShortcutWhat it does
Start recording / Stop recordingCtrl+R, or Alt+O, SToggle. The label flips between the two states so NVDA announces whichever action the next press would perform. 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.
Recording settings…Alt+O, TOpens the Recording settings dialog. Three listboxes side-by-side: Recording source (Alt+S), File format (Alt+F), Audio format attributes (Alt+A). The attributes list repopulates based on the selected format. OK saves to the current profile; Cancel discards.
Open current recordings folderAlt+O, 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+O, 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.

Help menu

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

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.

6. Connectivity tab

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

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.

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.

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).
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.

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.

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.

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:

Sending

Sending requires 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.

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.

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.

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.

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:

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.

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.

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.

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.

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+KSender-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.

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.

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.

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

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.

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.

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.

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

How the driver picker chooses the pipeline

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).

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).

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:

Audient USB Audio ASIO Driver — Pair 1 (channels 1/2): Mic | Line | Instrument 1 / Mic | Line 2
Audient USB Audio ASIO Driver — Pair 2 (channels 3/4): Mic | Line 3 / Mic | Line 4
Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / Loop-back 2 (R)

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.

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.

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.

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:

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).

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.

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.

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 (File → Preferences, or Ctrl+P).

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

RemSound uses two UDP ports:

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

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.

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.

Network packet priority (qWAVE / Voice / WMM)

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.

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.

WAN — different physical locations

Direct internet peer-to-peer connections require either:

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:

  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. From then on, RemSound auto-unicasts announcements at those IPs every 1.5 seconds.
  3. The receiving side’s discovery hears the announcement, adds the sender to its own unicast list, and announces back.
  4. Within seconds, both sides see each other in Discovered peers without further typing.

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

Round-trip time and what it means

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.

12. Latency and audio quality

Five controls together shape the latency / audio-quality trade-off, 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.

Audio latency slider

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.

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.

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.

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.

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.

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.

Packet size — Standard or Small

Two options: Standard (default) and Small. Controls the frame size 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.

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.

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:

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.
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.

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.

If you turn auto-tune off, the latency value 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:

Opus packet-loss recovery (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.

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

Codec choice

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.

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.

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.

Connectivity tab

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

(Logging controls — Enable logs and Write logs now — live in the Preferences dialog; reach them via File → Preferences or Ctrl+P, then 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+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+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.

KeyAction
Alt+UToggle Use CPU and Windows performance settings in high priority mode (for this profile)
Alt+CFocus Audio codec
Alt+PFocus Packet size
Alt+KToggle 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+BFocus Buffer smoothness
Alt+AFocus Artefact sound type

File menu shortcuts (work from any tab)

KeyAction
Ctrl+SSave active profile (or Save as if on Blank template)
Ctrl+KOpen Keyboard shortcuts dialog
Ctrl+POpen Preferences dialog
Ctrl+RStart or stop recording (toggles)
Alt+O, SStart or stop recording (via menu — Record menu is Alt+O, item is S)
Alt+O, TRecording settings dialog
Alt+O, OOpen current recordings folder
Alt+O, CChange recordings folder
Alt+F, OOpen profile
Alt+F, ASave profile as
Alt+F, RRename current profile
Alt+F, MMinimise to tray
Alt+F, XExit

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
Up / DownMove between items in any list
Alt+F4Close (standard Windows)

14. Global hotkeys (work even when minimised)

Configurable in the Keyboard shortcuts dialog (Ctrl+K, or File → 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:

HotkeyActionDefault
Receive muteMute / unmute incoming audio (this machine)Ctrl+Shift+Alt+R
Send muteMute / unmute outgoing audio (this machine)Ctrl+Shift+Alt+S
Tray toggleShow / hide the main windowCtrl+Shift+F10
Volume up / downAdjust this machine's received-audio volumeUnset
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
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

You can change any of these to whatever combination you prefer. Each accepts modifiers (Ctrl, Shift, Alt) plus one regular 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.

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.

Two flavours 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:

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.

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

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. 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: 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.
  3. 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.
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.

Mutuality

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.

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.

16. Startup behaviour

Open the Startup behaviour dialog from File → Preferences → Startup behaviour (or Ctrl+P, then Alt+S). 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.

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.

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.

Combining the three for a hands-off boot

  1. Save a profile with the device ticks, peers, and audio settings you want for “always-on” use.
  2. 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.
  3. 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.
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.

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.

Settings in Preferences

Open File → Preferences (or Ctrl+P). The update settings sit 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.

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:

  1. RemSound downloads the new release’s RemSound-vX.Y.zip from GitHub into a staging folder next to the running .exe.
  2. It writes a tiny detached _apply-update.cmd alongside it that watches the RemSound process.
  3. RemSound exits.
  4. The detached cmd notices the exit, copies the staged files over the install folder, deletes the staging folder, and relaunches RemSound.exe.
  5. The cmd 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.

If 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 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.

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.

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:

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.

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.

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.

Start / 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.

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.

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.

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.

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.

Starting and stopping

Three 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 settings dialog

Reached via Record → Recording settings. Three keyboard-navigable listboxes:

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 list to the right repopulates 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: six rows pairing bit-depth (16 / 24 / 32-bit float) with channel mode (stereo / mono). MP3: eight rows pairing CBR bitrate (128 / 192 / 256 / 320 kbps) with channel mode. OGG-Opus: eight rows pairing VBR bitrate (96 / 128 / 192 / 256 kbps) with channel mode. FLAC: four rows pairing bit-depth (16 / 24-bit) with channel mode — FLAC is integer-PCM only, so no 32-bit-float row. Compression level for FLAC is fixed at 5 (the libFLAC reference default).

OK saves the choices to the current profile. Cancel (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.

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.

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.

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.

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:

20. Troubleshooting

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. Audio inputs and outputs tab: is Receive audio ticked?
  3. Same tab: is at least one output device ticked in the WASAPI or ASIO output list?
  4. Same tab: is the volume slider above zero?

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. If you’re using a microphone: is Windows’ microphone privacy setting allowing apps to use it? (Settings → Privacy → Microphone.)
  4. Have they ticked your name in their Discovered peers list?

I can hear them but the audio crackles

Audio 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.

I can’t see my friend in Discovered peers

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.

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).

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.

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.