From 68aa19283d3d5cca4a64405106bea521a0885137 Mon Sep 17 00:00:00 2001 From: sylph-decoder Date: Sat, 29 Aug 2026 15:56:24 +0000 Subject: [PATCH] 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) Claude-Session: https://claude.ai/code/session_01QsEPXWVaEpyfudtR6re1Pd --- docs/agents/CONTAINER-NOTES.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/agents/CONTAINER-NOTES.md b/docs/agents/CONTAINER-NOTES.md index 88350961..3d933ae0 100644 --- a/docs/agents/CONTAINER-NOTES.md +++ b/docs/agents/CONTAINER-NOTES.md @@ -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