@jpdutoit/squelchy 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +2 -0
  2. package/{chunk-N7J25N5J.js → chunk-PJDNZ52Q.js} +21 -5
  3. package/chunk-PJDNZ52Q.js.map +7 -0
  4. package/docs/GUIDE.md +27 -4
  5. package/docs/MODULES.md +46 -36
  6. package/docs/modules.json +113 -31
  7. package/index.d.ts +75 -25
  8. package/index.js +526 -350
  9. package/index.js.map +3 -3
  10. package/kits/compu-78/bd.flac +0 -0
  11. package/kits/compu-78/ch.flac +0 -0
  12. package/kits/compu-78/clap.flac +0 -0
  13. package/kits/compu-78/cym.flac +0 -0
  14. package/kits/compu-78/ht.flac +0 -0
  15. package/kits/compu-78/lt.flac +0 -0
  16. package/kits/compu-78/mt.flac +0 -0
  17. package/kits/compu-78/oh.flac +0 -0
  18. package/kits/compu-78/perc.flac +0 -0
  19. package/kits/compu-78/rim.flac +0 -0
  20. package/kits/compu-78/sd.flac +0 -0
  21. package/kits/deep-analogue/bd.flac +0 -0
  22. package/kits/deep-analogue/ch.flac +0 -0
  23. package/kits/deep-analogue/clap.flac +0 -0
  24. package/kits/deep-analogue/cym.flac +0 -0
  25. package/kits/deep-analogue/ht.flac +0 -0
  26. package/kits/deep-analogue/lt.flac +0 -0
  27. package/kits/deep-analogue/mt.flac +0 -0
  28. package/kits/deep-analogue/oh.flac +0 -0
  29. package/kits/deep-analogue/perc.flac +0 -0
  30. package/kits/deep-analogue/rim.flac +0 -0
  31. package/kits/deep-analogue/sd.flac +0 -0
  32. package/kits/hard-cell/bd.flac +0 -0
  33. package/kits/hard-cell/ch.flac +0 -0
  34. package/kits/hard-cell/clap.flac +0 -0
  35. package/kits/hard-cell/cym.flac +0 -0
  36. package/kits/hard-cell/ht.flac +0 -0
  37. package/kits/hard-cell/lt.flac +0 -0
  38. package/kits/hard-cell/mt.flac +0 -0
  39. package/kits/hard-cell/oh.flac +0 -0
  40. package/kits/hard-cell/perc.flac +0 -0
  41. package/kits/hard-cell/rim.flac +0 -0
  42. package/kits/hard-cell/sd.flac +0 -0
  43. package/kits/micro-click/bd.flac +0 -0
  44. package/kits/micro-click/ch.flac +0 -0
  45. package/kits/micro-click/clap.flac +0 -0
  46. package/kits/micro-click/cym.flac +0 -0
  47. package/kits/micro-click/ht.flac +0 -0
  48. package/kits/micro-click/lt.flac +0 -0
  49. package/kits/micro-click/mt.flac +0 -0
  50. package/kits/micro-click/oh.flac +0 -0
  51. package/kits/micro-click/perc.flac +0 -0
  52. package/kits/micro-click/rim.flac +0 -0
  53. package/kits/micro-click/sd.flac +0 -0
  54. package/kits/tape-dust/bd.flac +0 -0
  55. package/kits/tape-dust/ch.flac +0 -0
  56. package/kits/tape-dust/clap.flac +0 -0
  57. package/kits/tape-dust/cym.flac +0 -0
  58. package/kits/tape-dust/ht.flac +0 -0
  59. package/kits/tape-dust/lt.flac +0 -0
  60. package/kits/tape-dust/mt.flac +0 -0
  61. package/kits/tape-dust/oh.flac +0 -0
  62. package/kits/tape-dust/perc.flac +0 -0
  63. package/kits/tape-dust/rim.flac +0 -0
  64. package/kits/tape-dust/sd.flac +0 -0
  65. package/package.json +1 -1
  66. package/{worklets-inline-EF3OTQ4D.js → worklets-inline-NWG5PWND.js} +10 -2
  67. package/{worklets-inline-EF3OTQ4D.js.map → worklets-inline-NWG5PWND.js.map} +2 -2
  68. package/chunk-N7J25N5J.js.map +0 -7
package/docs/MODULES.md CHANGED
@@ -87,7 +87,7 @@ Categories: Filters · Worklets: adsr-envelope, map-voct-to-freq
87
87
 
88
88
  **Auto-Panner** — Stereo auto-panner using LFO-controlled panning. Creates movement and animation in the stereo field.
89
89
 
90
- Categories: Effects, Stereo
90
+ Categories: Effects, Stereo · Worklets: waveshaper
91
91
 
92
92
  ### Ports
93
93
 
@@ -120,12 +120,15 @@ Categories: Distortion · Worklets: bitcrusher
120
120
  |---|---|---|---|
121
121
  | `in` | input | audio | **Audio Input** — Audio signal for lo-fi bit and sample rate reduction. |
122
122
  | `out` | output | audio | **Audio Output** — Crunchy, retro bit-crushed audio output. |
123
+ | `modBits` | modulation | modulation | **Bit Depth CV** — Added to the BITS knob, in bits (+1 = one more bit). Sweeps smoothly between depths; the result stays within 1–16. |
124
+ | `modRate` | modulation | modulation | **Sample Rate CV** — Added to the RATE knob (+0.1 = 10% of the original rate). The result stays within 1–100%. |
125
+ | `modMix` | modulation | modulation | **Mix CV** — Added to the MIX knob (+0.1 = 10% wetter). |
123
126
 
124
127
  ### Params
125
128
 
126
129
  | Param | Default | Range | Description |
127
130
  |---|---|---|---|
128
- | `bits` | `8` | 1 – 16 | **Bit Depth** — Number of bits for quantization. Lower = crunchier, more lo-fi. Automatable: `params.bits` is a native AudioParam. |
131
+ | `bits` | `8` | 1 – 16 | **Bit Depth** — Number of bits for quantization. Lower = crunchier, more lo-fi. 1 bit = two levels: a hard full-scale square at the input's pitch. Automatable: `params.bits` is a native AudioParam. |
129
132
  | `rate` | `0.5` | 0.01 – 1 (log) | **Sample Rate** — Sample rate reduction factor. 1 = original, lower = more aliased and crunchy. Creates the classic "staircase" sample-and-hold effect. Automatable: `params.rate` is a native AudioParam. |
130
133
  | `mix` | `1` | 0 – 1 | **Dry/Wet Mix** — Balance between clean and crushed signal. Automatable: `params.mix` is a native AudioParam. |
131
134
 
@@ -151,7 +154,7 @@ Categories: Time, Effects
151
154
  | Param | Default | Range | Description |
152
155
  |---|---|---|---|
153
156
  | `rate` | `1.5` | 0.1 – 5 Hz | **Rate** — Chorus sweep LFO speed, driven directly by the oscillator frequency. modRate sums into the same AudioParam. Automatable: `params.rate` is a native AudioParam. |
154
- | `depth` | `0.5` | 0 – 1 | **Modulation Depth** — How much the delay time is modulated. More = wider detuning. Scaled onto the LFO gain, so it is set-only (no single AudioParam carries it 1:1). `set()` only. |
157
+ | `depth` | `0.5` | 0 – 1 | **Modulation Depth** — How far each delay line swings around its 5.66 ms centre: ±4 ms at 1. About 0.46 matches a Juno-60's Chorus I/II swing; more = wider detuning. Scaled onto the LFO gain, so it is set-only (no single AudioParam carries it 1:1). `set()` only. |
155
158
  | `mix` | `0.5` | 0 – 1 | **Dry/Wet Mix** — Balance between original and chorused signal, driven by one ConstantSource (dry = 1 − mix·0.5, wet = mix — the antiphase voices already carry half the width at mix 1). Automatable: `params.mix` is a native AudioParam. |
156
159
 
157
160
  ## COMB
@@ -184,27 +187,29 @@ Categories: Filters · Worklets: map-voct-to-period, comb-filter
184
187
 
185
188
  `import { Compressor } from '@jpdutoit/squelchy'`
186
189
 
187
- **Dynamics Compressor** — Reduces dynamic range by attenuating loud signals. Threshold sets where compression begins, ratio controls intensity.
190
+ **Dynamics Compressor** — Feed-forward peak compressor with zero latency: turns loud signals down by RATIO above THRS, with attack and release that mean exactly what they say. Stereo signals get one linked gain, so the image never moves. A KEY input (side-chain) lets another signal do the squeezing.
188
191
 
189
- Categories: Dynamics
192
+ Categories: Dynamics · Worklets: compressor
190
193
 
191
194
  ### Ports
192
195
 
193
196
  | Slug | Direction | Signal | Description |
194
197
  |---|---|---|---|
195
198
  | `in` | input | audio | **Audio Input** — Audio signal to compress. |
199
+ | `key` | input | audio | **Key (Side-chain) Input** — What the compressor listens to when KEY is set to EXT, e.g. a kick drum to duck a bass. Ignored on INT. |
196
200
  | `out` | output | audio | **Audio Output** — Compressed audio with makeup gain applied. |
197
201
 
198
202
  ### Params
199
203
 
200
204
  | Param | Default | Range | Description |
201
205
  |---|---|---|---|
202
- | `threshold` | `-24` | -60 – 0 dB | **Threshold** — Level above which compression kicks in. Lower = more compression. Automatable: `params.threshold` is a native AudioParam. |
206
+ | `threshold` | `-24` | -60 – 0 dB | **Threshold** — Peak level (dBFS) above which compression kicks in. Lower = more compression. With a soft KNEE it eases in from half the knee width below. Automatable: `params.threshold` is a native AudioParam. |
203
207
  | `ratio` | `4` | 1 – 20 (log) | **Ratio** — How much to reduce signal above threshold. 4:1 = every 4dB over becomes 1dB. Automatable: `params.ratio` is a native AudioParam. |
204
- | `attack` | `0.003` | 0.001 – 1 s (log) | **Attack** — How fast compression responds to loud signals. Automatable: `params.attack` is a native AudioParam. |
205
- | `release` | `0.25` | 0.01 – 1 s (log) | **Release** — How fast compression releases after signal drops. Automatable: `params.release` is a native AudioParam. |
206
- | `knee` | `10` | 0 – 40 dB | **Knee** — Width of the transition zone around the threshold. 0 = hard knee (abrupt), 40 = soft knee (gradual). Automatable: `params.knee` is a native AudioParam. |
207
- | `makeup` | `0` | 0 – 30 dB | **Makeup Gain** — Boosts the output level to compensate for gain reduction. Up to +30 dB. `set()` only. |
208
+ | `attack` | `0.003` | 0.0001 – 1 s (log) | **Attack** — How fast compression grabs a loud signal: the gain reduction gets 63% of the way in this time (nearly all of it in 3×), however hard you hit it. Automatable: `params.attack` is a native AudioParam. |
209
+ | `release` | `0.25` | 0.01 – 1 s (log) | **Release** — How fast compression lets go once the signal drops: the gain reduction falls 63% of the way back in this time (nearly all of it in 3×). Automatable: `params.release` is a native AudioParam. |
210
+ | `knee` | `10` | 0 – 40 dB | **Knee** — Width of the transition zone centred on the threshold. 0 = hard knee (abrupt), 40 = soft knee (gradual). Automatable: `params.knee` is a native AudioParam. |
211
+ | `makeup` | `0` | 0 – 30 dB | **Makeup Gain** — Boosts the output level to compensate for gain reduction. Up to +30 dB. Automatable: `params.makeup` is a native AudioParam. |
212
+ | `keySource` | `"internal"` | `internal` / `external` | **Key Source** — What the compressor listens to. INT: the signal it is compressing. EXT: whatever is patched into KEY (side-chain), e.g. a kick that ducks a bass or pad. The gain still lands on IN. `set()` only. |
208
213
 
209
214
  ## X-FADE
210
215
 
@@ -256,7 +261,7 @@ Categories: Time · Worklets: comb-filter
256
261
 
257
262
  `import { Dimension } from '@jpdutoit/squelchy'`
258
263
 
259
- **Dimension Expander** — Roland Dimension-D inspired stereo widener. Adds subtle modulation to create spacious, wide stereo images. Classic 80s lush pad sound.
264
+ **Dimension Expander** — Roland Dimension D-style stereo widener: the dry signal plus two short antiphase-modulated delay lines, each cross-fed inverted into the opposite channel. Wide and moving in stereo, clean and unwarbled in mono.
260
265
 
261
266
  Categories: Effects
262
267
 
@@ -272,8 +277,9 @@ Categories: Effects
272
277
 
273
278
  | Param | Default | Range | Description |
274
279
  |---|---|---|---|
280
+ | `width` | `1.5` | 0 – 2 | **Stereo Width** — Adjusts stereo image. 0=mono, 1=normal, 2=extra wide. Split across a four-gain matrix, so it is set-only (no single AudioParam carries it). `set()` only. |
275
281
  | `rate` | `0.5` | 0.1 – 5 Hz | **Rate** — Widening LFO speed, driven directly by the oscillator frequency. modRate sums into the same AudioParam. Automatable: `params.rate` is a native AudioParam. |
276
- | `depth` | `0.3` | 0 – 1 | **Modulation Depth** — Amount of chorus-like modulation for that classic 80s wide sound. Scaled onto the LFO gains, so it is set-only (no single AudioParam carries it 1:1). `set()` only. |
282
+ | `depth` | `0.3` | 0 – 1 | **Modulation Depth** — How far the two BBD-style delay lines sweep (full = 1.65–5.35 ms, in antiphase). The dry signal stays in both channels, so this adds movement and width, not vibrato. Scaled onto the LFO gains, so it is set-only (no single AudioParam carries it 1:1). `set()` only. |
277
283
 
278
284
  ## DIST
279
285
 
@@ -281,7 +287,7 @@ Categories: Effects
281
287
 
282
288
  **Distortion Effect** — Three clipping circuits: soft (tanh overdrive), hard (true rail clipper — flattens to a square at high drive), fuzz (biased asymmetric saturator with even harmonics). Output is loudness-compensated so DRIVE and TYPE shape timbre, not volume; TONE tames the fizz.
283
289
 
284
- Categories: Distortion
290
+ Categories: Distortion · Worklets: shaper
285
291
 
286
292
  ### Ports
287
293
 
@@ -405,7 +411,7 @@ Categories: Filters
405
411
 
406
412
  **Harmonic Exciter** — Adds high-frequency harmonics and "air" to dull signals. Generates subtle saturation in the treble range for presence and sparkle.
407
413
 
408
- Categories: Dynamics
414
+ Categories: Dynamics · Worklets: shaper
409
415
 
410
416
  ### Ports
411
417
 
@@ -471,7 +477,7 @@ Categories: Filters · Worklets: formant-table
471
477
  | Param | Default | Range | Description |
472
478
  |---|---|---|---|
473
479
  | `morph` | `0` | 0 – 5 | **Vowel Morph** — Position along the A-E-I-O-U vowel formant chain. 0 = A, 5 wraps back to A; fractional values interpolate between neighbouring vowels. `set()` only. |
474
- | `resonance` | `6` | 1 – 20 (sqrt) | **Resonance** — Sharpness of the formant peaks, scaled per band. Higher values sound more pronounced and vocal. `set()` only. |
480
+ | `resonance` | `6` | 1 – 20 (sqrt) | **Resonance** — Sharpness of the formant peaks. 6 = the bandwidths of a real voice (F1 ≈ 50–80 Hz wide); every band is 6/RES times that, so 1 is soft and blurred, 20 rings like a talk box. Loudness holds across the range. Automatable: `params.resonance` is a native AudioParam. |
475
481
  | `mix` | `1` | 0 – 1 | **Dry/Wet Mix** — Balance between the original signal and the formant-filtered output. 0 = dry, 1 = fully wet. `set()` only. |
476
482
 
477
483
  ## SHIFT
@@ -503,23 +509,25 @@ Categories: Effects · Worklets: freq-shifter
503
509
 
504
510
  **Noise Gate** — Silences signal below threshold using sample-accurate envelope detection with separate attack and release. Essential for cleaning up noise, tightening drums, and creating rhythmic gating effects.
505
511
 
506
- Categories: Dynamics · Worklets: env-follower
512
+ Categories: Dynamics · Worklets: gate
507
513
 
508
514
  ### Ports
509
515
 
510
516
  | Slug | Direction | Signal | Description |
511
517
  |---|---|---|---|
512
518
  | `in` | input | audio | **Audio Input** — Audio signal to be gated. |
519
+ | `key` | input | audio | **Key Input** — What opens the gate when KEY is set to EXT, e.g. a clock, a gate or a hi-hat. Ignored on INT. |
513
520
  | `out` | output | audio | **Audio Output** — Gated audio - silent when below threshold. |
514
521
 
515
522
  ### Params
516
523
 
517
524
  | Param | Default | Range | Description |
518
525
  |---|---|---|---|
519
- | `threshold` | `-40` | -60 – 0 dB | **Threshold** — Level below which the gate closes and silences audio. `set()` only. |
520
- | `range` | `0.8` | 0 – 1 | **Range** — How much the signal is attenuated when gate is closed. 0=full mute, lower=gentler. `set()` only. |
526
+ | `threshold` | `-40` | -60 – 0 dB | **Threshold** — Level below which the gate closes and silences audio. Automatable: `params.threshold` is a native AudioParam. |
527
+ | `range` | `0.8` | 0 – 1 | **Range** — How much the signal is attenuated when gate is closed. 0=full mute, lower=gentler. Automatable: `params.range` is a native AudioParam. |
521
528
  | `attack` | `0.005` | 0.001 – 0.05 s (log) | **Attack** — How fast the gate opens when signal exceeds threshold. Short = tight, long = gentle fade-in. Automatable: `params.attack` is a native AudioParam. |
522
529
  | `release` | `0.1` | 0.01 – 0.5 s (log) | **Release** — How fast the gate closes when signal falls below threshold. Automatable: `params.release` is a native AudioParam. |
530
+ | `keySource` | `"internal"` | `internal` / `external` | **Key Source** — What opens the gate. INT: the signal being gated. EXT: whatever is patched into KEY, e.g. a clock or hi-hat that chops a pad into rhythm. `set()` only. |
523
531
 
524
532
  ## GLIDE
525
533
 
@@ -589,7 +597,7 @@ Categories: Effects
589
597
  |---|---|---|---|
590
598
  | `rate` | `4` | 1 – 10 Hz | **Rate** — Tremolo LFO speed, driven directly by the oscillator frequency. modRate sums into the same AudioParam. Automatable: `params.rate` is a native AudioParam. |
591
599
  | `depth` | `0.7` | 0 – 1 | **Modulation Depth** — Intensity of the volume modulation. Split across the low- and high-band LFO gains, so it is set-only (no single AudioParam carries it). `set()` only. |
592
- | `crossover` | `800` | 200 – 2000 Hz | **Crossover Frequency** — Frequency where signal splits into low and high bands. Only the lowpass moves; the high band is derived (input − LP) and follows. modCrossover sums into the same AudioParam. Automatable: `params.crossover` is a native AudioParam. |
600
+ | `crossover` | `800` | 200 – 2000 Hz | **Crossover Frequency** — Frequency where signal splits into low and high bands (−6 dB point of a Linkwitz-Riley 2nd-order pair: both bands 12 dB/oct, summing flat). One audio-rate value drives both filters, so modCrossover moves the split, not just one side. Automatable: `params.crossover` is a native AudioParam. |
593
601
 
594
602
  ## LADDER
595
603
 
@@ -647,9 +655,9 @@ Categories: Modulators · Worklets: waveshaper
647
655
 
648
656
  `import { LoFi } from '@jpdutoit/squelchy'`
649
657
 
650
- **Lo-Fi Processor** — Lo-fi processor with saturation, lowpass filtering, vinyl noise, and pitch wobble. Perfect for vintage, degraded textures.
658
+ **Lo-Fi Processor** — Vintage degradation: asymmetric tape-style saturation (quiet signals keep their level), a lowpass, vinyl hiss and crackle that never loops, and slow wow. Perfect for worn, dusty textures.
651
659
 
652
- Categories: Distortion, Vintage
660
+ Categories: Distortion, Vintage · Worklets: shaper, vinyl-noise
653
661
 
654
662
  ### Ports
655
663
 
@@ -663,10 +671,10 @@ Categories: Distortion, Vintage
663
671
 
664
672
  | Param | Default | Range | Description |
665
673
  |---|---|---|---|
666
- | `drive` | `0.3` | 0 – 1 | **Saturation** — Amount of warm tape-like saturation and compression. Rebuilds the waveshaper curve, so it is set-only (no single AudioParam carries it). `set()` only. |
674
+ | `drive` | `0.3` | 0 – 1 | **Saturation** — How hard the signal hits an asymmetric tape-style curve (−18 dB clean … +24 dB heavy). Quiet signals keep their level; loud peaks round off with warm even harmonics. Set-only (it reshapes the curve). `set()` only. |
667
675
  | `cutoff` | `4000` | 500 – 8000 Hz | **Cutoff** — Lowpass filter frequency. Lower = more muffled, vintage sound. Automatable: `params.cutoff` is a native AudioParam. |
668
- | `noise` | `0.2` | 0 – 1 | **Vinyl Noise** — Amount of background crackle and hiss for authentic vinyl character. Scaled onto the noise gain, so it is set-only (no single AudioParam carries it 1:1). `set()` only. |
669
- | `wobble` | `0.1` | 0 – 1 | **Wobble** — Pitch instability like a worn tape or warped record. Scaled onto the wobble-LFO gain, so it is set-only (no single AudioParam carries it 1:1). `set()` only. |
676
+ | `noise` | `0.2` | 0 – 1 | **Vinyl Noise** — Level of the vinyl surface noise: steady hiss (about −44 dBFS at full) plus random dust ticks and pops. Never repeats. Automatable: `params.noise` is a native AudioParam. |
677
+ | `wobble` | `0.1` | 0 – 1 | **Wobble** — Wow like a worn tape or warped record: a slow 0.73 Hz pitch drift, about ±16 cents at full. Adds WOB × 2 ms of average delay; none at 0. Automatable: `params.wobble` is a native AudioParam. |
670
678
 
671
679
  ## M/S
672
680
 
@@ -689,6 +697,7 @@ Categories: Stereo
689
697
  |---|---|---|---|
690
698
  | `midGain` | `1` | 0 – 2 | **Mid Gain** — Controls the center/mono content of the stereo image. Automatable: `params.midGain` is a native AudioParam. |
691
699
  | `sideGain` | `1` | 0 – 2 | **Side Gain** — Controls the stereo edges/differences between left and right. Automatable: `params.sideGain` is a native AudioParam. |
700
+ | `width` | `1` | 0 – 2 | **Stereo Width** — Overall stereo width multiplier applied after side gain. 0=mono, 1=normal, 2=wide. Automatable: `params.width` is a native AudioParam. |
692
701
 
693
702
  ## NOISE
694
703
 
@@ -791,7 +800,7 @@ Categories: Time · Worklets: ping-pong
791
800
 
792
801
  `import { Resonator } from '@jpdutoit/squelchy'`
793
802
 
794
- **Resonator** — Modal resonator: five tuned second-order modes that ring when struck. The whole partial series tracks the root note and the V/OCT input exponentially; STRUCT sets the spacing, DAMP the decay time.
803
+ **Resonator** — Modal resonator: five tuned second-order modes that ring when struck. The whole partial series tracks the root note and the V/OCT input exponentially; STRUCT sets the spacing, DAMP the decay time. A strike starts every mode at the same level and the higher ones fade first; the same hit is equally loud on every note, at every STRUCT and DAMP setting.
795
804
 
796
805
  Categories: Filters · Worklets: map-voct-to-freq
797
806
 
@@ -809,15 +818,15 @@ Categories: Filters · Worklets: map-voct-to-freq
809
818
  | Param | Default | Range | Description |
810
819
  |---|---|---|---|
811
820
  | `offset` | `57` | -48 – 108 semitones | **Root Pitch Offset** — Semitones added to the V/OCT input. Unpatched the input is silent, so this is the root note itself: 57 = A3 (220 Hz). Driven by a keyboard or sequencer, 0 tracks the incoming notes. Every partial follows. Automatable: `params.offset` is a native AudioParam. |
812
- | `structure` | `0` | 0 – 1 | **Structure** — Harmonic spacing of the resonator partials. Left = standard harmonic series, center = bell-like, right = metallic/inharmonic. `set()` only. |
821
+ | `structure` | `0` | 0 – 1 | **Structure** — Harmonic spacing of the resonator partials. Left = standard harmonic series, center = bell-like, right = metallic/inharmonic. Loudness holds across the knob. `set()` only. |
813
822
  | `damping` | `0.5` | 0 – 1 | **Damping** — Decay time of the modes, exponential across the knob: at A3 the ring lasts ~10 s at 0, ~0.45 s at the centre and ~20 ms at 1 (T60 ≈ 2.2·Q/f, Q 1000 → 2). Upper partials fade faster than the root, as on a real string. Loudness holds across the range — less damping spreads the same strike over a longer ring instead of making it quieter. `set()` only. |
814
- | `mix` | `0.5` | 0 – 1 | **Dry/Wet Mix** — Balance between original and resonated signal. Automatable: `params.mix` is a native AudioParam. |
823
+ | `mix` | `1` | 0 – 1 | **Dry/Wet Mix** — Balance between the input and the ringing modes. Fully wet by default, like a hardware resonator: at 1 you hear only the modes; turn it down to keep the original transient under the ring. Automatable: `params.mix` is a native AudioParam. |
815
824
 
816
825
  ## REVERB
817
826
 
818
827
  `import { Reverb } from '@jpdutoit/squelchy'`
819
828
 
820
- **Reverb Effect** — Algorithmic Schroeder/FDN reverb: four damped comb filters cross-mixed through a Hadamard matrix, with separate mid and side output taps — a stereo tail that stays exactly mono-compatible, and a stereo input keeps its image. Decay sets RT60 and updates smoothly — nothing is re-rendered when you turn a knob.
829
+ **Reverb Effect** — Algorithmic FDN reverb: sixteen damped delay lines cross-mixed through a slowly rotating matrix, so long tails stay smooth and never hum at fixed bass pitches. Left and right have their own lines and taps, so a stereo input keeps its image and a mono one gets a wide, decorrelated tail. Decay sets RT60 and updates smoothly, and nothing is re-rendered when you turn a knob.
821
830
 
822
831
  Categories: Time · Worklets: fdn-reverb
823
832
 
@@ -888,9 +897,9 @@ Categories: Effects, Vintage
888
897
 
889
898
  `import { Saturator } from '@jpdutoit/squelchy'`
890
899
 
891
- **Tape Saturator** — Adds warm analog-style harmonic saturation. Drive pushes into soft clipping, warmth adds low-end emphasis. Subtle grit to heavy crunch.
900
+ **Tape Saturator** — Tape-style saturation aligned like a tape machine: quiet signals pass at the same level, loud peaks round off into warm odd harmonics and soft compression. DRIVE moves the knee (tone, not volume), WARMTH adds low-end weight. Subtle glue to heavy crunch.
892
901
 
893
- Categories: Distortion
902
+ Categories: Distortion · Worklets: shaper
894
903
 
895
904
  ### Ports
896
905
 
@@ -903,8 +912,8 @@ Categories: Distortion
903
912
 
904
913
  | Param | Default | Range | Description |
905
914
  |---|---|---|---|
906
- | `drive` | `0.5` | 0 – 1 | **Drive** — How hard to push into saturation. Adds harmonics and soft compression. `set()` only. |
907
- | `warmth` | `0.5` | 0 – 1 | **Warmth** — Low frequency emphasis for a thicker, analog-like tone. `set()` only. |
915
+ | `drive` | `0.5` | 0 – 1 | **Drive** — How hard the signal hits the tape curve, from −12 dB (clean) to +24 dB (heavy). The output is trimmed back by the same amount, like a tape machine aligned to its operating level: quiet signals pass at unity, loud peaks round off into harmonics and soft compression. DRIVE changes the tone, not the volume. Set-only (it reshapes the curve). `set()` only. |
916
+ | `warmth` | `0.5` | 0 – 1 | **Warmth** — Low-shelf boost below 300 Hz, up to +6 dB, after the saturation. A tone control for low-end weight, not more distortion. `set()` only. |
908
917
  | `mix` | `1` | 0 – 1 | **Dry/Wet Mix** — Balance between clean and saturated signal. Automatable: `params.mix` is a native AudioParam. |
909
918
 
910
919
  ## SHIMMER
@@ -935,9 +944,9 @@ Categories: Time · Worklets: pitch-shifter, fdn-reverb
935
944
 
936
945
  `import { SoftLimiter } from '@jpdutoit/squelchy'`
937
946
 
938
- **Soft Limiter** — Gentle brickwall limiting with soft knee. Prevents clipping while preserving dynamics. Use ceiling control to set maximum output level.
947
+ **Soft Limiter** — Static soft-clip limiter: a smooth curve rounds peaks off toward the ceiling, so the output never exceeds it. No attack or release; it shapes the waveform instantly instead of riding the gain, so pushing it hard adds saturation. Use the ceiling control to set the maximum output level.
939
948
 
940
- Categories: Dynamics
949
+ Categories: Dynamics · Worklets: shaper
941
950
 
942
951
  ### Ports
943
952
 
@@ -999,6 +1008,7 @@ Categories: Stereo
999
1008
  | Param | Default | Range | Description |
1000
1009
  |---|---|---|---|
1001
1010
  | `spread` | `0.7` | 0 – 1 | **Spread Amount** — Controls the micro-delay time for Haas widening (0–5ms). More spread = wider perceived stereo image. `set()` only. |
1011
+ | `width` | `1` | 0 – 2 | **Dry/Wet** — Balance between mono (0%) and widened (200%) high frequencies. Automatable: `params.width` is a native AudioParam. |
1002
1012
  | `center` | `800` | 200 – 2000 Hz (log) | **Crossover Frequency** — Frequency above which Haas spreading is applied. Lows below this stay centered for mono compatibility. `set()` only. |
1003
1013
 
1004
1014
  ## SUB OCT
@@ -1217,7 +1227,7 @@ Categories: Filters, Effects · Worklets: map-voct-to-freq
1217
1227
  | `note` | `79` | 55 – 95 notes | **Center Note** — Wah center frequency as a note (79 ≈ 800 Hz, 69 = 440 Hz). Drives the V/OCT worklet 1:1 — the panel knob shows the equivalent Hz. Automatable: `params.note` is a native AudioParam. |
1218
1228
  | `resonance` | `8` | 1 – 20 (log) | **Resonance** — How pronounced and vocal the wah peak sounds. `set()` only. |
1219
1229
  | `rate` | `1` | 0.1 – 10 Hz (log) | **Auto-Wah Rate** — Speed of the automatic wah sweep in Hz. Automatable: `params.rate` is a native AudioParam. |
1220
- | `depth` | `0.6` | 0 – 1 | **Modulation Depth** — How much the frequency sweeps. Full depth ≈ 3 octaves. `set()` only. |
1230
+ | `depth` | `0.6` | 0 – 1 | **Modulation Depth** — How much the frequency sweeps. Full depth = 3 octaves top to bottom (±1.5 octaves around the center). `set()` only. |
1221
1231
 
1222
1232
  ## FOLD
1223
1233
 
@@ -1225,7 +1235,7 @@ Categories: Filters, Effects · Worklets: map-voct-to-freq
1225
1235
 
1226
1236
  **Wavefolder** — West Coast synthesis classic. Folds waveform peaks back on themselves, adding rich harmonics. Essential for complex timbres from simple waves.
1227
1237
 
1228
- Categories: Distortion
1238
+ Categories: Distortion · Worklets: shaper
1229
1239
 
1230
1240
  ### Ports
1231
1241