Skip to content

Slice 20 — Loudness normalization + per-clip gain overrides#51

Merged
cbaucom merged 1 commit into
mainfrom
feat/47-loudness-normalization
Jun 22, 2026
Merged

Slice 20 — Loudness normalization + per-clip gain overrides#51
cbaucom merged 1 commit into
mainfrom
feat/47-loudness-normalization

Conversation

@cbaucom

@cbaucom cbaucom commented Jun 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • New audio-analysis module: RMS-based normalization to -18 dBFS with peak limiting.
  • loudnessCache in slideshow.json (filename + byteLength) avoids re-analysis when file unchanged.
  • resolveEffectiveGainDb: manual clip gainDb overrides cached auto offset in playback/export.
  • SoundtrackPanel: per-clip dB input with reset to auto.

Test plan

  • pnpm test — 244 tests pass
  • pnpm lint && pnpm build
  • Add 2 tracks with different recorded levels → playlist plays at similar perceived volume
  • Set manual dB on a clip → overrides auto; reset (↺) restores normalization
  • Reopen project → loudnessCache preserved, no re-analysis

Closes #47

Made with Cursor

Analyze audio RMS to -18 dBFS target, cache offsets in loudnessCache, and apply effective gain in playback while manual clip gainDb overrides auto normalization.

Closes #47

Co-authored-by: Cursor <cursoragent@cursor.com>
@netlify

netlify Bot commented Jun 22, 2026

Copy link
Copy Markdown

Deploy Preview for foldershow ready!

Name Link
🔨 Latest commit b62964b
🔍 Latest deploy log https://app.netlify.com/projects/foldershow/deploys/6a394247c1fe860008f39649
😎 Deploy Preview https://deploy-preview-51--foldershow.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@cbaucom
cbaucom merged commit 4665be7 into main Jun 22, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Slice 20 — Loudness normalization + per-clip gain overrides

1 participant