destroy
destroy · effectsBitcrusher + decimator distortion.
the faceplate
4 inputs · 1 outputs · 3 params
inputs
| id | cable | what it does |
|---|---|---|
audio | audio | The dry signal fed into the decimator + bit-reducer chain. Also passed to the dry side of the WET blend. audio signal |
decimate | cv | CV that displaces the DECIMATE knob (linear), modulating the sample-rate reduction — patch an envelope or LFO for rhythmic aliasing sweeps. A ±1V CV sweeps roughly ±31 steps from the knob position. control voltage (CV); modulates decimate (additive offset — ±1 CV sweeps the full range, centered on the knob) |
bits | cv | CV that displaces the BITS knob (linear), modulating the quantization depth live. control voltage (CV); modulates bits (additive offset — ±1 CV sweeps the full range, centered on the knob) |
wet | cv | CV that displaces the WET knob, modulating the dry/wet crush amount. control voltage (CV); modulates wet (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
audio | audio | The processed (destroyed) signal blended with the dry input per WET. It is UNITY-GAIN in level terms and that is worth knowing before you reach for a meter to set it up: across DECIMATE's entire 1..64 travel the output RMS moves 0.12 dB on broadband noise and 0.00 dB on a sine, so a level meter is blind to the module's primary control (which is why the faceplate's glyph is a TRACE, not a meter). BITS moves it a little more (1.8 dB) and non-monotonically. The signal is also never bit-identical sample to sample even inside a held plateau, because the WET smoothing leaves a residual dry path 89.8 dB down: compare output samples with a tolerance, never for equality. audio signal |
params
| id | label | range | default | curve |
|---|---|---|---|---|
decimate | Decimate | 1..64 | 1 | linear |
bits | Bits | 1..16 | 16 | linear |
wet | Wet | 0..1 | 1 | linear |
controls
| control | what it does |
|---|---|
| Bits | Quantization bit depth (1..16, default 16): 16 is pristine; lower values quantize the amplitude to a grid of 2^bits steps for the thick, steppy crunch of a low-bit converter. IT IS NOT A TONE CONTROL — over its whole travel it moves the spectral centroid of broadband material by 99 Hz, against DECIMATE's 7513 Hz. What it moves is the noise floor: the crush artifact sits at 20log10(step/sqrt(12)), i.e. -101 dBFS at 16 bits, -52.9 at 8, -28.8 at 4, -10.8 at 1 (measured within 0.09 dB of that closed form at every depth). AND IT HAS A DEAD ZONE, which is the thing nothing else says: the quantizer rounds to the nearest step, so any input below half a step (-6.02 x bits dBFS) becomes EXACTLY ZERO. That is -24.1 dBFS at 4 bits and -6.0 dBFS at 1, and it is a cliff rather than a fade — at 1 bit a source 1.2x over the threshold leaves at -4.3 dBFS and one at 0.98x leaves at -99.0. So `1 bit` is near-square-wave destruction for loud material and a hard mute for anything quiet. The faceplate prints both edges, as `floor` and `mute`. |
| Decimate | Sample-rate decimation (1..64, default 1): hold every Nth input sample. 1 is pristine; higher values drop the effective sample rate to 48000/N for aliasing artifacts and a coarse, downsampled grain. THE DIAL IS CONTINUOUS AND THE HOLD IS AN INTEGER, so the value is ROUNDED to the nearest whole sample — a CV that lands at 7.4 holds 7 samples and one at 7.6 holds 8. (It used to TRUNCATE, which made every integer position one step short and DECIMATE 2 a bit-exact no-op; #1716.) THE ONE THING TO WATCH is the fold frequency, half the effective rate: 24 kHz at DECIMATE 1, 3 kHz at 8, 375 Hz at 64. There is no anti-alias filter, so material above the fold does not vanish, it comes back down as a different pitch — measured at DECIMATE 8, a 5 kHz tone leaves at 1 kHz 13.8 dB louder than its own fundamental. The faceplate prints the effective rate as `rate` and the resulting data rate (bits x rate) as `stream`. |
| Wet | Dry / wet mix (0..1, default 1): 0 is the clean input, 1 is the fully crushed signal, between blends them — useful as a parallel-distortion amount. It is a true crossfade over the ERROR: the output is dry + wet x (crushed - dry), so halving WET drops the crush artifact by exactly 6.02 dB and leaves the dry signal at full level (measured -28.8 dBFS at WET 1 and -34.8 at WET 0.5, 4 bits). AT THE SHIPPED DEFAULTS IT DOES NOTHING, because DECIMATE 1 + BITS 16 is a transparent chain and there is nothing to blend against; it becomes a control the moment either of the other two is moved. Two smaller notes: the crushed path's dead zone is unaffected by WET (a sub-threshold input still quantizes to zero, it just arrives through the dry side instead), and the internal smoothing on this control never quite reaches its endpoint, so at WET 1 a residual dry signal survives 89.8 dB down — inaudible, but it is why output samples inside a held plateau are never bit-identical and must be compared with a tolerance. |
source
destroy.ts on GitHub.