Vintage Glue Compressor — User Guide
Channel-linked RMS-style compression with a standard soft knee, causal attack/release, optional nonlinear saturation, dry/wet mixing, and explicit output-level control.
What this does
Vintage Glue Compressor is a feed-forward dynamics processor with a shared power-based sidechain. The selected Sound is measured at the audio sample rate, converted to a causal RMS-style level estimate in dBFS, smoothed with independent attack and release time constants, and passed through a hard- or soft-knee compressor curve. The resulting gain is applied uniformly to every channel. An optional nonlinear stage can then add Tube, Tape, Transistor, or FET-style coloration before dry/wet mixing and the final output-level stage.
Signal flow:
→ per-channel square → mean channel power
→ causal RMS window → amplitude → absolute dBFS
→ causal attack/release smoothing
→ soft-knee gain computer → makeup gain
→ gain applied to all channels
→ optional saturation and Harmonics mix
→ Dry/Wet mix with the original
→ optional safety ceiling / peak normalization
→ output Sound
Quick start
- Select exactly one Sound in Praat.
- Run
Vintage_Glue_Compressor.praat. - Choose Custom or one of the six named presets.
- For Custom, set the RMS threshold, ratio, knee, attack/release, saturation type, Drive, Harmonics mix, makeup, and Dry/Wet mix.
- Enable Advanced_settings only when you need detector-window, saturation-oversampling, output-level, statistics, or source-retention controls.
- Click OK. The processed Sound remains selected; playback is automatic when Play_result is on.
Compression model
1. Power-linked RMS detector
For a multichannel Sound, each channel is squared before the channels are combined. The detector therefore operates on mean channel power:
A causal one-pole smoother then estimates average power. With Rms_window_ms = W:
p̄[n] = α p̄[n−1] + (1−α) p[n]
L[n] = 20 log10( sqrt(max(p̄[n],0)) + 10⁻¹⁰ )
L[n] is an absolute dBFS level estimate; the threshold does not move with the peak or crest factor of the loaded file.
2. Attack and release
The dB level is smoothed causally at the audio rate. A rising level uses Attack_ms; a falling level uses Release_ms. These time constants are separate from Rms_window_ms, so detector averaging and compressor ballistics are independently controllable.
3. Hard / soft knee
Below the knee the gain is unity. Above the knee, the output slope is 1/Ratio. When Knee_dB > 0, the transition uses the standard quadratic soft-knee form:
For Knee_dB = 0, the compressor becomes a hard-knee design.
4. Makeup
Makeup_Gain_dB is folded directly into the gain curve. With Auto_makeup enabled, the script uses a simple heuristic: half of the gain reduction that a signal 10 dB above threshold would receive. This is a convenience estimate, not loudness matching.
Saturation models
The nonlinear stage comes after compression and makeup. Drive is converted to drive_amt = 1 + 3·Drive. The selected nonlinear signal is blended with the clean compressed signal using Harmonics_mix.
| Mode | Implemented transfer | Character |
|---|---|---|
| Off (Clean Digital) | No nonlinear stage | Compression only. |
| Tube | tanh(x·d) / tanh(d) | Symmetric soft saturation. Because the transfer is odd-symmetric, a symmetric input primarily produces odd-order nonlinear products. |
| Tape | Asymmetric tanh: stronger positive than negative drive | Asymmetry introduces a mixture of even- and odd-order products. |
| Transistor | Bounded normalized cubic soft clip | Symmetric, monotonic, C1 transition into ±1 clipping. |
| FET | Asymmetric tanh using x + 0.1·x·|x| | Punchier asymmetric saturation. |
d = 1). For truly clean processing choose Off (Clean Digital), or set Harmonics_mix = 0.
Harmonics mix
Harmonics_mix = 0 is the clean compressed signal; 1 is the fully nonlinear signal.
Oversampling
The Advanced dialog offers Off (source rate), 2x, or 4x saturation oversampling. When enabled, only the nonlinear stage is processed at the higher rate and then resampled back. With oversampling Off, high-order components above Nyquist can alias into the audible band, especially at high drive.
Presets
The named presets replace the compressor and saturation character settings shown below. They do not change Dry/Wet mix, saturation oversampling, output-level policy, ceiling, statistics, or Keep original.
| Preset | Threshold | Ratio / Knee | RMS window | Attack / Release | Saturation | Drive / Mix | Makeup |
|---|---|---|---|---|---|---|---|
| Vocal Opto | −24 dBFS | 3:1 / 12 dB | 20 ms | 10 / 500 ms | Tube | 0.25 / 0.40 | +4 dB |
| Drum VCA | −18 dBFS | 8:1 / 3 dB | 3 ms | 1 / 50 ms | Transistor | 0.40 / 0.50 | +4 dB |
| Mix Bus Glue | −12 dBFS | 2:1 / 10 dB | 15 ms | 30 / 200 ms | Tube | 0.15 / 0.30 | +2 dB |
| Tape Squeeze | −15 dBFS | 4:1 / 8 dB | 10 ms | 5 / 100 ms | Tape | 0.60 / 0.70 | +3 dB |
| Tube Warmth | −20 dBFS | 2.5:1 / 15 dB | 20 ms | 20 / 300 ms | Tube | 0.35 / 0.50 | +3 dB |
| FET Punch | −20 dBFS | 12:1 / 0 dB | 2 ms | 0.5 / 50 ms | FET | 0.50 / 0.60 | +6 dB |
All named presets switch Auto_makeup off and use the fixed makeup value in the table.
Parameters
Main dialog
| Parameter | Default | Meaning |
|---|---|---|
| Preset | Custom | Custom or one of six named style presets. |
| Rms_threshold_dBFS | −15.0 | Absolute RMS-sidechain threshold in dBFS. |
| Ratio | 4.0 | Compression ratio; must be at least 1. |
| Knee_dB | 6.0 | Soft-knee width; 0 = hard knee. |
| Attack_ms | 10 | Causal attack time constant applied to the dB detector. |
| Release_ms | 100 | Causal release time constant applied to the dB detector. |
| Saturation_type | Off | Clean, Tube, Tape, Transistor, or FET transfer. |
| Drive | 0.3 | Nonlinearity drive control. Must be ≥ 0; it is not restricted to 0–1. |
| Harmonics_mix | 0.5 | Blend between clean compressed and saturated signal, 0–1. |
| Makeup_Gain_dB | 0.0 | Constant gain added to the compressor gain curve. |
| Auto_makeup | On | Replaces manual makeup with the script's heuristic in Custom mode. |
| Dry_wet_mix | 1.0 | 0 = original dry Sound, 1 = fully processed path. |
| Advanced_settings | Off | Opens the second dialog. |
| Draw_result | On | Draws transfer curves, gain reduction, output waveform, and summary. |
| Play_result | On | Plays the result after processing. |
Advanced dialog
| Parameter | Default | Meaning |
|---|---|---|
| Rms_window_ms | 10 ms | Causal one-pole power averaging time constant, independent of attack/release. Named presets replace this value with their own detector window. |
| Saturation_oversampling | Off | Source rate, 2x, or 4x for the nonlinear stage. |
| Output_level_mode | Safety ceiling | None; attenuate-only ceiling; or always peak-normalize to Ceiling_peak. |
| Ceiling_peak | 0.99 | Linear sample-peak target, >0 and ≤1. |
| Show_stats | On | Reports input/output peak and RMS, gain reduction, crest factor, and level-stage details. |
| Keep_original | On | If Off, removes the source Sound after successful processing. |
Rms_window_ms · Fs / 1000 < 4, the script warns that the detector is following individual cycles rather than a stable level estimate. This can turn the gain path into waveform-rate modulation rather than conventional compression.
Output, level policy, and visualization
Dry/Wet
Dry/Wet mixing occurs after compression and saturation:
The output-level stage is applied after this mix. Therefore 0% wet is not necessarily a bit-identical bypass if the selected output-level mode subsequently attenuates or normalizes the file.
Output level modes
| Mode | Behavior |
|---|---|
| None | Leaves the processed sample level unchanged. Peaks above 1 can clip when exported to integer PCM. |
| Safety ceiling (default) | If the absolute sample peak exceeds Ceiling_peak, attenuates to that peak; otherwise does nothing. Quiet material is never boosted. |
| Peak normalize | For any non-silent result, applies one constant gain so the absolute sample peak equals Ceiling_peak. This can either attenuate or amplify and therefore changes the absolute level implied by makeup and Dry/Wet. |
This is sample-peak management using Praat's absolute extremum, not true-peak limiting.
Output name
The named presets append _Opto, _VCA, _Glue, _Tape, _Tube, or _FET. Custom uses the original object name with no added suffix; if Keep_original remains on, both objects can therefore share the same visible name in the Objects list.
Visualization
With Draw_result on, the Picture window shows:
- Saturation transfer curve: selected nonlinear character with the Harmonics mix blended into the plotted curve.
- Compression transfer curve: threshold, knee region, ratio, and unity reference in dBFS.
- Gain reduction over time: compressor gain reduction before makeup, over the Sound's actual time domain.
- Output waveform: mono directly; for multichannel Sounds the first two channels are drawn while all channels remain in the processed output.
- Summary: preset, input levels, threshold, maximum gain reduction, makeup, saturation settings, output levels, crest factor, and output-level action.