@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.json CHANGED
@@ -179,6 +179,24 @@
179
179
  "name": "Audio Input",
180
180
  "description": "Audio signal for lo-fi bit and sample rate reduction.",
181
181
  "target": "AudioNode"
182
+ },
183
+ "modBits": {
184
+ "signal": "modulation",
185
+ "name": "Bit Depth CV",
186
+ "description": "Added to the BITS knob, in bits (+1 = one more bit). Sweeps smoothly between depths; the result stays within 1–16.",
187
+ "target": "AudioParam"
188
+ },
189
+ "modRate": {
190
+ "signal": "modulation",
191
+ "name": "Sample Rate CV",
192
+ "description": "Added to the RATE knob (+0.1 = 10% of the original rate). The result stays within 1–100%.",
193
+ "target": "AudioParam"
194
+ },
195
+ "modMix": {
196
+ "signal": "modulation",
197
+ "name": "Mix CV",
198
+ "description": "Added to the MIX knob (+0.1 = 10% wetter).",
199
+ "target": "AudioParam"
182
200
  }
183
201
  },
184
202
  "outputs": {
@@ -192,7 +210,7 @@
192
210
  "params": {
193
211
  "bits": {
194
212
  "name": "Bit Depth",
195
- "description": "Number of bits for quantization. Lower = crunchier, more lo-fi.",
213
+ "description": "Number of bits for quantization. Lower = crunchier, more lo-fi. 1 bit = two levels: a hard full-scale square at the input's pitch.",
196
214
  "type": "number",
197
215
  "unit": "factor",
198
216
  "default": 8,
@@ -274,7 +292,7 @@
274
292
  },
275
293
  "depth": {
276
294
  "name": "Modulation Depth",
277
- "description": "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).",
295
+ "description": "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).",
278
296
  "type": "number",
279
297
  "unit": "factor",
280
298
  "default": 0.5,
@@ -380,7 +398,7 @@
380
398
  "panel": "COMP",
381
399
  "import": "import { Compressor } from '@jpdutoit/squelchy';",
382
400
  "summary": "Dynamics Compressor",
383
- "description": "Reduces dynamic range by attenuating loud signals. Threshold sets where compression begins, ratio controls intensity.",
401
+ "description": "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.",
384
402
  "categories": [
385
403
  "Dynamics"
386
404
  ],
@@ -390,6 +408,12 @@
390
408
  "name": "Audio Input",
391
409
  "description": "Audio signal to compress.",
392
410
  "target": "AudioNode"
411
+ },
412
+ "key": {
413
+ "signal": "audio",
414
+ "name": "Key (Side-chain) Input",
415
+ "description": "What the compressor listens to when KEY is set to EXT, e.g. a kick drum to duck a bass. Ignored on INT.",
416
+ "target": "AudioNode"
393
417
  }
394
418
  },
395
419
  "outputs": {
@@ -403,7 +427,7 @@
403
427
  "params": {
404
428
  "threshold": {
405
429
  "name": "Threshold",
406
- "description": "Level above which compression kicks in. Lower = more compression.",
430
+ "description": "Peak level (dBFS) above which compression kicks in. Lower = more compression. With a soft KNEE it eases in from half the knee width below.",
407
431
  "type": "Decibels",
408
432
  "unit": "dB",
409
433
  "default": -24,
@@ -424,18 +448,18 @@
424
448
  },
425
449
  "attack": {
426
450
  "name": "Attack",
427
- "description": "How fast compression responds to loud signals.",
451
+ "description": "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.",
428
452
  "type": "Seconds",
429
453
  "unit": "s",
430
454
  "default": 0.003,
431
- "min": 0.001,
455
+ "min": 0.0001,
432
456
  "max": 1,
433
457
  "scale": "log",
434
458
  "automatable": true
435
459
  },
436
460
  "release": {
437
461
  "name": "Release",
438
- "description": "How fast compression releases after signal drops.",
462
+ "description": "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×).",
439
463
  "type": "Seconds",
440
464
  "unit": "s",
441
465
  "default": 0.25,
@@ -446,7 +470,7 @@
446
470
  },
447
471
  "knee": {
448
472
  "name": "Knee",
449
- "description": "Width of the transition zone around the threshold. 0 = hard knee (abrupt), 40 = soft knee (gradual).",
473
+ "description": "Width of the transition zone centred on the threshold. 0 = hard knee (abrupt), 40 = soft knee (gradual).",
450
474
  "type": "Decibels",
451
475
  "unit": "dB",
452
476
  "default": 10,
@@ -462,6 +486,17 @@
462
486
  "default": 0,
463
487
  "min": 0,
464
488
  "max": 30,
489
+ "automatable": true
490
+ },
491
+ "keySource": {
492
+ "name": "Key Source",
493
+ "description": "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.",
494
+ "type": "\"internal\" | \"external\"",
495
+ "default": "internal",
496
+ "options": [
497
+ "internal",
498
+ "external"
499
+ ],
465
500
  "automatable": false
466
501
  }
467
502
  }
@@ -585,7 +620,7 @@
585
620
  "panel": "DIM",
586
621
  "import": "import { Dimension } from '@jpdutoit/squelchy';",
587
622
  "summary": "Dimension Expander",
588
- "description": "Roland Dimension-D inspired stereo widener. Adds subtle modulation to create spacious, wide stereo images. Classic 80s lush pad sound.",
623
+ "description": "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.",
589
624
  "categories": [
590
625
  "Effects"
591
626
  ],
@@ -612,6 +647,16 @@
612
647
  }
613
648
  },
614
649
  "params": {
650
+ "width": {
651
+ "name": "Stereo Width",
652
+ "description": "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).",
653
+ "type": "number",
654
+ "unit": "factor",
655
+ "default": 1.5,
656
+ "min": 0,
657
+ "max": 2,
658
+ "automatable": false
659
+ },
615
660
  "rate": {
616
661
  "name": "Rate",
617
662
  "description": "Widening LFO speed, driven directly by the oscillator frequency. modRate sums into the same AudioParam.",
@@ -624,7 +669,7 @@
624
669
  },
625
670
  "depth": {
626
671
  "name": "Modulation Depth",
627
- "description": "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).",
672
+ "description": "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).",
628
673
  "type": "number",
629
674
  "unit": "factor",
630
675
  "default": 0.3,
@@ -1213,14 +1258,14 @@
1213
1258
  },
1214
1259
  "resonance": {
1215
1260
  "name": "Resonance",
1216
- "description": "Sharpness of the formant peaks, scaled per band. Higher values sound more pronounced and vocal.",
1261
+ "description": "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.",
1217
1262
  "type": "number",
1218
1263
  "unit": "factor",
1219
1264
  "default": 6,
1220
1265
  "min": 1,
1221
1266
  "max": 20,
1222
1267
  "scale": "sqrt",
1223
- "automatable": false
1268
+ "automatable": true
1224
1269
  },
1225
1270
  "mix": {
1226
1271
  "name": "Dry/Wet Mix",
@@ -1303,6 +1348,12 @@
1303
1348
  "name": "Audio Input",
1304
1349
  "description": "Audio signal to be gated.",
1305
1350
  "target": "AudioNode"
1351
+ },
1352
+ "key": {
1353
+ "signal": "audio",
1354
+ "name": "Key Input",
1355
+ "description": "What opens the gate when KEY is set to EXT, e.g. a clock, a gate or a hi-hat. Ignored on INT.",
1356
+ "target": "AudioNode"
1306
1357
  }
1307
1358
  },
1308
1359
  "outputs": {
@@ -1322,7 +1373,7 @@
1322
1373
  "default": -40,
1323
1374
  "min": -60,
1324
1375
  "max": 0,
1325
- "automatable": false
1376
+ "automatable": true
1326
1377
  },
1327
1378
  "range": {
1328
1379
  "name": "Range",
@@ -1332,7 +1383,7 @@
1332
1383
  "default": 0.8,
1333
1384
  "min": 0,
1334
1385
  "max": 1,
1335
- "automatable": false
1386
+ "automatable": true
1336
1387
  },
1337
1388
  "attack": {
1338
1389
  "name": "Attack",
@@ -1355,6 +1406,17 @@
1355
1406
  "max": 0.5,
1356
1407
  "scale": "log",
1357
1408
  "automatable": true
1409
+ },
1410
+ "keySource": {
1411
+ "name": "Key Source",
1412
+ "description": "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.",
1413
+ "type": "\"internal\" | \"external\"",
1414
+ "default": "internal",
1415
+ "options": [
1416
+ "internal",
1417
+ "external"
1418
+ ],
1419
+ "automatable": false
1358
1420
  }
1359
1421
  }
1360
1422
  },
@@ -1523,7 +1585,7 @@
1523
1585
  },
1524
1586
  "crossover": {
1525
1587
  "name": "Crossover Frequency",
1526
- "description": "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.",
1588
+ "description": "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.",
1527
1589
  "type": "Hz",
1528
1590
  "unit": "Hz",
1529
1591
  "default": 800,
@@ -1696,7 +1758,7 @@
1696
1758
  "panel": "LO-FI",
1697
1759
  "import": "import { LoFi } from '@jpdutoit/squelchy';",
1698
1760
  "summary": "Lo-Fi Processor",
1699
- "description": "Lo-fi processor with saturation, lowpass filtering, vinyl noise, and pitch wobble. Perfect for vintage, degraded textures.",
1761
+ "description": "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.",
1700
1762
  "categories": [
1701
1763
  "Distortion",
1702
1764
  "Vintage"
@@ -1726,7 +1788,7 @@
1726
1788
  "params": {
1727
1789
  "drive": {
1728
1790
  "name": "Saturation",
1729
- "description": "Amount of warm tape-like saturation and compression. Rebuilds the waveshaper curve, so it is set-only (no single AudioParam carries it).",
1791
+ "description": "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).",
1730
1792
  "type": "number",
1731
1793
  "unit": "factor",
1732
1794
  "default": 0.3,
@@ -1746,23 +1808,23 @@
1746
1808
  },
1747
1809
  "noise": {
1748
1810
  "name": "Vinyl Noise",
1749
- "description": "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).",
1811
+ "description": "Level of the vinyl surface noise: steady hiss (about −44 dBFS at full) plus random dust ticks and pops. Never repeats.",
1750
1812
  "type": "number",
1751
1813
  "unit": "factor",
1752
1814
  "default": 0.2,
1753
1815
  "min": 0,
1754
1816
  "max": 1,
1755
- "automatable": false
1817
+ "automatable": true
1756
1818
  },
1757
1819
  "wobble": {
1758
1820
  "name": "Wobble",
1759
- "description": "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).",
1821
+ "description": "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.",
1760
1822
  "type": "number",
1761
1823
  "unit": "factor",
1762
1824
  "default": 0.1,
1763
1825
  "min": 0,
1764
1826
  "max": 1,
1765
- "automatable": false
1827
+ "automatable": true
1766
1828
  }
1767
1829
  }
1768
1830
  },
@@ -1811,6 +1873,16 @@
1811
1873
  "min": 0,
1812
1874
  "max": 2,
1813
1875
  "automatable": true
1876
+ },
1877
+ "width": {
1878
+ "name": "Stereo Width",
1879
+ "description": "Overall stereo width multiplier applied after side gain. 0=mono, 1=normal, 2=wide.",
1880
+ "type": "number",
1881
+ "unit": "factor",
1882
+ "default": 1,
1883
+ "min": 0,
1884
+ "max": 2,
1885
+ "automatable": true
1814
1886
  }
1815
1887
  }
1816
1888
  },
@@ -2093,7 +2165,7 @@
2093
2165
  "panel": "RESO",
2094
2166
  "import": "import { Resonator } from '@jpdutoit/squelchy';",
2095
2167
  "summary": "Resonator",
2096
- "description": "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.",
2168
+ "description": "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.",
2097
2169
  "categories": [
2098
2170
  "Filters"
2099
2171
  ],
@@ -2138,7 +2210,7 @@
2138
2210
  },
2139
2211
  "structure": {
2140
2212
  "name": "Structure",
2141
- "description": "Harmonic spacing of the resonator partials. Left = standard harmonic series, center = bell-like, right = metallic/inharmonic.",
2213
+ "description": "Harmonic spacing of the resonator partials. Left = standard harmonic series, center = bell-like, right = metallic/inharmonic. Loudness holds across the knob.",
2142
2214
  "type": "number",
2143
2215
  "unit": "factor",
2144
2216
  "default": 0,
@@ -2158,10 +2230,10 @@
2158
2230
  },
2159
2231
  "mix": {
2160
2232
  "name": "Dry/Wet Mix",
2161
- "description": "Balance between original and resonated signal.",
2233
+ "description": "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.",
2162
2234
  "type": "number",
2163
2235
  "unit": "factor",
2164
- "default": 0.5,
2236
+ "default": 1,
2165
2237
  "min": 0,
2166
2238
  "max": 1,
2167
2239
  "automatable": true
@@ -2173,7 +2245,7 @@
2173
2245
  "panel": "REVERB",
2174
2246
  "import": "import { Reverb } from '@jpdutoit/squelchy';",
2175
2247
  "summary": "Reverb Effect",
2176
- "description": "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.",
2248
+ "description": "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.",
2177
2249
  "categories": [
2178
2250
  "Time"
2179
2251
  ],
@@ -2358,7 +2430,7 @@
2358
2430
  "panel": "SAT",
2359
2431
  "import": "import { Saturator } from '@jpdutoit/squelchy';",
2360
2432
  "summary": "Tape Saturator",
2361
- "description": "Adds warm analog-style harmonic saturation. Drive pushes into soft clipping, warmth adds low-end emphasis. Subtle grit to heavy crunch.",
2433
+ "description": "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.",
2362
2434
  "categories": [
2363
2435
  "Distortion"
2364
2436
  ],
@@ -2381,7 +2453,7 @@
2381
2453
  "params": {
2382
2454
  "drive": {
2383
2455
  "name": "Drive",
2384
- "description": "How hard to push into saturation. Adds harmonics and soft compression.",
2456
+ "description": "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).",
2385
2457
  "type": "number",
2386
2458
  "unit": "factor",
2387
2459
  "default": 0.5,
@@ -2391,7 +2463,7 @@
2391
2463
  },
2392
2464
  "warmth": {
2393
2465
  "name": "Warmth",
2394
- "description": "Low frequency emphasis for a thicker, analog-like tone.",
2466
+ "description": "Low-shelf boost below 300 Hz, up to +6 dB, after the saturation. A tone control for low-end weight, not more distortion.",
2395
2467
  "type": "number",
2396
2468
  "unit": "factor",
2397
2469
  "default": 0.5,
@@ -2485,7 +2557,7 @@
2485
2557
  "panel": "LIMIT",
2486
2558
  "import": "import { SoftLimiter } from '@jpdutoit/squelchy';",
2487
2559
  "summary": "Soft Limiter",
2488
- "description": "Gentle brickwall limiting with soft knee. Prevents clipping while preserving dynamics. Use ceiling control to set maximum output level.",
2560
+ "description": "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.",
2489
2561
  "categories": [
2490
2562
  "Dynamics"
2491
2563
  ],
@@ -2650,6 +2722,16 @@
2650
2722
  "max": 1,
2651
2723
  "automatable": false
2652
2724
  },
2725
+ "width": {
2726
+ "name": "Dry/Wet",
2727
+ "description": "Balance between mono (0%) and widened (200%) high frequencies.",
2728
+ "type": "number",
2729
+ "unit": "factor",
2730
+ "default": 1,
2731
+ "min": 0,
2732
+ "max": 2,
2733
+ "automatable": true
2734
+ },
2653
2735
  "center": {
2654
2736
  "name": "Crossover Frequency",
2655
2737
  "description": "Frequency above which Haas spreading is applied. Lows below this stay centered for mono compatibility.",
@@ -3261,7 +3343,7 @@
3261
3343
  },
3262
3344
  "depth": {
3263
3345
  "name": "Modulation Depth",
3264
- "description": "How much the frequency sweeps. Full depth ≈ 3 octaves.",
3346
+ "description": "How much the frequency sweeps. Full depth = 3 octaves top to bottom (±1.5 octaves around the center).",
3265
3347
  "type": "number",
3266
3348
  "unit": "factor",
3267
3349
  "default": 0.6,