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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user