From fd5c31740af9c2af8453516255acafaa38bcc2b6 Mon Sep 17 00:00:00 2001 From: Ednunp <29843396+Ednunp@users.noreply.github.com> Date: Fri, 19 Jun 2026 13:09:06 +0100 Subject: [PATCH] Release v4.3: speak status line (Tolk) + Logging tab with housekeeping - New screen-reader hotkey "Speak the RemSound status information" (issue #13): reads the status line aloud through the active screen reader via Tolk, fires from anywhere (system-wide), unset by default. Built behind an IScreenReaderOutput seam so a future build can swap Tolk for Prism on Windows 10+ without touching callers. Tolk DLLs vendored under tolk/ and shipped next to the exe. - New Logging tab in Preferences: Enable logs + Write logs now moved there, plus opt-in startup "warn if logs folder exceeds N MB" and "delete logs older than N days", and a "Delete all logs" button (Yes/No confirm). New LogMaintenance helper + AppConfig settings drive it. - Manual (readme.html + regenerated MANUAL.md), About changelog and RELEASE_NOTES updated in plain English; csproj bumped to 4.3. Co-Authored-By: Claude Opus 4.8 --- MANUAL.md | 27 ++- RELEASE_NOTES.md | 26 +-- readme.html | 27 ++- src/RemSound.App/AboutDialog.cs | 25 +++ src/RemSound.App/IScreenReaderOutput.cs | 24 +++ src/RemSound.App/LogMaintenance.cs | 85 ++++++++++ src/RemSound.App/MainForm.cs | 71 +++++++- src/RemSound.App/MainFormHotkeyController.cs | 29 +++- src/RemSound.App/PreferencesDialog.cs | 155 ++++++++++++++++- src/RemSound.App/RemSound.App.csproj | 23 ++- src/RemSound.App/ScreenReader.cs | 45 +++++ src/RemSound.App/SelfTest.cs | 2 +- src/RemSound.App/TolkScreenReaderOutput.cs | 70 ++++++++ src/RemSound.Core/AppConfig.cs | 19 +++ src/RemSound.Core/Profile.cs | 3 + src/RemSound.Core/RemSoundSettingsStore.cs | 13 ++ tolk/LICENSE-Tolk.txt | 165 +++++++++++++++++++ tolk/SAAPI64.dll | Bin 0 -> 85984 bytes tolk/Tolk.dll | Bin 0 -> 144384 bytes tolk/nvdaControllerClient64.dll | Bin 0 -> 153600 bytes 20 files changed, 783 insertions(+), 26 deletions(-) create mode 100644 src/RemSound.App/IScreenReaderOutput.cs create mode 100644 src/RemSound.App/LogMaintenance.cs create mode 100644 src/RemSound.App/ScreenReader.cs create mode 100644 src/RemSound.App/TolkScreenReaderOutput.cs create mode 100644 tolk/LICENSE-Tolk.txt create mode 100644 tolk/SAAPI64.dll create mode 100644 tolk/Tolk.dll create mode 100644 tolk/nvdaControllerClient64.dll diff --git a/MANUAL.md b/MANUAL.md index 57eb30c..1299690 100644 --- a/MANUAL.md +++ b/MANUAL.md @@ -699,7 +699,7 @@ Alt+R| Focus the Remembered peers list Alt+A| Add peer by IP Alt+S| Focus the Connection status read-out -(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.) +(The logging controls — Enable logs, Write logs now and the log-folder housekeeping — are on the Logging tab of 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 @@ -784,6 +784,7 @@ Send remote receive mute toggle to peers| Tell every connected peer to toggle th Send Windows global volume up to peers| Tell 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 peers| The same, but lowering.| Unset Send Windows global mute toggle to peers| Tell every connected peer to toggle their Windows mute.| Unset +Speak the RemSound status information| Read the whole status line out loud through your screen reader — the connection time, how many peers you have, whether sound is flowing, and how healthy the link is — from anywhere, even with RemSound in the tray. Just for screen-reader users; see Hearing the status on demand below.| Unset You can change any of these to whatever combination you prefer. Each accepts modifiers (Ctrl, Shift, Alt) plus one ordinary key. @@ -793,6 +794,14 @@ Once you've given **Quick profile switch** a key, pressing it anywhere pops up a If RemSound was minimised to the system tray when you pressed the hotkey, it switches the profile and **stays in the tray** — the window doesn't jump up in front of whatever you're doing. So you can change profiles mid-task without losing your place. +### Hearing the RemSound status on demand + +The main window has a **status line** that updates every second with how long you've been connected, how many peers you have, whether sound is flowing, and how healthy the connection is. Normally your screen reader reads it like any other text — but now and then, for reasons that have nothing to do with RemSound, a screen reader loses sight of it and says there's nothing there. + +This hotkey is the cure. Give **Speak the RemSound status information** a key in the Keyboard shortcuts dialog, and from then on pressing it reads the whole status line out loud, wherever you are — even when RemSound is tucked away in the tray or another program is in front. It's unset to start with, so the key is yours to choose. + +This one is just for screen-reader users: it talks straight through your screen reader. It works with the screen readers RemSound's speech helper supports — **NVDA** , JAWS, Window-Eyes, System Access, SuperNova and ZoomText — and falls back to Windows' own built-in speech if none of those is running. If you don't use a screen reader, just leave this one unset. + ### Your screen reader reads out the hotkeys Once a hotkey is set, your screen reader reads it out whenever you land on the menu item or control it's tied to — for example, moving onto **File → Open profile** announces “Ctrl+O”, and a control with a global hotkey announces “press [your key] anywhere”. So you can learn and confirm your shortcuts just by arrowing around the window, without coming back to this dialog. @@ -954,7 +963,7 @@ RemSound can check for a newer version on a schedule you choose, prompt you to i ### Settings in Preferences -Open **Options → Preferences** (or Ctrl+P). The update settings sit just above the logging row: +Open **Options → Preferences** (or Ctrl+P) and go to the **Update settings** tab: Setting| Shortcut| What it does ---|---|--- @@ -1077,7 +1086,7 @@ OK (Alt+O) saves your choices to the current profile. Cancel (Alt+N) or Esc disc ## 21. Logs and diagnostics -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 inside **user settings and logs** — the same folder your settings and profiles live in. One file per launch. +Everything to do with logging lives on its own **Logging** tab in the Preferences dialog (Options → Preferences, or Ctrl+P). If logging is turned on (the **Enable logs** checkbox there, on by default), RemSound writes a log file each session into a `logs` folder inside **user settings and logs** — the same folder your settings and profiles live in. One file per launch. The file contains two kinds of rows: @@ -1086,7 +1095,17 @@ Kind| Contents EVT| Event lines — startup, a peer being selected, capture starting, errors, and so on. SNAP| One-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 that moment in the file afterwards. +The **Write logs now** button on the Logging tab (Alt+W within the dialog) writes a “user requested write logs now” marker into the log, so you can find that moment in the file afterwards. + +### Keeping the logs folder tidy + +Log files are small, but if you leave logging on for months they add up. The **Logging** tab has three ways to keep the folder under control, all switched off to begin with so nothing is ever deleted unless you ask for it: + + * **Warn at startup if the logs folder is larger than … megabytes** (Alt+S) — tick this and pick a size, and the next time RemSound starts it checks the folder and pops up a friendly notice if it has grown past that size. It only warns; it never deletes anything itself. The size box (Alt+M) starts at 100 megabytes and stays greyed out until you tick the box. + * **Delete logs older than … days old** (Alt+D) — tick this and pick a number of days, from 1 to 30, and each time RemSound starts it quietly clears out any log older than that. The log it's writing right now is never touched. The days box (Alt+Y) starts at 14 and stays greyed out until you tick the box. + * **Delete all logs** (Alt+A) — a button that clears out every log file in one go. It asks you to confirm first, Yes or No, then tells you how many it removed. Again, the log RemSound is writing right now is kept; everything else goes. + + Logs are plain text and can be opened in any text editor, or in a spreadsheet. The most useful figures when something feels wrong: diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 668921a..84aed2e 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,33 +1,37 @@ -# RemSound v4.2 +# RemSound v4.3 -Three fixes — a freeze when connecting, a new-profile glitch that looked like a crash, and smoother audio on WASAPI. +Two additions for screen-reader users — hear the status line on demand — and a tidier home for logging. -## Connecting no longer risks a freeze +## Hear the RemSound status line on demand -If you had a peer saved by **name** (rather than a numeric address) and that name couldn't be looked up quickly — an offline peer, or a VPN name while the VPN was down — RemSound used to stall for a few seconds while it waited on the lookup. Because a screen reader waits on the program it's reading, that stall could feel like the whole computer locking up: speech going quiet, keys not responding, then everything coming back a moment later. The name lookup now runs in the background, so connecting — and reconnecting — stays responsive no matter what's in your saved-peers list. +RemSound's main window has a status line that updates every second: how long you've been connected, how many peers you have, whether sound is flowing, and how healthy the link is. Usually your screen reader reads it like any other text — but every so often, for reasons that have nothing to do with RemSound, it loses track of it and says there's nothing there. -## Creating a new profile no longer hides the window +There's now a hotkey for it. In the Keyboard shortcuts dialog (Ctrl+K), set a key for **Speak the RemSound status information**, and pressing it reads the whole status line aloud through your screen reader, from anywhere — even with RemSound hidden in the tray or another program in front. It's unset to begin with, so you pick the key, and it's there purely for screen-reader users. -Creating a new profile (**Ctrl+N**), or switching profiles, while you had **Start minimised** turned on would drop the freshly-loaded window straight to the tray — so the new profile looked like it had crashed. "Start minimised" is meant for when RemSound first launches, not for something you did on purpose. Now a new profile (or a switch) comes up the normal way, or stays in the tray only if that's where you already were. +It speaks through whichever screen reader you're running — NVDA, JAWS, Window-Eyes, System Access, SuperNova or ZoomText — and falls back to Windows' own built-in speech if none of those is on. -## Smoother audio on WASAPI +## A Logging tab, with folder housekeeping -RemSound now keeps Windows' timing fine while it's streaming. Without that, Windows can be lazy about waking the audio engine on time, so audio gets delivered in lumpy bursts instead of even steps — which on some machines showed up as breakup, or as latency that crept up over a long session. This fine timing was previously only switched on by **Priority mode**; now the audio path asks for it on its own whenever you're streaming, so you get the smoother delivery without needing that toggle on. (Priority mode's other, heavier options are unchanged and still optional.) +The logging controls now have their own **Logging** tab in Preferences, and there are three new ways to keep the logs folder from growing without limit — all off unless you turn them on: + +- **Warn at startup if the logs folder is larger than a size you choose** (starts at 100 MB) — a friendly notice, nothing deleted. +- **Delete logs older than a number of days you set** (1 to 30, starts at 14) — tidied automatically when RemSound starts; today's log is always kept. +- **Delete all logs** — one button, with a Yes/No confirm, that clears every log except the one in use. ## Compatibility -**v4.2 talks to v3.3 through v4.1 with no trouble** — the over-the-network format is unchanged, so you don't have to update both ends at once. (Everyone still needs **v3.3 or newer**, where end-to-end encryption came in.) +**v4.3 talks to v3.3 through v4.2 with no trouble** — the over-the-network format is unchanged, so you don't have to update both ends at once. (Everyone still needs **v3.3 or newer**, where end-to-end encryption came in.) ## Install -1. Download `RemSound-v4.2.zip` from this release. +1. Download `RemSound-v4.3.zip` from this release. 2. Close RemSound. 3. Extract the zip **over your existing RemSound folder**, overwriting program files when prompted. The zip is program files only — it won't touch your settings, profiles, logs or recordings. 4. Run `RemSound.exe`. ## Upgrading -**From v3.6 or newer:** Help → Check for updates installs v4.2 with the in-app updater — and if it can't finish, it puts your old version back exactly as it was. +**From v3.6 or newer:** Help → Check for updates installs v4.3 with the in-app updater — and if it can't finish, it puts your old version back exactly as it was. **From v1.9–v3.5:** Check for updates works, but uses your current version's older updater for this one hop. If auto-update has been failing on your machine, install by hand using the steps above. diff --git a/readme.html b/readme.html index e61335b..1f32426 100644 --- a/readme.html +++ b/readme.html @@ -740,7 +740,7 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L Alt+SFocus the Connection status read-out -

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

+

(The logging controls — Enable logs, Write logs now and the log-folder housekeeping — are on the Logging tab of 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

@@ -826,6 +826,7 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L +
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
Speak the RemSound status informationRead the whole status line out loud through your screen reader — the connection time, how many peers you have, whether sound is flowing, and how healthy the link is — from anywhere, even with RemSound in the tray. Just for screen-reader users; see Hearing the status on demand below.Unset

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

@@ -836,6 +837,14 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L

If RemSound was minimised to the system tray when you pressed the hotkey, it switches the profile and stays in the tray — the window doesn't jump up in front of whatever you're doing. So you can change profiles mid-task without losing your place.

+

Hearing the RemSound status on demand

+ +

The main window has a status line that updates every second with how long you've been connected, how many peers you have, whether sound is flowing, and how healthy the connection is. Normally your screen reader reads it like any other text — but now and then, for reasons that have nothing to do with RemSound, a screen reader loses sight of it and says there's nothing there.

+ +

This hotkey is the cure. Give Speak the RemSound status information a key in the Keyboard shortcuts dialog, and from then on pressing it reads the whole status line out loud, wherever you are — even when RemSound is tucked away in the tray or another program is in front. It's unset to start with, so the key is yours to choose.

+ +

This one is just for screen-reader users: it talks straight through your screen reader. It works with the screen readers RemSound's speech helper supports — NVDA, JAWS, Window-Eyes, System Access, SuperNova and ZoomText — and falls back to Windows' own built-in speech if none of those is running. If you don't use a screen reader, just leave this one unset.

+

Your screen reader reads out the hotkeys

Once a hotkey is set, your screen reader reads it out whenever you land on the menu item or control it's tied to — for example, moving onto File → Open profile announces “Ctrl+O”, and a control with a global hotkey announces “press [your key] anywhere”. So you can learn and confirm your shortcuts just by arrowing around the window, without coming back to this dialog.

@@ -1010,7 +1019,7 @@ Use whatever key combinations you prefer (for example Ctrl+Shift+Up / Ctrl+Shift

Settings in Preferences

-

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

+

Open Options → Preferences (or Ctrl+P) and go to the Update settings tab:

@@ -1135,7 +1144,7 @@ Use whatever key combinations you prefer (for example Ctrl+Shift+Up / Ctrl+Shift

21. Logs and diagnostics

-

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 inside user settings and logs — the same folder your settings and profiles live in. One file per launch.

+

Everything to do with logging lives on its own Logging tab in the Preferences dialog (Options → Preferences, or Ctrl+P). If logging is turned on (the Enable logs checkbox there, on by default), RemSound writes a log file each session into a logs folder inside user settings and logs — the same folder your settings and profiles live in. One file per launch.

The file contains two kinds of rows:

@@ -1145,7 +1154,17 @@ Use whatever key combinations you prefer (for example Ctrl+Shift+Up / Ctrl+Shift
SettingShortcutWhat it does
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 that moment in the file afterwards.

+

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

+ +

Keeping the logs folder tidy

+ +

Log files are small, but if you leave logging on for months they add up. The Logging tab has three ways to keep the folder under control, all switched off to begin with so nothing is ever deleted unless you ask for it:

+ +

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