audioJS

@audio/dynamics-leveler

Status pending calibration

npm0.2.1licenseMIT

Gain riding / dialogue leveler — framewise smoothed loudness normalization (dynaudnorm / Vocal Rider class)

Overview

Install
Updated
Family
dynamics, 17 packages under it
Tags
shape

Gain-riding dialogue leveler — framewise loudness normalization (FFmpeg dynaudnorm / Waves Vocal Rider class)

import leveler from '@audio/dynamics-leveler'

Framewise RMS is measured and converted to a gain toward target; frames gate dB under the speech are pauses and hold the speech gain, so the room between phrases stays where it was under the voice. Gains are gaussian-smoothed across frame neighbors, then peak-guarded so no sample is pushed past −0.5 dBFS. Gain is linearly interpolated between frame centers and applied in place. Batch only, non-causal by design — the smoothing looks at frames on both sides of each point, so there is no streaming form.

leveler(data)                                    // target -20 dB, mutates and returns data
leveler(data, { target: -18, frame: 0.3, maxGain: 9, smooth: 3 })
Param Default
fs 44100 Hz
target -20 dB, RMS loudness target
frame 0.5 s, analysis window
maxGain 12 dB, symmetric gain clamp per frame
smooth 5 frames, gaussian smoothing radius
gate 20 dB: frames this far under the speech are pauses and hold the speech gain

Use when: dialogue/podcast loudness riding, evening out a take without pumping.
Not for: real-time/streaming use (no streaming form) — use compressor or compand for causal leveling.


Part of @audio/dynamics — the dynamics family umbrella.

MIT © audiojs