Stakes. Compressor's dossier fixed three "clean" traits — F5 at 0.5 %
THD, V6 at 0.2 %, M5 at 1 % — and asked one question at Station A: "Is gain
smoothing composable, or a fifth ask? If the shipped patches cannot reach the
three bars, the ask is a one-pole on the gain after the gain computer."
Measured 2026-09-07 on the shipped patches: they cannot, on
low-frequency material.
Read back off the instance, at 10 dB of gain reduction on a 50 Hz tone
(audiocomponents/tools/compressor_evidence.py patches, 48 kHz, CPython at
AUDIOIF_PIN 2f6cbc3):
patch name character THD @50 Hz THD @1 kHz
0 Level Ride optical 0.8323 % 0.0446 %
1 Fast Peak Catch fet 1.1289 % 0.0611 %
2 Everything At Once fet 4.0207 % 0.2668 %
3 Bus Glue vca 0.2415 % 0.0117 %
5 Let The Stick Through fet 0.9393 % 0.0462 %
6 Parallel Squash fet 1.0945 % 0.0735 %
Five of the fourteen shipped patches are over F5's 0.5 % bar at 50 Hz —
patch 0, the constructor's own defaults, among them — and patch 3 is over
V6's 0.2 %. Patch 2 is the 1176's all-buttons-in mode and is meant to be
dirty. At 1 kHz only patch 2 is over the bar, so this is specifically
low-frequency material: with a short release the per-sample gain follows the
waveform. Swept over the Release macro's whole travel at 10 dB of GR, patch 1
reads 0.0209 % at the slow end and 3.8909 % at the fast end (50 Hz);
1.1359 % at 200 Hz; 0.2397 % at 1 kHz.
The class cannot fix this with the nodes on the pin: the ripple is in the
gain the node computes per sample, and nothing downstream of Dynamics can
remove it without also removing the compression.
Ask. audiodynamics.Dynamics gets a one-pole smoothing on the computed
gain, after the gain computer and before it multiplies the audio —
gain_smooth_ms, default 0, so every figure already measured against the
pin stays exactly where it is. A class that wants the 1176's dirt keeps 0; a
class that wants the dbx's cleanliness at 50 Hz asks for a few milliseconds.
Related: the class's own evidence records the disconfirmation and the bound
(audiocomponents/docs/effects/Compressor-evidence.md §1, traits F5/V6, and
docs/effects/Compressor.md §8 question 7, which is the question this ask
answers).
Stakes.
Compressor's dossier fixed three "clean" traits — F5 at 0.5 %THD, V6 at 0.2 %, M5 at 1 % — and asked one question at Station A: "Is gain
smoothing composable, or a fifth ask? If the shipped patches cannot reach the
three bars, the ask is a one-pole on the gain after the gain computer."
Measured 2026-09-07 on the shipped patches: they cannot, on
low-frequency material.
Read back off the instance, at 10 dB of gain reduction on a 50 Hz tone
(
audiocomponents/tools/compressor_evidence.py patches, 48 kHz, CPython atAUDIOIF_PIN2f6cbc3):Five of the fourteen shipped patches are over F5's 0.5 % bar at 50 Hz —
patch 0, the constructor's own defaults, among them — and patch 3 is over
V6's 0.2 %. Patch 2 is the 1176's all-buttons-in mode and is meant to be
dirty. At 1 kHz only patch 2 is over the bar, so this is specifically
low-frequency material: with a short release the per-sample gain follows the
waveform. Swept over the Release macro's whole travel at 10 dB of GR, patch 1
reads 0.0209 % at the slow end and 3.8909 % at the fast end (50 Hz);
1.1359 % at 200 Hz; 0.2397 % at 1 kHz.
The class cannot fix this with the nodes on the pin: the ripple is in the
gain the node computes per sample, and nothing downstream of
Dynamicscanremove it without also removing the compression.
Ask.
audiodynamics.Dynamicsgets a one-pole smoothing on the computedgain, after the gain computer and before it multiplies the audio —
gain_smooth_ms, default 0, so every figure already measured against thepin stays exactly where it is. A class that wants the 1176's dirt keeps 0; a
class that wants the dbx's cleanliness at 50 Hz asks for a few milliseconds.
Related: the class's own evidence records the disconfirmation and the bound
(
audiocomponents/docs/effects/Compressor-evidence.md§1, traits F5/V6, anddocs/effects/Compressor.md§8 question 7, which is the question this askanswers).