-
feat(postprod): a rest is not a gap — pad_end_s, and the close goes to MORE · 271e07c0
Two ear calls on the OPAL-26 record, one of which needed a new concept. PLN, having heard the CRIME->REVOLUTION seam: "approved #13 seam, but lets add after seam 2s silence in crime file, then seam is start of [the] revolution." And on the closing echo, after living with it: "allez lets use the B version, the more option" — so the ship-preset moves subtle -> more. The silence is the interesting half. The pipeline knew two kinds of answer: `verified` boundaries (move one, both neighbours shift) and `edits` trims (audio is DROPPED, a gap opens, the continuous mix skips it). A rest is neither — it ADDS time. So `pad_end_s` is a third kind, and where it lives is the whole decision: the 2s belongs to CRIME, so it ships inside track 13's file AND at the same place in the continuous mix, and REVOLUTION still begins on its first sample in both forms. Had it been modelled as a gap between tracks it would have existed only in the mix and track 13 would have ended on the hard cut. Implemented with `apad` — the same filter whose one-second-per-second literalism was a BUG two commits ago, where it was misused as reverb headroom and shipped ~2.3s of trailing zeros. Here that literalism is exactly the feature: 2.0 in, 2.0000s out. Silence as an accident of a misunderstood filter is a defect; silence a listener asked for is a rest. Same filter, opposite verdict, and the comment now says so where the next reader will hit it. Ordering matters and is documented: the pad runs LAST, after the fades and after any reverb ring. Padding first would hand the fade silence to act on, and the fade's own start is measured from the un-padded duration. In the reverb graph it attaches after the dry/wet concat, not inside either branch. `expected_dur` now predicts pad + aecho's longest tap, so `verify` still compares against INTENT rather than against whatever came out — the property that caught the apad bug in the first place. `stage_continuous` prints rests separately from gaps, because lumping them together is the exact confusion this commit exists to prevent. Validated, all measured not assumed: - verify ALL OK, 14 tracks x 2 variants, 48000/24 - #13 271.050s = 269.05 + 2.00; #14 205.550s = 204.90 + 0.65 (more's 650ms top tap — subtle's was 240ms, so the duration alone proves which shipped) - sample-exact: the last 2.0000s of CRIME are all zeros and the last non-zero sample sits precisely on the 2.000s mark - continuous 4361.35s both variants, OK against intent - the rebuilt seam-13 audition clip carries 2.0000s of silence ending exactly at the 20.00s seam marker: the rest is CRIME's, the marker is REVOLUTION's first sample Kept deliberately: the 1s duck to 50% stays alongside the new rest. They answer different complaints — the duck softens the cut, the rest separates the encore.PLN (Algolia) authored271e07c0
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| api | Loading commit data... | |
| escales | Loading commit data... | |
| manifeste | Loading commit data... | |
| semaphore | Loading commit data... | |
| tasks | Loading commit data... | |
| tide-table | Loading commit data... | |
| ui | Loading commit data... | |
| .gitignore | Loading commit data... | |
| DESIGN.md | Loading commit data... | |
| PRODUCT.md | Loading commit data... | |
| README.md | Loading commit data... | |
| ardour_faders.json | Loading commit data... | |
| serve.py | Loading commit data... | |
| setlist_opal2026.txt | Loading commit data... |