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