v4.0: full audio-cue system, cause-aware auto-tune, four-tab Preferences, install-side default sounds
Audio cues - Cues for send/receive on-off, minimise/restore, checkbox tick/untick, and tab switch - Soft keyboard clicks while typing, with a distinct passkey sound on password fields - Per-cue "Choose sound" variant picker; "(none)" silences a cue; front-most missing-sound warning - Send/receive cues take priority over the generic checkbox sound; programmatic ticks stay silent Preferences - Redesigned into four tabs (General, Audio cues, Startup behaviour, Update settings) - Startup behaviour moved in from the Options menu - NVDA now announces the dialog on open (focus a real named control, not the quiet tab control) Auto-tune - Cause-aware: tells device render-callback stalls (more buffer can't fix) apart from genuine network/buffer starvation, so it no longer pins latency high on chunky onboard cards - Lowering the target eases the buffer down (glide) instead of trimming it, so no clicks while tuning Sounds layout - Shipped defaults moved out of the per-user folder into an install-side "default sounds" folder, so updates can refresh them; user customs are Browse-picked file paths and are left untouched - Startup migration removes both legacy sound folders; verified from oldest (v1.0-v3.3) and v3.4 layouts Quiet automated launches - New --silent launch flag mutes all cue sounds and suppresses the startup dialogs (migration notice, update check, Realtek/mic/missing-sound warnings) so test launches never disturb the user - run-tests / build-release / SelfTest repointed to the new "default sounds" layout Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
0b7ad49021
commit
a408d2b56e
@@ -295,12 +295,11 @@ internal static class SelfTest
|
||||
var root = AppContext.BaseDirectory;
|
||||
Check(File.Exists(Path.Combine(root, "readme.html")), "readme.html (the F1 manual) must ship next to the exe");
|
||||
|
||||
// Cues are consolidated from the shipped sounds\ folder into the runtime sounds folder at
|
||||
// startup (Program.ConsolidateSounds), so by the time the self-test runs they live here.
|
||||
// An empty runtime folder means the shipped build had no sounds to seed from - exactly the
|
||||
// bug that shipped the v3.9 zip with no cue sounds.
|
||||
// The shipped DEFAULT cues live install-side in "default sounds\" next to the exe
|
||||
// (AppConfig.SoundsDirectory). An empty/absent folder means the shipped build had no sounds -
|
||||
// exactly the bug that shipped the v3.9 zip with no cue sounds.
|
||||
var soundsDir = AppConfig.SoundsDirectory;
|
||||
Check(Directory.Exists(soundsDir), "the runtime sounds folder must exist (cues are consolidated at startup)");
|
||||
Check(Directory.Exists(soundsDir), "the shipped 'default sounds' folder must exist next to the exe");
|
||||
// Cues ship as numbered variants ("connect 1.wav", ...); each required cue must have at
|
||||
// least one variant present.
|
||||
foreach (var cue in new[]
|
||||
@@ -311,7 +310,7 @@ internal static class SelfTest
|
||||
})
|
||||
{
|
||||
Check(CueSounds.Variants(cue).Count > 0,
|
||||
$"no sound variant present for the '{Path.GetFileNameWithoutExtension(cue)}' cue (was the shipped sounds\\ folder empty?)");
|
||||
$"no sound variant present for the '{Path.GetFileNameWithoutExtension(cue)}' cue (was the shipped 'default sounds' folder empty?)");
|
||||
}
|
||||
// Keyboard-click typing sounds + the password passkey sound.
|
||||
Check(File.Exists(Path.Combine(soundsDir, "key 1.wav")), "keyboard-click sound 'key 1.wav' must be present");
|
||||
|
||||
Reference in New Issue
Block a user