Skip to content

fix(loudness): crossfade the ad bed's loop join - #859

Merged
genwave-radio merged 2 commits into
mainfrom
fix/bed-loop-seam-855
Sep 25, 2026
Merged

genwave-radio merged 2 commits into
mainfrom
fix/bed-loop-seam-855

Conversation

@genwave-radio

Copy link
Copy Markdown
Collaborator

Closes #855

🐛 What

Short background music under an ad no longer stutters where it repeats. Instead of a hard splice (aloop), the music is laid out as overlapping copies with a 0.5 s equal-power fade at each join. A clip long enough for the whole ad isn't split at all.

✅ Proof

  • Full solution green (Category!=Integration), plus the 9 new/updated BedLoopJoinIsCrossfaded facts including two real-ffmpeg ones.
  • Old splice: 0.566 max sample jump at the join. New: 0.00006.
  • Join level holds: 0 dB vs mid-clip (a no-overlap version dips 3 dB and fails).
  • Dev station smoke: a 25.6 s ad over the 17.8 s Tropical clip renders through POST /api/ads/{id}/preview on the container's ffmpeg 6.1.1.

👂 Still owed

Dean's ear check on a re-rendered demo ad (after #854 ships).

aloop spliced a short bed's end straight onto its start, an audible
stutter under most ads (5 of 7 gw-first-beds are under 25 s). The bed
is now laid out as overlapping copies with a 0.5 s equal-power (qsin)
fade at each join (asplit + afade + adelay + amix; acrossfade over
asplit taps corrupts length on ffmpeg 7.1). A bed that already covers
the spot renders with no split at all.
@genwave-radio
genwave-radio merged commit 118d142 into main Sep 25, 2026
12 checks passed
@genwave-radio
genwave-radio deleted the fix/bed-loop-seam-855 branch September 25, 2026 20:19
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ads: the background music stutters where a short clip repeats (aloop has no crossfade)

1 participant