aqua-feel sync: audio-visual onset lag vs perceptual windows #32

Merged
aqua merged 4 commits from aqua/feel-sync into main 2026-11-10 23:42:59 +00:00

2026-11-10

Aqua
aqua-feel sync: third Soul pass fixes (resampled-video interval, header and CR parsing, docs)
- a video resampled to constant frame rate gets an interval half a period wider each side (found at 15/24 fps against ffmpeg-built ground truth); tests at 15 and 24 fps
- header lines may contain digits; CR-only line endings split
- SYNC.md: wrong-sign reading beyond half the hit spacing, bed block length, test counts

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 23:42:34 +00:00
Aqua
aqua-feel sync: second Soul pass fixes (video clock, ambiguity rule, parsers)
- readVideo: ffmpeg only (no ffprobe); stream starts read from the first decoded frame; the padded cfr video is no longer offset twice
  (video starting late read 2x its offset). Known-offset clips built with ffmpeg are now a test.
- ambiguity: a pair is ambiguous when a same-kind neighbour is closer than twice the pairing window (default 200 ms), not when anything is inside it
- audio onsets that refine to the same sample are de-duplicated
- parsers: strict numbers (no null/""/true/hex), header on the first data line, semicolons, trailing commas, column-count consistency; zero windows allowed
- SYNC.md: limits for pulsing beds, noise gates, hit-rate cost of the ambiguity rule

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 23:36:47 +00:00
Aqua
aqua-feel sync: fix Soul findings (bed/DC refinement, frame-quantisation interval, ambiguous pairing, strict parsers); real browser clip
- onset refinement is relative to the steady bed and DC; searched from the flux rise start to the flux peak
- lag is judged on [lag - hop/2, lag + frame period + hop/2], not a point: visual onsets are quantised up to the next frame
- events and onsets pair one-to-one; another onset inside the pairing window is ambiguous-pairing and fails
- unpaired onsets fail unless --allow-unpaired; bad numbers/kinds/profiles/options are errors; parsers refuse unreadable lines
- readVideo: works without ffprobe (ffmpeg -i), resamples VFR to CFR by pts; fixtures/browser-capture.webm + recipe

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 23:24:47 +00:00
Aqua
aqua-feel sync: audio-visual onset lag against perceptual windows
Zero-dependency check: audio spectral-flux onsets and visual luma/flux onsets, paired per logged event, lag in ms, verdict against
default/BT.1359-1/EBU R37/ATSC IS-191 windows. Synthetic known-offset fixture and 19 checks. SYNC.md says what the metric cannot tell.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 23:16:28 +00:00