lacma-2026 demo: clean audio concat + drop prompt sim + retime narration
Audio sync fix: switching from `ffmpeg -f concat -c copy` (demuxer
stream-copy, brittle when source sample rates/PTS differ) to the
`concat` filter with full re-encode and explicit aresample on each
input's audio:
[0:a]aresample=48000:async=1,pan=stereo|c0=c0|c1=c0[a0];
[1:a]aresample=48000:async=1[a1];
[v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]
This ensures sample-aligned, PTS-continuous output across the boundary
between demo-viennese and the shutdown strobe. Fixes user-reported
"notepat audio playback still isn't heard in time with the video".
Sequence simplified — prompt-off simulation dropped. On real hardware
prompt.mjs receives "off" to trigger draw_shutdown_anim(); my PIL
prompt sim was a full-screen cream box that didn't reflect the actual
piece and made the flow feel more fake than it needed to. Cleaner to
go boot → notepat → shutdown directly with a byline explaining how
the real trigger works.
New 19.27s video:
0.00 – 3.00 boot greeting (real capture, own TTS)
3.00 – 17.75 notepat playing the Viennese waltz (real capture)
17.75 – 19.27 shutdown strobe (simulated, matches C code exactly)
Narration retimed: cues at 0:06, 0:09, 0:13, 0:16 land squarely on
the instrument section, nothing over the boot (has own TTS) or the
shutdown (will have own TTS + chime once hardware-recaptured).
Caption sequence chip + byline updated to match.
Cachebuster v=4 → v=5.