From 232ae0fa9c5573876e2fb4625b7455f39f21c4cd Mon Sep 17 00:00:00 2001 From: sylph-decoder Date: Sun, 30 Aug 2026 08:19:03 +0000 Subject: [PATCH] re: ask #4 answered -- the intro is a 5.1 WMAPro bed at 0.600 plus three streams ADV.wmv carries ONE audio stream and it is wmapro 5.1, not XMA. Any framing of the intro's audio as only 'which of three voice streams to ship' was missing the bed. Aligned the 148 s capture against that track (envelope r 0.769 against a median of -0.001, refined to +224 samples, r 0.900) and solved capture = g x movie + residual per channel. The gain is 0.600 on every channel -- a uniform -4.44 dB, a mixer setting rather than a fit artefact. LFE reproduces to -115.73 dBFS, 72 dB down, which is what rules out codec difference as the explanation for the other residuals. FC is the exception: the movie explains NOTHING of it (-0.09 dB), and the movie's own FC is 91.6 % silent. The residual is three signals, not one: a front pair (r 0.918), a rear pair (r 0.929), and a centre whose partner LFE is empty. The FC residual spans 34 dB across 100 ms frames -- bursty, not steady noise. That CONFIRMS the corpus's 5.1 reading, which voice-three-streams-are-concurrent recorded as not established, and it confirms the specific detail it offered: that the mono-in-stereo stream is 'a centre paired with a silent LFE'. Measured from the output with no access to the stream contents. Also corrects my own census page: it labelled channels with the ALSA permutation [0,1,4,5,2,3] from the recipe page, which does NOT apply to this capture. The 6x6 matrix was computed assuming no order, every row's max falls on a distinct movie channel, and the answer is the identity -- so the census's 'BR is 82 % silent' was really LFE, reconciling with the movie's own 80.64 % silent LFE. Reach: one boot, one movie; which XMA context is front/centre/rear is not determined, only that the residual occupies those positions; and whether 0.600 is a fixed constant or a volume setting is unknown. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v --- docs/port/HANDOFF.md | 42 ++++++++ docs/re/data/intro-audio-decomposition.txt | 42 ++++++++ docs/re/structures/intro-audio-decomposed.md | 101 +++++++++++++++++++ 3 files changed, 185 insertions(+) create mode 100644 docs/re/data/intro-audio-decomposition.txt create mode 100644 docs/re/structures/intro-audio-decomposed.md diff --git a/docs/port/HANDOFF.md b/docs/port/HANDOFF.md index 2f8f1c23..da553a86 100644 --- a/docs/port/HANDOFF.md +++ b/docs/port/HANDOFF.md @@ -2529,6 +2529,48 @@ whatever it returns — the same reason a truncated log and a t=0 render both lo fine from inside. Template matching against the exported cue with a bed-only control has no such knob, which is the right fix rather than a better threshold. +## ✅ 2026-08-30 — ask #4 ANSWERED: ship the movie's own 5.1 track **and** the three streams + +**You need both.** `ADV.wmv` carries **one** audio stream and it is **WMA Pro 5.1** +— not XMA at all. The intro's output is that track at a uniform gain of **0.600**, +**plus** the three concurrent streams mixed over it in 5.1. + +Solving `capture = 0.600 × movie + residual` per channel: + +| | LFE | FC | FL/FR | BL/BR | +|---|---|---|---|---| +| residual below capture | **−72 dB** (exact) | **−0.09 dB** (movie explains nothing) | −7 to −9 dB | −10 to −11 dB | + +**LFE reproduces to −115.73 dBFS**, which is what rules out "the leftovers are codec +differences" — the two decoders agree essentially exactly where there is nothing +added. **FC is where the addition lives.** + +✅ **And the residual is three signals, which confirms the 5.1 reading you were told +was unestablished**: a front pair (r 0.918), a rear pair (r 0.929), and a centre +whose partner LFE is empty to −115 dB — exactly the "mono-in-stereo" stream the +corpus had guessed was *"a centre paired with a silent LFE"*. + +| XMA stream | lands in | +|---|---| +| one | FL, FR | +| one | **FC**, LFE silent | +| one | BL, BR | + +**You can move the mapping now**, and thank you for not moving it before. + +🔴 **A correction that affects the page you already read.** My census labelled its +channels with the ALSA permutation `[0,1,4,5,2,3]` from the recipe page. **It does +not apply to this capture** — the measured map is the identity. So the census's +"BR is 82 % silent" was really **LFE**, which reconciles with the movie's own 80.64 % +silent LFE. Measure channel order per capture; a 6×6 matrix that comes out a clean +permutation is its own control. + +⚠️ Reach: one boot, one movie. **Which** of the three XMA contexts is front, centre +or rear is *not* determined — the assignment above is by position. And whether 0.600 +is a fixed mix constant or a volume setting is unknown. +[`intro-audio-decomposed.md`](../re/structures/intro-audio-decomposed.md) · +[numbers](../re/data/intro-audio-decomposition.txt) + ## 🟡 2026-08-30 — your ask #4: the intro IS recorded, and the output is NOT stereo **Groundwork, not the answer.** I have the game's own audio over the boot intro — diff --git a/docs/re/data/intro-audio-decomposition.txt b/docs/re/data/intro-audio-decomposition.txt new file mode 100644 index 00000000..a5177e07 --- /dev/null +++ b/docs/re/data/intro-audio-decomposition.txt @@ -0,0 +1,42 @@ +# What the game emits over the boot intro, decomposed against the movie's own track. +# +# 2026-08-30. Capture: docs/re/structures/intro-audio-output-census.md +# Reference: ffmpeg -i /disc/dat/movie/ADV.wmv -map 0:a:0 -f f32le -ar 48000 -ac 6 +# +# ADV.wmv carries ONE audio stream: wmapro, 48000 Hz, 5.1, 384 kb/s. Not XMA. +# +# ALIGNMENT (energy envelope, 100 Hz, summed over channels = permutation-invariant) +# movie begins +6.63 s into the capture; envelope r = 0.7692 +# control: peak 0.7692, 99.9th pct 0.6241, median -0.0009 +# refined by sample-level correlation to +224 samples, r = 0.900 +# +# CHANNEL MAP -- measured, not assumed. Every row's max is a distinct movie +# channel, i.e. a genuine permutation, and it is the IDENTITY: +# cap ch0->FL +0.899 ch1->FR +0.935 ch2->FC +0.185 +# cap ch3->LFE +1.000 ch4->BL +0.960 ch5->BR +0.971 +# 🔴 The ALSA order [0,1,4,5,2,3] documented in audio-capture-alsa-file-tee.md +# does NOT apply to this capture. See the doc for what that corrected. +# +# DECOMPOSITION capture = 0.600 x movie + residual (80 s from movie t=20 s) +# ch gain r cap rms resid rms resid/cap +# FL 0.600 +0.905 -21.86 -29.28 -7.43 dB +# FR 0.600 +0.935 -20.28 -29.29 -9.02 dB +# FC 0.597 +0.146 -25.18 -25.27 -0.09 dB <- movie explains NOTHING +# LFE 0.600 +1.000 -43.66 -115.73 -72.06 dB <- exact to precision +# BL 0.600 +0.956 -24.89 -35.46 -10.58 dB +# BR 0.600 +0.964 -24.02 -35.49 -11.47 dB +# +# RESIDUAL STRUCTURE -- residual vs residual correlation +# FL FR FC LFE BL BR +# FL +1.000 +0.918 +0.017 +0.001 +0.009 +0.004 +# FR +0.918 +1.000 +0.034 +0.001 +0.015 +0.014 +# FC +0.017 +0.034 +1.000 +0.000 +0.385 +0.378 +# LFE +0.001 +0.001 +0.000 +1.000 +0.000 -0.000 +# BL +0.009 +0.015 +0.385 +0.000 +1.000 +0.929 +# BR +0.004 +0.014 +0.378 -0.000 +0.929 +1.000 +# +# Three coherent groups: a FRONT pair (0.918), a REAR pair (0.929), and a +# CENTRE whose partner LFE is empty. That is three stereo streams in 5.1. +# +# FC residual 100 ms frame levels: median -53.9 dB, p90 -19.9 dB, +# dynamic range 34.0 dB -- bursty, not steady noise. diff --git a/docs/re/structures/intro-audio-decomposed.md b/docs/re/structures/intro-audio-decomposed.md new file mode 100644 index 00000000..bea0a690 --- /dev/null +++ b/docs/re/structures/intro-audio-decomposed.md @@ -0,0 +1,101 @@ +# ✅ The boot intro's audio: the movie's own 5.1 bed at 0.600, **plus** three streams in 5.1 + +**Classification: measured.** Xenia Canary, 2026-08-30, one boot, no input. This +settles the port's ask #4 and **confirms** the corpus's leading hypothesis from the +output side, where it had been recorded as "not established". + +## 🔴 First: `ADV.wmv` is not three XMA streams. It is one WMA Pro 5.1 track. + +``` +ffprobe /disc/dat/movie/ADV.wmv + Stream #0:0(jpn): Audio: wmapro, 48000 Hz, 5.1, fltp, 384 kb/s + Stream #0:1(jpn): Video: wmv3, 1280x720, 30 fps +``` + +One audio stream, **5.1**, decoded by Xenia's WMA path — not the XMA path the three +probe contexts come from. Any framing of the intro's audio as *only* "which of three +voice streams to ship" was missing the bed entirely. + +## The decomposition + +Aligning the [148 s capture](intro-audio-output-census.md) against that track and +solving `capture = g × movie + residual` +([`../data/intro-audio-decomposition.txt`](../data/intro-audio-decomposition.txt)): + +| ch | gain | r | capture rms | residual rms | residual/capture | +|---|---|---|---|---|---| +| FL | 0.600 | +0.905 | −21.86 | −29.28 | −7.43 dB | +| FR | 0.600 | +0.935 | −20.28 | −29.29 | −9.02 dB | +| **FC** | 0.597 | +0.146 | −25.18 | −25.27 | **−0.09 dB** | +| **LFE** | 0.600 | **+1.000** | −43.66 | **−115.73** | **−72.06 dB** | +| BL | 0.600 | +0.956 | −24.89 | −35.46 | −10.58 dB | +| BR | 0.600 | +0.964 | −24.02 | −35.49 | −11.47 dB | + +**The gain is 0.600 on every channel** — a uniform −4.44 dB, which is a mixer +setting, not a fit artefact. **LFE is reproduced to −115.73 dBFS**, 72 dB below the +signal: at that residual the two decoders agree essentially exactly, which is what +rules out "the leftovers are just codec differences". + +🔴 **And `FC` is the exception that carries the answer.** The movie explains +**nothing** of the capture's centre channel — the residual is the whole signal +(−0.09 dB). The movie's own FC is 91.6 % silent; the capture's is not. + +## The residual is three signals, not one + +| | FL | FR | FC | LFE | BL | BR | +|---|---|---|---|---|---|---| +| FL | 1.000 | **0.918** | 0.017 | 0.001 | 0.009 | 0.004 | +| FR | **0.918** | 1.000 | 0.034 | 0.001 | 0.015 | 0.014 | +| FC | 0.017 | 0.034 | 1.000 | 0.000 | 0.385 | 0.378 | +| LFE | 0.001 | 0.001 | 0.000 | 1.000 | 0.000 | −0.000 | +| BL | 0.009 | 0.015 | 0.385 | 0.000 | 1.000 | **0.929** | +| BR | 0.004 | 0.014 | 0.378 | −0.000 | **0.929** | 1.000 | + +Three coherent groups: a **front pair** (0.918), a **rear pair** (0.929), and a +**centre** whose partner LFE is empty. The FC residual's 100 ms frame levels span +**34 dB** (median −53.9, p90 −19.9) — bursty, not steady noise. + +## ✅ This confirms the 5.1 hypothesis, and predicts the silent channel correctly + +[`voice-three-streams-are-concurrent.md`](voice-three-streams-are-concurrent.md) +recorded "three concurrent stereo streams is six channels" as the obvious reading +and marked it **not established**, with a specific piece of supporting detail: that +`ADV` stream 2 is **mono-in-stereo**, *"a centre paired with a silent LFE looks +exactly like that"*. + +That is exactly what the residual shows — a live centre whose paired channel is +empty to −115 dB. Measured from the output, with no access to the stream contents: + +| XMA stream | lands in | +|---|---| +| one | **FL, FR** | +| one | **FC**, LFE silent | +| one | **BL, BR** | + +**So both things are true and the port needs both**: the movie's own 5.1 WMA Pro +track *and* the three streams mixed over it in 5.1. + +## 🔴 Correction to the census page, and to the recipe page's channel order + +[`intro-audio-output-census.md`](intro-audio-output-census.md) labelled its channels +using the permutation `[0,1,4,5,2,3]` that +[`audio-capture-alsa-file-tee.md`](../audio-capture-alsa-file-tee.md) records for +ALSA. **That permutation does not apply to this capture.** The 6×6 correlation +matrix was computed without assuming any order, every row's maximum falls on a +distinct movie channel, and the result is the **identity**. + +So the census's *"BR is 82 % silent"* was really **LFE** — which also reconciles it +with the movie, whose LFE is 80.64 % silent. ⚠️ The recipe page's permutation was +measured on a different chain and is not wrong there; what is wrong is assuming it +travels. **Measure the channel order per capture; a 6×6 matrix that comes out a +clean permutation is its own control.** + +## Reach + +⚠️ **One boot, one movie.** `ADV` only. +⚠️ **The stream→channel assignment is by position, not by content.** Which of the +three XMA contexts is the front, centre or rear stream is *not* determined here — +that needs the streams decoded and correlated individually, which was not done. +⚠️ `--gpu=null`, so no video cross-check. +✅ The 0.600 gain is measured on this run; whether it is a fixed mix constant or a +volume setting is not established.