Multiband Compressor — v3.2 User Guide
Three-band dynamics processing with a complementary crossover split, calibrated absolute RMS thresholds, stereo-linked envelope compression, per-band makeup gain, solo monitoring, and optional final peak normalization.
What this does
Multiband Compressor v3.2 separates one selected Sound into LOW, MID and HIGH components, compresses each component independently, and then recombines the processed bands. Each band has its own RMS threshold, compression ratio and makeup gain; Attack and Release are shared across the three bands.
The crossover split is complementary before dynamics processing: LOW and HIGH are obtained with Praat Hann-band filters, while MID is calculated as original - LOW - HIGH. Therefore the three unprocessed bands sum exactly back to the source sample values. Once the bands receive different gain envelopes and makeup gains, their sum is intentionally no longer identical to the source.
Quick start
- Select exactly one Sound object in Praat.
- Run
Multiband_Compressor.praat. - Choose Custom or one of the seven named presets.
- For Custom, set the two crossover frequencies and the LOW/MID/HIGH RMS threshold, ratio and makeup values.
- Set global Attack_ms and Release_ms. Optionally enable final peak normalization or solo one band.
- Run the script. Full-mix output is named
<source>_multiband; solo outputs use_LOW_solo,_MID_soloor_HIGH_solo.
Presets
Named presets override the crossover and per-band threshold/ratio/makeup values. The global Attack, Release, peak-normalize, Solo, Visualize and Play settings remain those chosen in the form.
| Preset | Crossovers | LOW | MID | HIGH |
|---|---|---|---|---|
| Master Bus (gentle glue) | 150 / 3000 Hz | -18 dBFS · 2:1 · +1 dB | -16 dBFS · 1.5:1 · 0 dB | -14 dBFS · 2:1 · +1 dB |
| Vocal Polish | 200 / 4000 Hz | -24 dBFS · 4:1 · -2 dB | -18 dBFS · 2.5:1 · +2 dB | -20 dBFS · 2:1 · +1 dB |
| Bass Control | 120 / 2500 Hz | -15 dBFS · 6:1 · +3 dB | -20 dBFS · 1.5:1 · 0 dB | -18 dBFS · 1.5:1 · 0 dB |
| Brighten & Punch | 200 / 3500 Hz | -18 dBFS · 3:1 · +2 dB | -20 dBFS · 2:1 · 0 dB | -12 dBFS · 2.5:1 · +3 dB |
| De-Harsh | 250 / 2500 Hz | -20 dBFS · 1.5:1 · 0 dB | -16 dBFS · 3:1 · -1 dB | -10 dBFS · 4:1 · -2 dB |
| Dense Broadcast Style | 150 / 3000 Hz | -20 dBFS · 4:1 · +2 dB | -18 dBFS · 3:1 · +2 dB | -16 dBFS · 3:1 · +1 dB |
| Lo-Fi Crush | 300 / 2000 Hz | -25 dBFS · 8:1 · +4 dB | -22 dBFS · 6:1 · +3 dB | -20 dBFS · 10:1 · +2 dB |
Complementary three-band split
Band construction
LOW = Filter (pass Hann band): 0, Low_mid_crossover_Hz, 100
HIGH = Filter (pass Hann band): Mid_high_crossover_Hz, 0, 100
MID = original - LOW - HIGH
The Hann filters use a 100 Hz smoothing width. The MID residual is computed sample-by-sample from the original Sound, so before compression:
Validation requires Low_mid_crossover_Hz < Mid_high_crossover_Hz, LOW-MID at least 20 Hz, and MID-HIGH below Nyquist - 100 Hz.
Compression engine
Absolute RMS detector
Dynamic bands are analysed with Praat Intensity. The detector hop is 1 ms (gate_sr = 1000). Praat Intensity values are converted to the script's absolute dBFS calibration by:
The intensity pitch floor is chosen dynamically as max(100, ceil(9.6 / duration)) Hz. This allows the script to process files down to its validated minimum duration of 5 ms rather than using one fixed analysis floor for every input.
Static compression law
A ratio of 1:1 with 0 dB makeup is a transparent bypass for that band. A ratio of 1:1 with non-zero makeup applies only the static makeup gain and skips envelope analysis.
Attack and release
The target gain is smoothed at the 1 kHz control rate. Gain moving downward uses the Attack coefficient; recovery toward unity uses Release:
Because the control grid is 1 ms, entered times are quantized to integer control samples and cannot become shorter than one control sample. For example, values below about 1 ms still use a one-sample coefficient.
Resampling and channel linking
The mono gain envelope is resampled to the source sampling rate with Praat's quality-50 resampler, clamped to 0…1 against interpolation overshoot, and then applied identically to every channel of the band. This makes dynamics processing channel-linked: stereo or multichannel image changes are not driven by independent gain envelopes.
Makeup gain is applied after the gain-reduction envelope.
Parameters & defaults
| Parameter | Default | Meaning / validation |
|---|---|---|
| Preset | Custom | Custom or seven named recipes. |
| Low_mid_crossover_Hz | 200 Hz | Must be ≥20 Hz and strictly below Mid_high. |
| Mid_high_crossover_Hz | 2000 Hz | Must be strictly below Nyquist − 100 Hz. |
| Low_RMS_threshold_dBFS | -20 dBFS | Absolute RMS threshold for LOW. |
| Mid_RMS_threshold_dBFS | -18 dBFS | Absolute RMS threshold for MID. |
| High_RMS_threshold_dBFS | -15 dBFS | Absolute RMS threshold for HIGH. |
| Low_ratio | 2.0:1 | Must be ≥1. |
| Mid_ratio | 2.0:1 | Must be ≥1. |
| High_ratio | 3.0:1 | Must be ≥1. |
| Low / Mid / High makeup_dB | 0 / 0 / 0 dB | Static gain after compression; may be positive or negative. |
| Attack_ms | 10 ms | Positive value; implemented on the 1 ms control grid. |
| Release_ms | 100 ms | Positive value; implemented on the 1 ms control grid. |
| Peak_normalize_output | Off | If enabled, Praat Scale peak: 0.95 is applied to the final full-mix or solo result. |
| Solo | Off (full mix) | Off, LOW, MID or HIGH. |
| Visualize | On | Draws the AudioTools diagnostic page. |
| Play | On | Plays the selected result after processing. |
Output, normalization and solo monitoring
v3.2 always creates the rendered Sound as a copy of the original source container and writes the processed samples into that copy. This is deliberate: the output inherits the source sample grid, sampling frequency, channel count and xmin/xmax time domain rather than relying on metadata from one filtered band.
| Solo setting | Output name | Samples written |
|---|---|---|
| Off | <source>_multiband | LOW + MID + HIGH after their separate compression/makeup stages. |
| Solo LOW | <source>_LOW_solo | Processed LOW band only. |
| Solo MID | <source>_MID_solo | Processed MID band only. |
| Solo HIGH | <source>_HIGH_solo | Processed HIGH band only. |
Peak_normalize_output is optional and Off by default. If enabled, the selected result is scaled so its sample/interpolated peak reaches 0.95. This is a full peak normalization operation, not merely a clip-prevention ceiling, so it can also raise a quiet result.
Scale peak: 0.95 directly when peak normalization is enabled; it does not first test for an all-silent result.After processing, the script measures an Interpolated Peak using Sinc70 and an RMS level. If the interpolated peak exceeds 0 dBFS it reports a clipping warning. This value is not presented as a standards-compliant true-peak measurement.
Visualization
When Visualize is enabled, v3.2 draws an AudioTools-style diagnostic page containing:
- Input waveform.
- Processed LOW waveform.
- Processed MID waveform.
- Processed HIGH waveform.
- Final full-mix or solo Output waveform.
- A summary strip with crossovers, ratios, absolute RMS thresholds, attack/release, makeup values, solo state, output interpolated peak, RMS level and peak-normalize state.
Implementation notes and limitations
- Minimum input duration: 5 ms. Shorter sounds are rejected.
- Absolute thresholds: compression depends on calibrated band RMS dBFS, so changing the overall input gain changes how much material crosses each threshold.
- Complementary split versus processed sum: perfect reconstruction applies to the band decomposition before independent dynamics and makeup.
- Channel linking: one gain envelope is applied across all channels in each band.
- Control-rate timing: attack and release are quantized to the 1 kHz gain-control grid.
- Final peak normalization: optional and disabled by default; when enabled it targets 0.95 regardless of the level before normalization.
- Output time base: v3.2 explicitly preserves source sampling frequency, duration, channel count and start/end times.