notes: run-canary is silent TWICE over, and the 6-channel stream is a red herring

Completes an entry committed an hour ago that was incomplete, which is worse
than absent because it looked authoritative. Fixing SDL_AUDIODRIVER alone still
records silence: run-canary also passes --mute=true on its own command line
(line 98). With the driver fixed and the mute left alone, Canary attaches a
healthy 6-channel stream, holds it at 100 percent volume, reports Corked: no,
and emits nothing. Both layers have to go, and "$@" is last so --mute=false on
the caller s side wins.

Also records that parec defaults to stereo/44.1 kHz and will resample a
6-channel monitor without saying so -- the first successful-looking capture came
back 2ch 44100 from a 6ch sink.

And a red herring I nearly published as a finding. pactl shows Canary s stream
as float32le 6ch 48000Hz with a full 5.1 channel map, which reads as the guest
requesting 5.1 and would have been strong support for the hypothesis that a
voice cue s three streams are 5.1 channel pairs. It is not evidence about the
game at all: AudioDriver::kFrameChannelsDefault is a hardcoded 6, and the code
path actually used, SDLAudioSystem::CreateDriver(index, semaphore, &driver),
constructs SDLAudioDriver(semaphore) taking every default. The format is
Xenia s; only the content of those six channels is the guest s.

That is the same failure this corpus recorded in METHOD earlier today -- the
specific observation and the general rule reading identically -- caught this
time before it was written down rather than after.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsEPXWVaEpyfudtR6re1Pd
This commit is contained in:
sylph-decoder
2026-08-29 15:56:24 +00:00
parent cb612a82ff
commit 68aa19283d

View File

@@ -40,7 +40,7 @@ python3 tools/re-capture/gmem.py find hex:820af844 400
```
* **One emulator at a time.** `run-canary` enforces it with a lockfile.
* 🔴 **`run-canary` is SILENT by default, and that defeats `audio-capture`.**
* 🔴 **`run-canary` is SILENT TWICE OVER, and that defeats `audio-capture`.**
Line 82 is `export SDL_AUDIODRIVER="${SDL_AUDIODRIVER:-dummy}"`, and its
header explains why: `--apu=nop` stalls the guest in the intro movie, so the
SDL driver against a *dummy* device is what lets the title advance. The
@@ -50,11 +50,29 @@ python3 tools/re-capture/gmem.py find hex:820af844 400
length, with a perfectly healthy-looking run behind it. To actually record the
game:
⚠️ **And that is only the first of TWO layers.** `run-canary` also passes
**`--mute=true`** on its own command line (line 98). With the driver fixed and
the mute left alone, Canary attaches a healthy 6-channel stream to the sink,
holds it at 100 % volume for the whole run — and emits silence. Both have to go:
```bash
audio-capture start # or load a null sink yourself
PULSE_SINK=cap SDL_AUDIODRIVER=pulseaudio run-canary …
PULSE_SINK=cap SDL_AUDIODRIVER=pulseaudio \
run-canary --mute=false … # `"$@"` is last, so this wins
```
Record at the monitor's real format, too — `parec` defaults to stereo/44.1 kHz
and will silently resample a 6-channel monitor:
`parec -d cap.monitor --channels=6 --rate=48000 --format=s16le`.
⚠️ **Do not read Canary's 6-channel PulseAudio stream as evidence the GAME is
5.1.** `pactl` will show `float32le 6ch 48000Hz`, channel-mapped to a full 5.1
layout, on any title. That is `AudioDriver::kFrameChannelsDefault = 6`, a
hardcoded constant — the code path actually used
(`SDLAudioSystem::CreateDriver(index, semaphore, &driver)`) constructs
`SDLAudioDriver(semaphore)` and takes every default. The *format* is Xenia's;
only the *content* of those six channels is the guest's.
⚠️ **Check `pactl list sink-inputs` before trusting a recording.** If it is
empty, Canary never attached and you are recording zeroes; the sink also sits
at `IDLE`. `audio-capture run` warns on a `-inf` peak afterwards, which is the