notes: point the container page at the working audio-capture route

The entry already warned that run-canary is silent twice over, but stopped
there -- and fixing only the mutes still yields an unfaithful capture, because a
PulseAudio null sink s monitor is wall-clocked and invents silence when the
client is late. Adds the pointer to the ALSA file-tee page, with the two things
a reader needs before starting: the slave must pace or the tee free-runs at about
250x real time, and a size guard is not optional.

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 16:51:14 +00:00
parent 5d3afc526d
commit 7ff56fee3f

View File

@@ -76,6 +76,17 @@ python3 tools/re-capture/gmem.py find hex:820af844 400
and will silently resample a 6-channel monitor:
`parec -d cap.monitor --channels=6 --rate=48000 --format=s16le`.
🔴 **And even with both mutes off, a PulseAudio-monitor capture is not
faithful — use the ALSA tee instead.** A null sink's *monitor* is sampled on a
wall clock and **invents silence** whenever the client is late, so a capture
through it is 39 % holes that the game never emitted. `PULSE_LATENCY_MSEC`
only trades gap count against gap size and never wins.
✅ **The working route is `--apu=alsa` with an ALSA `file` tee in front of a
paced slave** — full recipe, controls and three configuration traps in
[`audio-capture-alsa-file-tee.md`](../re/audio-capture-alsa-file-tee.md).
⚠️ A *bare* file tee free-runs at ~250× real time and wrote **7.3 GB in 50 s**;
the slave must pace. Always run with a size guard.
⚠️ **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