port: voice export carries every qualifying stream; a unity sum was refused by check

#4 answered: ADV.wmv carries ONE audio stream and it is WMA Pro 5.1, not XMA, so
the movie's own track is the bed and the three streams are additional. Solving
capture = 0.600 x movie + residual gives three residual signals at three
positions, with LFE reproducing to -115.73 dBFS -- where nothing is added the
decoders agree exactly, so the rest is added content.

presentation: all keeps every equal-length non-silent survivor -- ADV 2 of 3,
S00A 1 of 3 -- and the warning now keys on kept < present rather than on more
than one existing.

A unity sum was tried first and check refused it at +2.62 dBFS. The BGM stems
precedent did not transfer: those are stems of one signal, these are positions in
a field whose downmix weights sum to one whatever the assignment. Dividing by the
count preserves the total and claims nothing about placement; ADV lands at -3.1.

That is the OPPOSITE of the two divisor bugs already in this file, where a silent
input sat in the divisor. Divide-by-N is not right or wrong in itself.

Also carries their census correction: the ALSA permutation does not apply, the
map is the identity, and the '82% silent' channel was LFE.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
Sylpheed port agent
2026-08-30 08:28:12 +00:00
parent f7eac0e676
commit 36625d7bb3
4 changed files with 163 additions and 37 deletions

View File

@@ -9,7 +9,7 @@ dies, which is what this file is for.
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
125 sections. Search this before re-deriving anything.
126 sections. Search this before re-deriving anything.
* [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28)
* [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28)
@@ -136,6 +136,7 @@ dies, which is what this file is for.
* [A static overlay now advances, and a refutation attempt on the pulse floor](#a-static-overlay-now-advances-and-a-refutation-attempt-on-the-pulse-floor)
* [Their pulse floor reproduces exactly once the predicate is named — 159, to the pixel](#their-pulse-floor-reproduces-exactly-once-the-predicate-is-named--159-to-the-pixel)
* [My rendered pulse, counted in their units — and #4 refutes the voice value without fixing it](#my-rendered-pulse-counted-in-their-units--and-4-refutes-the-voice-value-without-fixing-it)
* [The voice export now carries every qualifying stream — and a unity sum was refused by our own check](#the-voice-export-now-carries-every-qualifying-stream--and-a-unity-sum-was-refused-by-our-own-check)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -7337,3 +7338,56 @@ nothing about *which* stream lands where, so it does not make summing right; and
`kFrameChannelsDefault`. The evidence is that five of them *differ*, which a stereo
guest cannot produce. The number of channels in a capture is a property of the
capture.
## The voice export now carries every qualifying stream — and a unity sum was refused by our own check
#4 is answered and it reframes the question the port had been asking. **`ADV.wmv`
carries one audio stream and it is WMA Pro 5.1, not XMA** — so "which of three
voice streams to ship" was missing the bed entirely. The movie's own track is the
bed; the three streams are *additional*.
Solving `capture = 0.600 × movie + residual` per channel, the gain is 0.600
uniformly (4.44 dB), and the residual is **three signals at three positions**
front pair (r 0.918), rear pair (r 0.929), and a centre whose partner LFE is empty
to 115 dB. 🔴 The load-bearing number is **LFE reproducing to 115.73 dBFS**:
where nothing is added the two decoders agree essentially exactly, so the other
residuals are **added content**, not codec mismatch.
`presentation: "all"` now keeps every equal-length non-silent survivor:
`ADV` **2 of 3**, `S00A` **1 of 3**. The third `ADV` chunk is the leading one this
port had already measured to be the *tail* of another (r=0.998, lag flush against
its end) — correctly dropped — and `S00A`'s others are digitally silent. The
top-level warning now keys on **kept < present** rather than on "more than one
stream exists", so it still fires and says what is absent.
### 🔴 A unity sum was tried and `check` refused it
First attempt summed at unity, on the precedent of `stems: "sum"` for a BGM bank.
`ADV` came out at **+2.62 dBFS**, over the +1.0 bound, and the validator rejected
the tree.
It was right, and the precedent did not transfer. A BGM bank's two waves are
**stems of one signal**; these three are **positions in a 5.1 field**. A stereo
downmix weights them 0.4142, 0.2929 and 0.2929 — which **sum to one whatever the
assignment**. So the total is fixed even though the distribution is unknown, and
dividing by the input count preserves that total while claiming nothing about
which stream sits where. `ADV` now lands at **3.1 dBFS**.
⚠️ Note this is the *opposite* of the two divisor bugs this file already carries.
Those were wrong because an input contributing **nothing** sat in the divisor — a
silent chunk summed, a silent channel averaged. Here every input carries signal
and the weights genuinely sum to one. "Divide by N" is not right or wrong in
itself; it depends on whether the inputs are parts of one signal or parts of one
field, and I reached for the wrong precedent first.
### What is still not claimed
⚠️ **Which stream sits at which position is not determined** — their assignment is
by position, not content — so the port builds no 5.1 and applies no positional
downmix. ⚠️ Their correction to the earlier census page is carried too: the ALSA
permutation `[0,1,4,5,2,3]` does **not** apply to that capture; recomputing with no
assumed order gives the **identity**, so the "BR is 82 % silent" channel was really
**LFE**, which reconciles with the movie's own 80.64 % silent LFE. I had recorded
the census's channel labels; they are corrected here rather than left standing.
Every asserting check passes.