port: apply the measured positional weights, keyed by byte size
ADV's three chunks map onto the Decoder's contexts exactly, each a declared byte_size plus the 60-byte RIFF header. authored/audio.json gains voice.stream_weights keyed by SIZE, and the exporter weights only when every kept stream matches, falling back to the divisor otherwise. The key is the check: two weeks ago these same sizes did not fit the region the resolver returned, which is how the 238-packet late start was found. Applied positionally the weights would have gone onto the wrong streams silently. S00A matches nothing and keeps the divisor. ADV mixes at 0.4142/0.2929/0.2929, -2.87. Unlooked-for confirmation: the filter folds chunks 0 and 2 from two live channels and chunk 1 from one, found independently by live_channels, matching their claim that ctx1 is the only stream with a silent channel. Also files an UNEXPLAINED regression: verify-menu-audio's dead-press check now reports DIFFER across three runs, diverging at 0.085 s with different durations. Not diagnosed, not the voice change, and left failing rather than silenced. The check's premise is cross-run bit-determinism, which is what made it strong and also what makes it brittle. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -200,6 +200,46 @@
|
||||
"clean audible dialogue, so nothing in the output reveals that two streams",
|
||||
"are missing. That is why the manifest says it in words on every voice entry",
|
||||
"rather than leaving it to this file."
|
||||
]
|
||||
],
|
||||
"stream_weights": {
|
||||
"_": [
|
||||
"Declared XMA `byte_size` -> the coefficient that stream's position takes in a",
|
||||
"stereo downmix. MEASURED by the RE agent 2026-08-30",
|
||||
"(docs/re/structures/intro-audio-decomposed.md): decomposing the game's own",
|
||||
"6-channel output as capture = 0.600 x movie + residual puts ctx0 at FL/FR,",
|
||||
"ctx1 at FC with LFE silent, and ctx2 at BL/BR.",
|
||||
"",
|
||||
"🔴 KEYED BY BYTE SIZE ON PURPOSE. The assignment is indexed by the decoder's",
|
||||
"own declared size, so the exporter can CHECK that the stream in front of it is",
|
||||
"the one the measurement describes rather than assume it. A region whose chunks",
|
||||
"do not match falls back to the count divisor and says so. That is not defensive",
|
||||
"programming: on 2026-08-30 this table's sizes did NOT fit the region the",
|
||||
"resolver returned, which is what exposed `resolve_movie_voice_region` starting",
|
||||
"238 packets late. Had the weights been applied positionally they would have",
|
||||
"been applied to the wrong streams silently.",
|
||||
"",
|
||||
"⚠️ ONE BOOT, ONE MOVIE. Only `ADV`'s three streams were measured. `S00A`'s",
|
||||
"sizes match nothing here and it keeps the divisor -- extending this by",
|
||||
"POSITION would be assuming the ordering generalises, which is exactly the",
|
||||
"inference the byte-size key exists to avoid.",
|
||||
"",
|
||||
"⚠️ The weights are a stereo downmix's, folded to mono. They sum to 1.0, so the",
|
||||
"total is the movie's own; what they distribute is the balance between three",
|
||||
"positions. Whether the game's 0.600 mixer gain is a constant or a volume",
|
||||
"setting is unknown and the port applies no gain of its own."
|
||||
],
|
||||
"1294336": {
|
||||
"position": "FL/FR",
|
||||
"weight": 0.4142
|
||||
},
|
||||
"1118208": {
|
||||
"position": "FC (LFE silent)",
|
||||
"weight": 0.2929
|
||||
},
|
||||
"1171456": {
|
||||
"position": "BL/BR",
|
||||
"weight": 0.2929
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user