Bump to v2.1.0: UPnP, read-only profile lock, sleep/hibernate audio fix

Headline features:
* Automatic router port opening (UPnP / NAT-PMP / PCP). Opt-in via
  Preferences; surfaces external address + carrier-grade NAT detection.
* Lock profile (read-only). New File-menu tick that makes a profile
  load-only — session changes don't persist, no save prompt on close.
  Unblocks unattended shutdowns (NVDA gone, remote dropped, hibernate)
  where the existing save prompt could deadlock.
* Check for updates on startup (default on) + brief countdown notice
  before silent updates install, so a launch-time update doesn't make
  the app silently vanish.
* "Cue sounds" -> "Audio cue sounds" label clarification.

Bug fixes:
* No sound after the computer wakes from sleep. PowerResumeHandler
  rebuilds the audio backend automatically on resume; brief
  "Reconnecting to audio driver" splash during the rebuild.
* Receiver audio silent after waking from hibernate. RefreshAudioDeviceLists
  now treats a transient ASIO probe failure (returns -1/-1 because the
  driver is mid-teardown / mid-reinit) as "retry next tick" instead of
  clearing the user's tick selection.

Diagnostic-only changes (gated on the existing Enable-logs checkbox,
zero cost when off):
* AudioStepProbe split into cross-buffer vs within-buffer maxes so log
  inspection can tell a real-content sharp transient apart from a
  pipeline-boundary glitch. Plumbed through every probe owner.
* New rxNetGapMs + gc0/gc1/gc2 delta columns in the diag log to split
  receive-side jitter into network-layer vs managed-runtime causes.

Files touched: RELEASE_NOTES.md + readme.html + 24 source files across
RemSound.Core / RemSound.Sender / RemSound.Receiver / RemSound.App.
Three new app files: PowerResumeHandler, RouterPortMapper,
UpdateInstallNoticeDialog.

Wire format and audio pipeline unchanged from v1.5 onward — v1.5
through v2.1 peers interoperate.
This commit is contained in:
Ednunp
2026-05-22 23:06:07 +01:00
parent 00cb4deef1
commit 79b28b6c02
27 changed files with 1980 additions and 125 deletions
+81
View File
@@ -20,6 +20,87 @@ internal sealed class AboutDialog : Form
/// updates" path.</summary>
private const string ReleaseNotes =
"""
RemSound v2.1
Automatic router setup for internet streaming, a small
notice before background updates install, a "lock this
profile" option for users who don't want close prompts,
and a fix for the "no sound after the laptop wakes up"
problem. No wire-format or audio-pipeline changes
v1.5 through v2.1 peers interoperate.
What's new:
* Automatic router port opening (UPnP). RemSound can
now ask your router to let peers on the internet
reach you, so you don't have to set up port
forwarding by hand. Off by default. Tick the new
"Automatically open my router for incoming
connections (UPnP)" box in Preferences to turn it
on. A status line right below the tick tells you
what happened found your router and opened the
port, found your router but the port couldn't be
opened, or no router found that supports this
feature. If your internet provider puts you behind
a second layer of NAT (common on mobile broadband
and some cable connections), the status line will
say so and suggest using Tailscale or the relay
instead.
* Check for updates on startup. New checkbox in
Preferences, on by default. Shortly after RemSound
launches it has a quiet look for a new release.
Combined with "Silently install updates", this
means leaving RemSound to keep itself up to date
without you ever needing to think about it.
* Brief notice before a silent update installs. When
RemSound finds an update at startup and is set to
install silently, it now shows a small window with
the version it's about to install and an 8-second
countdown. Press Enter (or wait) to install now,
"Skip this version" to leave the update for
another day, or "Postpone" to try again at the
next check. Without this notice, the app could
silently close on you a few seconds after launch
and you'd have no idea why.
* Lock profile (read-only). New tickable item in the
File menu (Alt+F, L). When ticked, anything you
change while RemSound is running stays in this
session and is forgotten on close your saved
profile is left untouched, and there's NO "save
changes?" prompt on exit. Useful when you have a
default profile you want to keep clean even if you
toggle send/receive or volume during the day, and
essential if a save prompt could block shutdown
when you can't reach it (screen reader gone,
remote session dropped, machine hibernating).
Saved per profile, off by default, toggle as often
as you like. Save As on a locked profile produces
an unlocked copy you can edit normally.
* "Cue sounds" in Preferences is now labelled "Audio
cue sounds" for clarity.
Bug fixes:
* No sound after the computer wakes from sleep. On
many setups (especially USB audio interfaces),
waking the computer left RemSound's audio engine
in a state where it looked like it was running but
no sound actually came out you'd have to quit
and reopen RemSound to get audio back. RemSound
now notices when the system has woken up, waits a
moment for the USB devices to settle, and rebuilds
its audio engine automatically. The "Loading audio
driver" window briefly appears during the rebuild
so you can see it's happening.
* Receiver audio silent after waking from hibernate.
A follow-up to the wake-from-sleep fix above: on
hibernate (rather than ordinary sleep) the ASIO
receive output's tick selection could be silently
wiped during hibernation entry, leaving the
receiver running silent on resume even though
everything looked normal in the logs. Fixed by
recognising the transient driver-disappeared state
and preserving the user's tick until the driver
comes back.
RemSound v2.0
A smoother startup when a profile uses an ASIO driver.