@audio/ saturate-tube
Status calibrated
npm1.0.5licenseMIT
Tube saturation — asymmetric biased tanh, even-harmonic signature
import tube from '@audio/saturate-tube'
Valve/tube-style saturation: a DC-compensated, asymmetric tanh transfer (bias shifts the curve off-center). The asymmetry is what generates even harmonics — the "warm" 2nd-harmonic tube signature — versus the odd-only symmetric curves in transistor/waveshaper. Oversampled (windowed-sinc up → shape → windowed-sinc down) to keep the extra harmonics from aliasing.
tube(data, { drive: 3, fs: 44100 })
tube(data, { drive: 2, bias: 0.4, mix: 0.6 })
| Param | Default | |
|---|---|---|
drive |
2 |
pre-gain into the biased tanh curve |
bias |
0.25 |
0..1 — asymmetry (DC-compensated); higher = more even-harmonic content |
fs |
44100 |
sample rate |
oversample |
4 |
oversample factor; 1 disables oversampling (naive, aliased) |
mix |
1 |
0..1 — wet/dry blend |
Mutates data in place and returns it (same array reference, not a copy). Even (2nd) harmonic energy measurably exceeds transistor's at equal drive — verified in the family test suite via Goertzel analysis at 2nd/3rd harmonic bins.
This package's own host wrapper (./audio export, for chainable-host use) is streaming: false — the sinc-oversampled transfer needs whole-signal context; a per-block realtime path would need a streaming polyphase oversampler first.
Use when: warm, "tube-y" 2nd-harmonic coloration.
Not for: odd-harmonic console character (use transistor) or HF-rolled tape character (use tape).
Part of the @audio/saturate family.
MIT © audiojs