diff --git a/MANUAL.md b/MANUAL.md index a856cbf..8d5c8ab 100644 --- a/MANUAL.md +++ b/MANUAL.md @@ -787,7 +787,7 @@ Toggle| What it does ## 17. Audio cue sounds -RemSound plays a short sound at moments where you might want an audible confirmation that something just happened. These are called **cue sounds**. Six events have a cue: +RemSound plays a short sound at moments where you might want an audible confirmation that something just happened. These are called **cue sounds**. Seven events have a cue: Cue| Plays when ---|--- @@ -797,12 +797,13 @@ Cue| Plays when **Recording stop sound**| You stop a recording. **Profile saved sound**| A profile is saved — whether via File → Save or File → Save as. **Profile switched sound**| A profile finishes loading. Plays at startup if you started with a profile, and after every profile switch — using the new profile's cue, not the old one's. +**Update sound**| An update is about to install — it plays just before RemSound closes to update itself. Handy when updates install silently in the background, so you're not caught off guard when RemSound restarts. Plays whether you ran the update by hand or it installed on its own. -All six cues play through your default Windows sound output, which is separate from the audio RemSound is sending or receiving. They don't appear in a normal recording. (The exception: if your sending side is capturing the very output device the cues play through, then they get captured along with everything else from that device.) +All seven cues play through your default Windows sound output, which is separate from the audio RemSound is sending or receiving. They don't appear in a normal recording. (The exception: if your sending side is capturing the very output device the cues play through, then they get captured along with everything else from that device.) ### Turning each cue on or off -Open **File → Preferences** (or Ctrl+P). The **Audio cue sounds (Alt+N)** list shows all six cues with a tickbox next to each. Tick to play the cue when the corresponding event happens; untick to silence it. +Open **File → Preferences** (or Ctrl+P). The **Audio cue sounds (Alt+N)** list shows all seven cues with a tickbox next to each. Tick to play the cue when the corresponding event happens; untick to silence it. Use the up and down arrow keys to move between cues; press **Space** to toggle the highlighted cue's tick on or off. @@ -932,7 +933,7 @@ Format| What you get| When to pick it ### Start and 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. These are two of the six cues described in Audio cue sounds. You can turn either or both off, replace them with your own WAV files, and preview them from Preferences. The defaults live at `sounds\record start.wav` and `sounds\record stop.wav` next to `RemSound.exe`. +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. These are two of the seven cues described in Audio cue sounds. You can turn either or both off, replace them with your own WAV files, and preview them from Preferences. The defaults live at `sounds\record start.wav` and `sounds\record stop.wav` next to `RemSound.exe`. ### Where recordings go diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 6fd6ac4..e7ade9f 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,35 +1,41 @@ -# RemSound v3.1.3 +# RemSound v3.2 -An important reliability fix. After an update, a chain of small faults could line up and leave RemSound misbehaving — in the worst case, more than one copy running at once with the sound getting louder and louder. This release breaks that chain in several places, the most important being that RemSound now flatly refuses to run as two copies at the same time. +A new audio cue plus a round of reliability work. The headline is a sound that warns you an update is about to install — and underneath it, RemSound now flatly refuses to run as two copies at once. -## What could go wrong (and now can't) +## New: an "Update sound" cue -A few separate problems were feeding into each other: +RemSound now plays a short sound **just before it closes to install an update** — whether you started the update by hand or it installed silently in the background. So a silent update no longer catches you off guard: you hear that RemSound is about to restart. -- **Locked profiles could quietly unlock themselves.** If you'd marked a profile as read-only (locked) and then deliberately saved it, the save was silently dropping the lock. Next time you opened that profile it was editable again — so it started asking "save your changes?" when you didn't expect it. -- **That "save your changes?" question could block an update.** When RemSound updates itself it has to close and restart. If the save question popped up at that moment, a stray Enter or Escape landed on "Cancel" and quietly stopped the restart — so the update never finished cleanly. -- **Nothing stopped extra copies running.** With the restart half-done, RemSound could end up with two copies going at once — and then more — each one playing incoming audio, which is why the sound climbed to a deafening level. The only way out was force-closing them all. +Like every other cue, it's **per-profile**, you can **mute** it, and you can **swap in your own WAV** — all from **File → Preferences → Audio cue sounds**, where it's the new seventh entry in the list. Preview it with the Play button, point it at your own sound with Browse, or right-click Browse to go back to the default. -## What's fixed +## Only one copy of RemSound at a time -- **Only one copy at a time.** RemSound now refuses to run as two copies. If you open it while it's already running, it asks what you'd like to do: **switch to the copy that's already running** (it may be tucked in the system tray, by the clock), or — if that copy is stuck — **force it closed and start fresh**. This makes the stacking-copies runaway impossible. -- **Updates can't be interrupted.** When RemSound updates and restarts, nothing is allowed to get in the way — no question can cancel the restart. -- **Locked means locked.** Marking a profile read-only now survives saving it, deliberately or otherwise. -- **No double-installs.** A single copy can no longer kick off two update installs at once. +RemSound now refuses to run as two copies at once. If you open it while it's already running, it asks what you'd like to do: + +- **Switch to the copy that's already running** — brings it back to the front (even if it was minimised to the system tray, down by the clock). +- **Force the running copy to close and start fresh** — for when a copy is stuck or not responding. + +This closes off a problem where, after an update, RemSound could end up with several copies running at once, each playing audio and getting louder — the only way out being to force-close them all. + +## Updates are more dependable + +- **Nothing can interrupt an update's restart any more.** Previously an "unsaved changes?" question could pop up at the wrong moment and quietly cancel it. +- **A locked (read-only) profile stays locked when you save it.** Before, deliberately saving a locked profile silently dropped the lock — which then brought the save question back and could trip up an update. +- **A single copy can't kick off two updates at once.** ## Nothing else has changed -Same wire format, same codec list, same audio cues, same everything else from v3.1. v3.1.3 talks to v3.0.x and v3.1.x peers exactly as before. +Same wire format, same codec list, same audio cues (plus the new one), same everything else from v3.1. v3.2 talks to v3.0.x and v3.1.x peers exactly as before. ## Install -1. Download `RemSound-v3.1.3.zip` from this release. +1. Download `RemSound-v3.2.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 profiles, settings or recordings. 4. Run `RemSound.exe`. ## Upgrading -**v1.9 through v3.1.2:** Help → Check for updates works — it will fetch and install v3.1.3 automatically. If you've ticked "Check for updates on startup" and "Silently install updates", v3.1.3 installs itself shortly after launch. +**v1.9 through v3.1.3:** Help → Check for updates works — it will fetch and install v3.2 automatically. If you've ticked "Check for updates on startup" and "Silently install updates", v3.2 installs itself shortly after launch (and you'll hear the new update cue as it does). -**v1.8 and earlier:** the auto-updater in those versions has a fault that prevents it from installing updates, so Check for updates will download v3.1.3 but not apply it. Install v3.1.3 by hand using the steps above — just this once. From the build you install onward, updates are automatic. +**v1.8 and earlier:** the auto-updater in those versions has a fault that prevents it from installing updates, so Check for updates will download v3.2 but not apply it. Install v3.2 by hand using the steps above — just this once. From the build you install onward, updates are automatic. diff --git a/readme.html b/readme.html index 5a486f9..123e570 100644 --- a/readme.html +++ b/readme.html @@ -837,7 +837,7 @@ Use whatever key combinations you prefer (for example Ctrl+Shift+Up / Ctrl+Shift

17. Audio cue sounds

-

RemSound plays a short sound at moments where you might want an audible confirmation that something just happened. These are called cue sounds. Six events have a cue:

+

RemSound plays a short sound at moments where you might want an audible confirmation that something just happened. These are called cue sounds. Seven events have a cue:

@@ -847,13 +847,14 @@ Use whatever key combinations you prefer (for example Ctrl+Shift+Up / Ctrl+Shift +
CuePlays when
Recording stop soundYou stop a recording.
Profile saved soundA profile is saved — whether via File → Save or File → Save as.
Profile switched soundA profile finishes loading. Plays at startup if you started with a profile, and after every profile switch — using the new profile's cue, not the old one's.
Update soundAn update is about to install — it plays just before RemSound closes to update itself. Handy when updates install silently in the background, so you're not caught off guard when RemSound restarts. Plays whether you ran the update by hand or it installed on its own.
-

All six cues play through your default Windows sound output, which is separate from the audio RemSound is sending or receiving. They don't appear in a normal recording. (The exception: if your sending side is capturing the very output device the cues play through, then they get captured along with everything else from that device.)

+

All seven cues play through your default Windows sound output, which is separate from the audio RemSound is sending or receiving. They don't appear in a normal recording. (The exception: if your sending side is capturing the very output device the cues play through, then they get captured along with everything else from that device.)

Turning each cue on or off

-

Open File → Preferences (or Ctrl+P). The Audio cue sounds (Alt+N) list shows all six cues with a tickbox next to each. Tick to play the cue when the corresponding event happens; untick to silence it.

+

Open File → Preferences (or Ctrl+P). The Audio cue sounds (Alt+N) list shows all seven cues with a tickbox next to each. Tick to play the cue when the corresponding event happens; untick to silence it.

Use the up and down arrow keys to move between cues; press Space to toggle the highlighted cue's tick on or off.

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

Start and 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. These are two of the six cues described in Audio cue sounds. You can turn either or both off, replace them with your own WAV files, and preview them from Preferences. The defaults live at sounds\record start.wav and sounds\record stop.wav next to RemSound.exe.

+

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. These are two of the seven cues described in Audio cue sounds. You can turn either or both off, replace them with your own WAV files, and preview them from Preferences. The defaults live at sounds\record start.wav and sounds\record stop.wav next to RemSound.exe.

Where recordings go

diff --git a/sounds/update.wav b/sounds/update.wav new file mode 100644 index 0000000..8e2373e Binary files /dev/null and b/sounds/update.wav differ diff --git a/src/RemSound.App/AboutDialog.cs b/src/RemSound.App/AboutDialog.cs index e6da3df..8cae5f0 100644 --- a/src/RemSound.App/AboutDialog.cs +++ b/src/RemSound.App/AboutDialog.cs @@ -20,6 +20,34 @@ internal sealed class AboutDialog : Form /// updates" path. private const string ReleaseNotes = """ + RemSound v3.2 + + A new audio cue, plus the reliability work from + the recent updates, rolled into one release. + + New "Update sound" cue: RemSound now plays a short + sound just before it closes to install an update — + for both manual updates and silent background ones. + So a silent update no longer takes you by surprise; + you hear it coming. Like every cue it's per-profile, + can be muted, and you can swap in your own sound, + all from File → Preferences → Audio cue sounds. + + Only one copy at a time: RemSound refuses to run as + two copies at once. Open it while it's already + running and it offers to switch you to the copy + that's already going (now reliably bringing that + window to the front, even from the system tray), or + — if that copy is stuck — to force it closed and + start fresh. + + Updates can't be blocked or doubled up: nothing can + get in the way of an update's restart any more, and + a single copy can't kick off two installs at once. + + Locked profiles stay locked: marking a profile as + read-only now survives saving it. + RemSound v3.1.3 An important reliability fix. After an update, a diff --git a/src/RemSound.App/MainForm.cs b/src/RemSound.App/MainForm.cs index 01d8242..3086dd5 100644 --- a/src/RemSound.App/MainForm.cs +++ b/src/RemSound.App/MainForm.cs @@ -326,6 +326,7 @@ public sealed class MainForm : Form // Save As; Profile fires immediately after a profile finishes loading in MainForm. private System.Media.SoundPlayer? saveSound; private System.Media.SoundPlayer? profileSwitchSound; + private System.Media.SoundPlayer? updateSound; // Labels for the three send/receive device lists, captured at layout time so they can be // re-titled when the user toggles between WASAPI mode (Windows devices) and ASIO mode // (driver channel pairs). null until BuildLayout has run. @@ -892,6 +893,7 @@ public sealed class MainForm : Form TryLoadCueSound(CueId.RecordStop, "record stop.wav", out recordStopSound); TryLoadCueSound(CueId.Save, "save.wav", out saveSound); TryLoadCueSound(CueId.ProfileSwitch, "profile.wav", out profileSwitchSound); + TryLoadCueSound(CueId.Update, "update.wav", out updateSound); LoadAudioDevices(); // Apply persisted ASIO mode from settings — switches sender/receiver backends so the @@ -2081,6 +2083,14 @@ public sealed class MainForm : Form } updateInstallStarted = true; + // Update cue — an audible heads-up that an update is going in, played just before it + // starts. Fires for every install path (manual, background-silent, startup-silent), so + // a silent background update isn't completely silent: the user hears that RemSound is + // about to close and update. Played before the download so it sounds well before the + // app vanishes; the download comfortably outlasts the short cue. Honours the per-profile + // EnableUpdateCue flag set in Preferences. + if (settings.LoadEnableUpdateCue()) updateSound?.Play(); + var ok = await updater.DownloadAndStageInstallAsync(info, currentProfileTitle).ConfigureAwait(true); if (!ok) { @@ -5426,6 +5436,7 @@ public sealed class MainForm : Form public const string RecordStop = "record-stop"; public const string Save = "save"; public const string ProfileSwitch = "profile-switch"; + public const string Update = "update"; } /// Load one cue sound. Resolution order: @@ -5487,6 +5498,7 @@ public sealed class MainForm : Form TryLoadCueSound(CueId.RecordStop, "record stop.wav", out recordStopSound); TryLoadCueSound(CueId.Save, "save.wav", out saveSound); TryLoadCueSound(CueId.ProfileSwitch, "profile.wav", out profileSwitchSound); + TryLoadCueSound(CueId.Update, "update.wav", out updateSound); } /// diff --git a/src/RemSound.App/PreferencesDialog.cs b/src/RemSound.App/PreferencesDialog.cs index c1a5e89..2fd1b2c 100644 --- a/src/RemSound.App/PreferencesDialog.cs +++ b/src/RemSound.App/PreferencesDialog.cs @@ -102,6 +102,8 @@ internal sealed class PreferencesDialog : Form s => s.LoadEnableSaveCue(), (s, v) => s.SaveEnableSaveCue(v)), new("Profile switched sound", MainForm.CueId.ProfileSwitch, s => s.LoadEnableProfileSwitchCue(), (s, v) => s.SaveEnableProfileSwitchCue(v)), + new("Update sound", MainForm.CueId.Update, + s => s.LoadEnableUpdateCue(), (s, v) => s.SaveEnableUpdateCue(v)), ]; private readonly AccessibleCheckBox acceptRemoteVolumeBox = new() @@ -595,6 +597,7 @@ internal sealed class PreferencesDialog : Form MainForm.CueId.RecordStop => "record stop.wav", MainForm.CueId.Save => "save.wav", MainForm.CueId.ProfileSwitch => "profile.wav", + MainForm.CueId.Update => "update.wav", _ => null, }; if (defaultFileName is null) return null; diff --git a/src/RemSound.App/RemSound.App.csproj b/src/RemSound.App/RemSound.App.csproj index cf401cd..db9c7e8 100644 --- a/src/RemSound.App/RemSound.App.csproj +++ b/src/RemSound.App/RemSound.App.csproj @@ -14,7 +14,7 @@ tag_name on the latest GitHub release; bump it on every public release. The AssemblyVersion / FileVersion default to this value, and Assembly.GetName().Version is what the About dialog and the updater both read. --> - 3.1.3 + 3.2.0 @@ -90,6 +90,13 @@ sounds\profile.wav PreserveNewest + + + sounds\update.wav + PreserveNewest +