Files
Sylpheed/docs/re/structures/intro-audio-output-census.md
sylph-decoder 83a8a955c6 re: the boot intro's audio output -- five live channels, not a stereo mix
Groundwork for the port's ask #4; it does not settle #4.

Captured the game's own output over the boot intro following the ALSA file-tee
recipe exactly -- paced pulse slave, --gpu=null, both mutes off. 148.02 s, 6ch
float32 48 kHz, 0.15-0.16 % silence against the 0.31 % the recipe page records
for its own clean run.

Provenance is the XMA probe rather than a screenshot, which is the right evidence
for an audio question: ADV's three contexts appear byte-exact (1294336 /
1118208 / 1171456), then the documented BGM_102 pair.

Five of the six channels carry distinct content; BR is 82 % silent and 11-15 dB
down. No channel is a copy of another -- the largest pairwise correlation is 0.70
between FL and FR.

That rules out a stereo mix, so 'ship one stream' cannot be right and the port's
held-wrong value stays wrong. It does NOT establish that summing is right, and
the 6-channel count is Xenia's hardcoded kFrameChannelsDefault -- what is
evidence is that five of them differ, which a stereo guest cannot produce.

NOT settled and named as such: the stream-to-channel mapping. The
cross-correlation of each captured channel against each decoded ADV stream has
not been run. One boot, one movie, and --gpu=null means no video cross-check.

Raw is 170 MB and is not committed; sent over share to the port.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
2026-08-30 08:13:50 +00:00

94 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# What the game actually emits over the boot intro — five live channels, not a stereo mix
**Classification: measured.** Xenia Canary, 2026-08-30, one boot, no input.
Groundwork for the port's ask #4**it does not settle #4**, and the part it does
not settle is named at the bottom.
## Why this capture exists
The port ships one of `ADV`'s three concurrent voice streams and its
`authored/audio.json` records that as **known wrong, held deliberately**
([`voice-three-streams-are-concurrent.md`](voice-three-streams-are-concurrent.md)).
Neither "take one" nor "sum them" is established. The only thing that can settle it
is what the game emits, so: record it.
## The capture
Recipe followed exactly from
[`audio-capture-alsa-file-tee.md`](../audio-capture-alsa-file-tee.md) — ALSA `file`
tee in front of a **paced** pulse slave, `--gpu=null`, both mutes off:
```
run-canary --apu=alsa --mute=false --gpu=null --xma_param_probe=true
```
**148.02 s, 6 channels, float32, 48 kHz.**
**Provenance is the XMA probe, not a screenshot** — which is the right evidence
for an audio question, because it witnesses the thing being recorded. The log
carries `ADV`'s three contexts **byte-exact** against the disc:
| ctx | packets | `byte_size` |
|---|---|---|
| 0 | 632 | 1 294 336 |
| 1 | 546 | 1 118 208 |
| 2 | 572 | 1 171 456 |
then two more — 1 150 976 / 1 269 760 — which are the documented `BGM_102` pair.
So the movie's voice decoded exactly as in the runs this corpus already records.
**Capture quality: 0.150.16 % silence** on the five live channels, against the
**0.31 %** the recipe page records for its own clean run. Cleaner than the reference.
## What is in the six channels
⚠️ ALSA's channel order, not WAV's: captured *i* holds source `[0,1,4,5,2,3]`, so
the labels below are `FL FR BL BR FC LFE`. Deterministic and invertible.
| ch | | peak dBFS | rms dBFS | % silent |
|---|---|---|---|---|
| 0 | FL | 3.65 | 22.26 | 0.16 |
| 1 | FR | 2.22 | 20.89 | 0.15 |
| 2 | BL | 4.41 | 24.77 | 0.15 |
| **3** | **BR** | **11.65** | **36.06** | **82.18** |
| 4 | FC | 4.57 | 24.81 | 0.16 |
| 5 | LFE | 4.66 | 24.38 | 0.16 |
**Five channels carry real, distinct content; one (BR) is 82 % silent and 1115 dB
down.** No channel is a copy of another — the largest pairwise correlation is 0.70
(FL/FR, which is what a stereo pair looks like), then 0.52 and 0.56.
### 🔴 What this already rules out
* **Not a stereo mix.** Five independent channels are being emitted.
* **So "ship one stream" cannot be right**, which the corpus already suspected but
had not observed from the output side. The port's held-wrong value stays wrong.
⚠️ **It does not follow that summing is right.** This says the *output* is
multichannel; it says nothing yet about which disc stream lands where.
⚠️ **And do not read the 6 channels as proof the game is 5.1.** `CONTAINER-NOTES`
records that `AudioDriver::kFrameChannelsDefault = 6` is a hardcoded Xenia
constant — the *format* is Xenia's, only the *content* is the guest's. What is
evidence here is that five of those six differ from each other, which a stereo
guest cannot produce.
## 🟡 What is NOT settled — the stream → channel mapping
The decisive step is a cross-correlation of each captured channel against each of
`ADV`'s three decoded streams. **That has not been run.** Until it is:
* which stream feeds which channel pair is unknown;
* whether `FC` carries the dialogue is **consistent with** the corpus's
[centre-channel finding](../structures/voice-centre-channel.md) but not
re-established here;
* why `BR` is near-silent is unknown — a genuinely unused channel, a stream that
ends early, or a decode that failed are all open.
⚠️ **One boot, one movie.** And `--gpu=null` means no video, so nothing here is
cross-checked against what was on screen.
The raw capture is 170 MB and is **not committed**; it went over `share` to the
port as `1788077587-9f2e30af1c98-capture.raw`. Per-channel numbers:
[`../data/intro-audio-channel-census.txt`](../data/intro-audio-channel-census.txt).