feat(audio): Ctrl+M instant mute + inn-chatter investigation closed as server content
Two items from listening-gate round 2. Mute: AcdreamToggleAudioMute (default Ctrl+M; bare M is selection) flips OpenAlAudioEngine.Muted, implemented as the AL LISTENER gain - unused since A2 moved all mixing to the CPU, so it is a free master switch that silences already-playing voices instantly and restores them exactly, without touching the retail mixing math, the -50 dB allocation cutoff, or any persisted volume setting. Rebindable like every other action; console line confirms each flip. Inn chatter: the user hears talk-and-laughter ambience in retail inns and not in acdream. Three installed-dat scans (pinned as conformance tests in EnvCellSoundEmitterInventoryTests) prove the mechanism is NOT client data: no interior static in the town landblock carries an ambient-slot sound table, no Setup among all 5,935 in the portal dat references one, and yet 23 sound tables carrying ONLY Ambient1..8 slots exist - pure soundscape banks with nothing client-side pointing at them. They are wire-bound: the server attaches one to an emitter object via CreateObject's sound-table field and fires the slots over 0xF750 - ACE implements exactly this (EmoteType.Sound heartbeat emotes -> GameMessageSound broadcast). Our 0xF750 receiver (slice A3) is live and now instrumented (ACDREAM_PROBE_SOUND_WIRE=1, via the new AudioDiagnostics owner per Code Structure Rule 5, with per-event drop reasons in AudioHookSink.PlayServerSound). A probed session against the local ACE received ZERO 0xF750 events across a town walkabout: the silence is server world-content (no emitters configured/firing), not a client drop. The first scan's assertion originally encoded the emitter-object hypothesis; the data refuted it, and the test now pins the negative so the conclusion cannot silently rot. Full Release suite green (the one failure during development was the hypothesis-pinning assertion, corrected to pin the finding). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
e5ade796ac
commit
2cf94dbcd2
10 changed files with 339 additions and 5 deletions
|
|
@ -360,6 +360,20 @@ TunnelFadeIn. Both cues now fire on the sequencer's own dedicated sound events
|
|||
`PortalCues_FireOnTheSequencersOwnSoundEvents_NotOnTheTunnelVisuals` pins the
|
||||
moments. The exit cue was already correct.
|
||||
|
||||
**Listening-gate round 2 (2026-08-08, inn-chatter finding):** interior
|
||||
soundscapes (inn talk-and-laughter) are NOT dat-authored — proven by three
|
||||
installed-dat scans pinned in `EnvCellSoundEmitterInventoryTests`: no interior
|
||||
static carries an ambient-slot table, no Setup in the whole portal dat
|
||||
references one, yet 23 ambient-only soundscape banks exist. They are
|
||||
WIRE-BOUND: the server attaches them to emitter objects and fires the slots
|
||||
over 0xF750 (ACE: `EmoteType.Sound` heartbeat emotes). Our A3 path is the
|
||||
receiver and is live; a probed session (`ACDREAM_PROBE_SOUND_WIRE=1`)
|
||||
received ZERO 0xF750 events across a town walkabout, so the silence is ACE
|
||||
world-content, not a client drop. Also added this round: `Ctrl+M` instant
|
||||
mute (`AcdreamToggleAudioMute` → AL listener gain, unused since A2 — silences
|
||||
playing voices immediately without touching the retail mixing math or any
|
||||
persisted setting).
|
||||
|
||||
**Still owed:** the user listening gate (A2 falloff, A4 cues, A5 ambients) and
|
||||
the connected gates for A3/A4. Open rows: AP-173, AP-174, TS-64, TS-65, TS-66,
|
||||
TS-67, TS-9 (re-scoped), #321.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue