diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 41088197..9eef1264 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -2550,3 +2550,45 @@ manifest warning with these numbers. Before this, a reader of the manifest could not tell that a pinned human decision had been overridden at all — the command line was recorded faithfully, and recording the command you ran does not disclose that it is not the command you were given. + +### The voice reaches the output, and a null control says so quantitatively + +`+ voice ADV` in the log proves only that `play_voice` found a stream and called +`play()`. Whether the audio arrives at the Master bus is a different question, +and `docs/port/AUDIO-VERIFICATION.md` §2 exists because it is. + +The control needed **no test-only code**: MODDING rule 4 already shadows any +exported asset by path, so 140 s of silence dropped at +`data/mods/audio/voice/ADV.ogg` mutes the dialogue and changes nothing else. Two +`--boot --skip-at=25 --audio=…` runs, then `astats` over the same 14 s of movie: + +| | peak | RMS | +|---|---|---| +| `ADV.ogv`'s own audio (the bed) | −6.239 | −24.941 | +| the exported voice alone | −7.614 | −27.965 | +| **run with the voice muted** | **−6.251** | **−25.126** | +| **run with the voice playing** | **−5.415** | **−22.913** | + +The muted run reproduces the bed to **0.01 dB peak / 0.19 dB RMS**, which is what +makes the other row worth reading. And the mixed run is not merely *louder*: two +incoherent sources at −24.941 and −27.965 dBFS predict a sum at **−23.184**, and +the run measures **−22.913** — **0.27 dB** out. The voice is in the mix, at the +level its own file says it should be. + +⚠️ **Under the Dummy driver.** Per AUDIO-VERIFICATION, *"recorded under a dummy +driver"* is a weaker claim than *"heard"*, and no measurement here says the +recording is the **right** dialogue for this cutscene — only that the file the +exporter resolved is the one reaching the output at the expected level. The two +runs are also not sample-aligned (they differ by 1.7 s of wall clock), which is +why the `RMS trough` column is omitted: it moved by 40 dB between runs on window +placement alone, and peak and RMS are the two numbers that survive that. + +### Ⓐ *does* skip the intro in this build, so the play-test's report is not this bug + +`--skip-at=25` on a `--boot` run: `video skipped at 25.02 s`, `video ended at +25.02 s`, title at 25.02 s. The press goes through `Input.parse_input_event` and +arrives at `_unhandled_input` exactly as a pad's would, so **the wiring from press +to skip is live**. What that does not cover is a real key event from a focused +window, which is the difference between this run and the human's — and, separately, +**whether the game permits skipping an attract movie at all** is HANDOFF Q9 and +still 🟡. If the answer is no, this path is deleted rather than debugged.