Bump to v3.0.0: Opus live latency, codec rename, profile-resume after update, save-through-lock

* New "Opus, live latency" codec mode: 2.5 ms frames (120 samples/ch at 48 kHz)
  via the float-input encode path. End-to-end codec delay drops to ~5 ms (vs
  ~12.5 ms at standard 10 ms Opus). Test on LAN: 400 pps/lane, zero missed /
  reordered / duplicate packets, ~15 ms one-way saved end-to-end.

* Wire-format change: AudioFormatInfo.FrameDurationMilliseconds renamed to
  FrameSamplesPerChannel (int sample-count at announced sample rate). Removes
  the lossy 48000*ms/1000 conversion that couldn't represent 2.5 ms. v3 <-> v3
  exact; v3 <-> v2 still passes audio (Opus decoder is self-describing from
  packet TOC) but v2 side over-sizes its buffer wildly. v2.x profiles auto-
  migrate via <120 sentinel rule in RemSoundSettingsStore (anything below 120
  is treated as legacy ms and multiplied by 48). Profile JSON key kept as
  OpusFrameMilliseconds via [JsonPropertyName] so old profile files still load.

* Codec dropdown rebuilt with use-case names: "PCM 48K 24 bit - uncompressed",
  "Opus, broadcast quality - loss tolerant", "Opus, live latency - for jamming
  and monitoring". Middle 10 ms option retired; saved 480-sample profiles
  collapse to broadcast quality (safer-side default).

* Profile auto-resume after self-update: RemSoundUpdater writes a one-shot
  _resume-after-update.txt sentinel containing the active profile title before
  exit; Program.Main reads + deletes it on next start and silently loads that
  profile, skipping the picker. Helper batch's robocopy /XF excludes the
  sentinel and the failure-branch cleans it up if the install aborts. Falls
  through to normal startup behaviour (StartWithProfileTitle or picker) if the
  sentinel is missing, empty, or names a profile that no longer exists.

* Read-only profile saves now go through on explicit Ctrl+S / File -> Save
  with a one-time TaskDialog warning ("Save anyway" / "Cancel" + Do-not-show-
  again). Lock continues to suppress the automatic unsaved-changes prompt on
  close / profile switch (its main job). AppConfig.SaveOnReadOnlyMessageSuppressed
  renamed to SaveOnReadOnlyWarningSuppressed; v2.x suppression flag is silently
  discarded since the behaviour changed and the user needs to see the warning
  once on each machine.

* Manual (readme.html) updated: codec table rewritten with the three new
  choices and corrected bandwidth figures, send-rate description updated, new
  sections "The same profile picks up automatically after an update" and
  "Saving on purpose while a profile is locked".

* Subsumes the never-separately-released v2.2 work: native Opus encoder
  (~97% less per-second memory churn on Opus send path via Concentus.Native),
  efficiency tidy-ups (item 4 ASIO probe rate, item 6 WaitHandle, item 7
  snapshot cache, items 14/16 heartbeat + discovery), legacy cleanup
  (items 30/34/35/36: KeepAlive infrastructure, drift drop/repeat/accumulator
  fields, fan-out cache stat). New diagnostic columns cpu/memMB/wsMB/
  allocKBps/captureMs/sendMs/recvMs/renderMs gated on Enable-logs.

About dialog updated with v3.0 block at top; v2.2 block retained for the
subsumed work.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-05-23 23:31:55 +01:00
co-authored by Claude Opus 4.7
parent 6d6d6897e4
commit af0e7c3fff
19 changed files with 559 additions and 166 deletions
+75
View File
@@ -20,6 +20,81 @@ internal sealed class AboutDialog : Form
/// updates" path.</summary>
private const string ReleaseNotes =
"""
RemSound v3.0
A big release with two things you'll actually notice:
1) A new "live latency" Opus mode. RemSound now sends
sound in tiny 2.5-millisecond chunks instead of the
usual 10 or 20 ms. End-to-end delay drops to about
5 ms of codec delay close to PCM perfect for
playing along with someone in real time. Uses a bit
more network bandwidth than the regular Opus mode
but still a fraction of PCM. Best on a clean wired
network. Pick it from the codec list as "Opus, live
latency for jamming and monitoring".
2) After RemSound updates itself, it now reopens on
the same profile you were using. So if a silent
update fires mid-session, the session drops briefly
while the new files swap in, then RemSound reopens
with the same devices, peers and settings you
don't see the profile picker, and you don't have to
be at the computer when it happens. The next time
you launch RemSound yourself, your normal startup
choice applies as before.
Other changes:
* The codec list is now three choices, with clearer
names: PCM 48K 24 bit (uncompressed); Opus,
broadcast quality (loss tolerant); Opus, live
latency (the new low-latency mode). The old
"Opus lower quality (10 ms)" middle option has
been retired it sat between the other two
without a clear reason to pick it. If your saved
profile was using it, RemSound silently picks
broadcast quality for you slightly more delay,
more loss tolerance.
* Save on a locked (read-only) profile now goes
through when you ask on purpose. The lock still
suppresses the automatic "save your changes?"
prompt on close (its main job), but if you press
Save deliberately, a one-time warning explains
what's about to happen and lets you confirm or
cancel. Once you tick "do not show again", future
deliberate saves on a locked profile go through
silently. Save as... is unchanged it always
works.
Also includes everything from the never-separately-
released v2.2 work: a native Opus encoder that puts
much less load on Windows' memory manager (about 97 %
less per-second memory churn while sending Opus),
various small CPU and memory tidy-ups, and new
diagnostic log columns (cpu, memMB, wsMB, allocKBps,
captureMs / sendMs / recvMs / renderMs).
Compatibility note please read:
v3.0 changes how RemSound describes audio frame sizes
to other RemSound machines on the wire. Two v3.0
machines talk to each other perfectly. A v3.0 machine
talking to a v2.x machine will still pass audio, but
the v2.x side will build up too much buffer and
latency will be very high. To avoid this, update BOTH
machines to v3.0. The auto-updater on v1.9 and later
will handle the upgrade for you, but the timing
matters: if one machine updates before the other,
expect a short period of high latency until the
second machine catches up.
If you had previously ticked "do not show me this
message again" on the v2.x "save was blocked on a
read-only profile" dialog, that suppression doesn't
carry over you'll see the new one-time warning once
per machine. That's deliberate; the behaviour changed
and you need to know.
RemSound v2.2
A maintenance release that makes RemSound use less of