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:
co-authored by
Claude Opus 4.7
parent
6d6d6897e4
commit
af0e7c3fff
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user