@vessel-dsp/runtime 0.7.0 → 0.12.0

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.
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { ChainRuntime } from "./chain";
2
2
  export { bypassNotModelledAdvisories, chainAdvisories, seamScale, type ChainAdvisory, } from "./chain-advisories";
3
3
  export { dacScaleFactor, outputConversionFullScale, outputDbfs } from "./chain-scale";
4
4
  export { processorSlot, programSlot, resolveBypassMode, slotContract, type ChainSlot, type ExternalProcessor, type SlotContract, type StageCoverage, } from "./chain-slot";
5
- export { DEFAULT_NEWTON_MAX_ITERATIONS, ldrTableResistanceOhms, ReferenceRuntime, RuntimeError, type RuntimeNodeVoltageSnapshot, } from "./reference-runtime";
5
+ export { dbxVcaGainDb, dbxVcaRestTerms, dbxVcaEnvelopeTerms, dbxVcaKneeVolts, dbxVcaReleaseTc, dbxVcaPrimeTarget, dbxVcaShutdownTarget, dbxVcaVictimTc, dbxVcaGainLinear, dbxVcaEnvelopeK, DEFAULT_NEWTON_MAX_ITERATIONS, ldrTableResistanceOhms, ReferenceRuntime, RuntimeError, type RuntimeNodeVoltageSnapshot, } from "./reference-runtime";
6
6
  export type { SupplyAddress, SupplyInfo } from "./supply";
7
7
  export { SETTLE_DEFAULTS, measureInputAttributable, measureSharedWindow, settledRender, settledSweepVerified, type SettleOptions, } from "./settle";
8
8
  export { supplyGroundConflicts, type SupplyGroundConflict } from "./supply-ground";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,SAAS,EACT,KAAK,aAAa,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACN,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,KAAK,0BAA0B,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EACN,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,KAAK,aAAa,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMpE,OAAO,EACN,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,aAAa,GAClB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,SAAS,EACT,KAAK,aAAa,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACN,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,KAAK,0BAA0B,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EACN,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,KAAK,aAAa,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMpE,OAAO,EACN,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,aAAa,GAClB,MAAM,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ export { ChainRuntime } from "./chain.js";
8
8
  export { bypassNotModelledAdvisories, chainAdvisories, seamScale, } from "./chain-advisories.js";
9
9
  export { dacScaleFactor, outputConversionFullScale, outputDbfs } from "./chain-scale.js";
10
10
  export { processorSlot, programSlot, resolveBypassMode, slotContract, } from "./chain-slot.js";
11
- export { DEFAULT_NEWTON_MAX_ITERATIONS, ldrTableResistanceOhms, ReferenceRuntime, RuntimeError, } from "./reference-runtime.js";
11
+ export { dbxVcaGainDb, dbxVcaRestTerms, dbxVcaEnvelopeTerms, dbxVcaKneeVolts, dbxVcaReleaseTc, dbxVcaPrimeTarget, dbxVcaShutdownTarget, dbxVcaVictimTc, dbxVcaGainLinear, dbxVcaEnvelopeK, DEFAULT_NEWTON_MAX_ITERATIONS, ldrTableResistanceOhms, ReferenceRuntime, RuntimeError, } from "./reference-runtime.js";
12
12
  export { SETTLE_DEFAULTS, measureInputAttributable, measureSharedWindow, settledRender, settledSweepVerified, } from "./settle.js";
13
13
  export { supplyGroundConflicts } from "./supply-ground.js";
14
14
  export { taperFraction } from "./taper.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,oFAAoF;AACpF,sFAAsF;AACtF,mFAAmF;AACnF,kDAAkD;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,SAAS,GAET,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACN,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,GAKZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GAEZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GAEpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAA6B,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,+EAA+E;AAC/E,kFAAkF;AAClF,8EAA8E;AAC9E,gFAAgF;AAChF,oEAAoE;AACpE,OAAO,EACN,oBAAoB,EACpB,sBAAsB,GAMtB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,oFAAoF;AACpF,sFAAsF;AACtF,mFAAmF;AACnF,kDAAkD;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,SAAS,GAET,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACN,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,GAKZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GAEZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GAEpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAA6B,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,+EAA+E;AAC/E,kFAAkF;AAClF,8EAA8E;AAC9E,gFAAgF;AAChF,oEAAoE;AACpE,OAAO,EACN,oBAAoB,EACpB,sBAAsB,GAMtB,MAAM,+BAA+B,CAAC"}
@@ -186,6 +186,88 @@ export declare const DEFAULT_NEWTON_MAX_ITERATIONS = 1024;
186
186
  * never reaches here from a compiled program.
187
187
  */
188
188
  export declare function ldrTableResistanceOhms(currentsAmps: readonly number[], ohms: readonly number[], currentAmps: number, minOhms: number, maxOhms: number): number;
189
+ /**
190
+ * A dbx-style VCA's control in dB: `-termsVolts / 0.0059`, clamped to
191
+ * `[minGainDb, maxGainDb]`.
192
+ *
193
+ * The 5.9 mV/dB divisor is the NEC uPC1252 feature line (and `boss-lm-2`'s
194
+ * control deck); the +-30 dB clamp is the datasheet's Av range. `termsVolts`
195
+ * is the smoothed SUSTAIN-coupled rest plus the smoothed log-domain
196
+ * envelope -- see `dbxVcaRestTerms` and `dbxVcaEnvelopeTerms`. Pure so the
197
+ * compiler tests and the console-parity instruments can call it directly.
198
+ * The stamp path below evaluates the same expression inline with the clamp
199
+ * test deciding the derivative.
200
+ */
201
+ export declare function dbxVcaGainDb(termsVolts: number, minGainDb: number, maxGainDb: number): number;
202
+ /** dB to linear voltage gain. Pure companion to `dbxVcaGainDb` above. */
203
+ export declare function dbxVcaGainLinear(gainDb: number): number;
204
+ /**
205
+ * The SUSTAIN-coupled rest term in volts: `sustainGain * (vControl -
206
+ * sustainRef)`. Session-fitted (inverted, amplified): rest gain rises with
207
+ * the GC node, opposite to a naive control-follows-detector reading, because
208
+ * that is what the session threshold curves demand (sus-min flat -13.2 dB,
209
+ * centre +5.68 dB, sus-max +14.28 dB at 10 mV in).
210
+ */
211
+ export declare function dbxVcaRestTerms(vControl: number, sustainGain: number, sustainRef: number): number;
212
+ /**
213
+ * The log-domain envelope term in volts: `max(0, slope * ln(|iIn| * 1e6) +
214
+ * kneeVolts)`, with `iIn` in amps (the 1e6 keeps the log argument
215
+ * dimensionless against a 1 uA reference). Below the knee the pedal holds
216
+ * rest gain; above it each input decade adds the same dB of reduction; the
217
+ * knee tracks SUSTAIN (see the law docs). `Math.log(0)` is -Infinity and
218
+ * `Math.max(0, -Infinity)` is 0, so silence reads exactly zero -- but an
219
+ * explicit guard keeps that from depending on log-edge behavior.
220
+ */
221
+ export declare function dbxVcaEnvelopeTerms(inputAmps: number, slopeVoltsPerNeper: number, kneeVolts: number): number;
222
+ /**
223
+ * The detector knee in volts at one GC voltage: a SUSTAIN-tracked threshold
224
+ * (`kneeBaseVolts` at 4.65 V rising `kneeTrack` volts per GC volt), so
225
+ * sus-min stays flat to 300 mV while centre and sus-max engage progressively.
226
+ * Pure so the threshold shape is unit-testable.
227
+ */
228
+ export declare function dbxVcaKneeVolts(vControl: number, kneeBaseVolts: number, kneeTrack: number): number;
229
+ /**
230
+ * Depth-varying release time constant in seconds: `baseSeconds *
231
+ * slowdown^depth01`, where depth01 is the held suppression depth normalized
232
+ * to [0, 1]. Fast near the top (base rate: session-3 immediacy), minutes-slow
233
+ * from deep suppression. Pure so the curve is unit-testable; the production
234
+ * slowdown is a fit hook for the hot-start + 60 s take, which does not exist
235
+ * yet -- see the law docs.
236
+ */
237
+ export declare function dbxVcaReleaseTc(depth01: number, baseSeconds: number, slowdown: number): number;
238
+ /**
239
+ * Silence priming target, 1 or 0: 1 when the rectified input sits below the
240
+ * presence floor (`primeRefCurrent`), else 0. The prime follower chases this
241
+ * with `primeRiseSeconds` upward (a gap builds prime over seconds) and
242
+ * `primeFallSeconds` downward (signal disarms in fractions of a second), so a
243
+ * post-gap transient edge pumps the shutdown while render onsets and
244
+ * continuous tones never do (priming starts at zero). Pure so the gate is
245
+ * unit-testable.
246
+ */
247
+ export declare function dbxVcaPrimeTarget(inputAmps: number, refCurrentAmps: number): number;
248
+ /**
249
+ * Post-gap gulp target in volts: `shutdownGain * max(0, peakTarget -
250
+ * edgeThreshVolts)^2 * primed01`, where `peakTarget` is the instantaneous
251
+ * log-domain target. After a silence gap the prime is high, so a hot peak
252
+ * dumps a recharge gulp (D6 conducting hard into the depleted C8); under
253
+ * continuous signal the prime is zero and the gulp is zero, and render
254
+ * onsets never pump (priming starts at zero). The square is the D6 diode
255
+ * exponential over the operating range; the absolute threshold is the diode
256
+ * forward drop plus topped-C8 headroom, which is why sine ripple never
257
+ * pumps. Pure so the fit is unit-testable.
258
+ */
259
+ export declare function dbxVcaShutdownTarget(peakTargetVolts: number, edgeThreshVolts: number, primed01: number, gainPerVolt: number): number;
260
+ /**
261
+ * Victim-dependent shutdown bleed time constant in seconds: `fastSeconds`
262
+ * once the prime has disarmed (`primed01` below 0.05, i.e. sustained signal
263
+ * present), `slowSeconds` while primed (R-only, frozen over takes but
264
+ * finite). The discharge path conducts only once signal has dislodged the
265
+ * prime; while a post-gap transient holds the prime the crush holds with it,
266
+ * then clears in a fraction of a second under the probe tone. Pure so the
267
+ * curve is unit-testable.
268
+ */
269
+ export declare function dbxVcaVictimTc(primed01: number, fastSeconds: number, slowSeconds: number): number;
270
+ export declare function dbxVcaEnvelopeK(tcSeconds: number, sampleRate: number): number;
189
271
  /**
190
272
  * A delay-tap read length, pure over its inputs (board-p3 row 4). Factored
191
273
  * out of the interpreter so every mode is unit-testable without a program:
@@ -1 +1 @@
1
- {"version":3,"file":"reference-runtime.d.ts","sourceRoot":"","sources":["../src/reference-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-runtime.d.ts","sourceRoot":"","sources":["../src/reference-runtime.ts"],"names":[],"mappings":"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"}
@@ -348,6 +348,121 @@ export function ldrTableResistanceOhms(currentsAmps, ohms, currentAmps, minOhms,
348
348
  const raw = Math.exp(lnR0 + (lnI - lnI0) * slope);
349
349
  return Math.min(Math.max(raw, minOhms), maxOhms);
350
350
  }
351
+ /**
352
+ * A dbx-style VCA's control in dB: `-termsVolts / 0.0059`, clamped to
353
+ * `[minGainDb, maxGainDb]`.
354
+ *
355
+ * The 5.9 mV/dB divisor is the NEC uPC1252 feature line (and `boss-lm-2`'s
356
+ * control deck); the +-30 dB clamp is the datasheet's Av range. `termsVolts`
357
+ * is the smoothed SUSTAIN-coupled rest plus the smoothed log-domain
358
+ * envelope -- see `dbxVcaRestTerms` and `dbxVcaEnvelopeTerms`. Pure so the
359
+ * compiler tests and the console-parity instruments can call it directly.
360
+ * The stamp path below evaluates the same expression inline with the clamp
361
+ * test deciding the derivative.
362
+ */
363
+ export function dbxVcaGainDb(termsVolts, minGainDb, maxGainDb) {
364
+ const raw = -termsVolts / 0.0059;
365
+ return Math.min(maxGainDb, Math.max(minGainDb, raw));
366
+ }
367
+ /** dB to linear voltage gain. Pure companion to `dbxVcaGainDb` above. */
368
+ export function dbxVcaGainLinear(gainDb) {
369
+ return Math.pow(10, gainDb / 20);
370
+ }
371
+ /**
372
+ * The SUSTAIN-coupled rest term in volts: `sustainGain * (vControl -
373
+ * sustainRef)`. Session-fitted (inverted, amplified): rest gain rises with
374
+ * the GC node, opposite to a naive control-follows-detector reading, because
375
+ * that is what the session threshold curves demand (sus-min flat -13.2 dB,
376
+ * centre +5.68 dB, sus-max +14.28 dB at 10 mV in).
377
+ */
378
+ export function dbxVcaRestTerms(vControl, sustainGain, sustainRef) {
379
+ return sustainGain * (vControl - sustainRef);
380
+ }
381
+ /**
382
+ * The log-domain envelope term in volts: `max(0, slope * ln(|iIn| * 1e6) +
383
+ * kneeVolts)`, with `iIn` in amps (the 1e6 keeps the log argument
384
+ * dimensionless against a 1 uA reference). Below the knee the pedal holds
385
+ * rest gain; above it each input decade adds the same dB of reduction; the
386
+ * knee tracks SUSTAIN (see the law docs). `Math.log(0)` is -Infinity and
387
+ * `Math.max(0, -Infinity)` is 0, so silence reads exactly zero -- but an
388
+ * explicit guard keeps that from depending on log-edge behavior.
389
+ */
390
+ export function dbxVcaEnvelopeTerms(inputAmps, slopeVoltsPerNeper, kneeVolts) {
391
+ const absIn = Math.abs(inputAmps);
392
+ if (!(absIn > 0))
393
+ return 0;
394
+ return Math.max(0, slopeVoltsPerNeper * Math.log(absIn * 1e6) + kneeVolts);
395
+ }
396
+ /**
397
+ * The detector knee in volts at one GC voltage: a SUSTAIN-tracked threshold
398
+ * (`kneeBaseVolts` at 4.65 V rising `kneeTrack` volts per GC volt), so
399
+ * sus-min stays flat to 300 mV while centre and sus-max engage progressively.
400
+ * Pure so the threshold shape is unit-testable.
401
+ */
402
+ export function dbxVcaKneeVolts(vControl, kneeBaseVolts, kneeTrack) {
403
+ return kneeBaseVolts + kneeTrack * (vControl - 4.65);
404
+ }
405
+ /**
406
+ * Depth-varying release time constant in seconds: `baseSeconds *
407
+ * slowdown^depth01`, where depth01 is the held suppression depth normalized
408
+ * to [0, 1]. Fast near the top (base rate: session-3 immediacy), minutes-slow
409
+ * from deep suppression. Pure so the curve is unit-testable; the production
410
+ * slowdown is a fit hook for the hot-start + 60 s take, which does not exist
411
+ * yet -- see the law docs.
412
+ */
413
+ export function dbxVcaReleaseTc(depth01, baseSeconds, slowdown) {
414
+ const depth = Math.min(1, Math.max(0, depth01));
415
+ return baseSeconds * Math.pow(slowdown, depth);
416
+ }
417
+ /**
418
+ * Silence priming target, 1 or 0: 1 when the rectified input sits below the
419
+ * presence floor (`primeRefCurrent`), else 0. The prime follower chases this
420
+ * with `primeRiseSeconds` upward (a gap builds prime over seconds) and
421
+ * `primeFallSeconds` downward (signal disarms in fractions of a second), so a
422
+ * post-gap transient edge pumps the shutdown while render onsets and
423
+ * continuous tones never do (priming starts at zero). Pure so the gate is
424
+ * unit-testable.
425
+ */
426
+ export function dbxVcaPrimeTarget(inputAmps, refCurrentAmps) {
427
+ return Math.abs(inputAmps) > refCurrentAmps ? 0 : 1;
428
+ }
429
+ /**
430
+ * Post-gap gulp target in volts: `shutdownGain * max(0, peakTarget -
431
+ * edgeThreshVolts)^2 * primed01`, where `peakTarget` is the instantaneous
432
+ * log-domain target. After a silence gap the prime is high, so a hot peak
433
+ * dumps a recharge gulp (D6 conducting hard into the depleted C8); under
434
+ * continuous signal the prime is zero and the gulp is zero, and render
435
+ * onsets never pump (priming starts at zero). The square is the D6 diode
436
+ * exponential over the operating range; the absolute threshold is the diode
437
+ * forward drop plus topped-C8 headroom, which is why sine ripple never
438
+ * pumps. Pure so the fit is unit-testable.
439
+ */
440
+ export function dbxVcaShutdownTarget(peakTargetVolts, edgeThreshVolts, primed01, gainPerVolt) {
441
+ const excess = peakTargetVolts - edgeThreshVolts;
442
+ if (!(excess > 0) || !(primed01 > 0))
443
+ return 0;
444
+ const primed = Math.min(1, primed01);
445
+ return gainPerVolt * excess * excess * primed;
446
+ }
447
+ /**
448
+ * Victim-dependent shutdown bleed time constant in seconds: `fastSeconds`
449
+ * once the prime has disarmed (`primed01` below 0.05, i.e. sustained signal
450
+ * present), `slowSeconds` while primed (R-only, frozen over takes but
451
+ * finite). The discharge path conducts only once signal has dislodged the
452
+ * prime; while a post-gap transient holds the prime the crush holds with it,
453
+ * then clears in a fraction of a second under the probe tone. Pure so the
454
+ * curve is unit-testable.
455
+ */
456
+ export function dbxVcaVictimTc(primed01, fastSeconds, slowSeconds) {
457
+ const primed = Math.min(1, Math.max(0, primed01));
458
+ return primed > 0.05 ? slowSeconds : fastSeconds;
459
+ }
460
+ export function dbxVcaEnvelopeK(tcSeconds, sampleRate) {
461
+ const denom = tcSeconds * sampleRate;
462
+ if (!(denom > 0))
463
+ return 1;
464
+ return 1 - Math.exp(-1 / denom);
465
+ }
351
466
  /**
352
467
  * The budget a block falls back to for the length of a probation, once one of its samples has
353
468
  * shown that more iterations could not help that sample.
@@ -950,6 +1065,9 @@ const IMPLEMENTED_OPERATORS = {
950
1065
  comparator: true,
951
1066
  // Linear-control VCA cell. Reads the control node, draws nothing.
952
1067
  "linear-vca": true,
1068
+ // dbx-style VCA cell (uPC1252H2). Bounded sigmoidal gain in the
1069
+ // control voltage. Reads the control node, draws nothing.
1070
+ "dbx-vca": true,
953
1071
  };
954
1072
  /**
955
1073
  * Which of a program's declared operators this runtime cannot execute.
@@ -6837,6 +6955,126 @@ export class ReferenceRuntime {
6837
6955
  }
6838
6956
  break;
6839
6957
  }
6958
+ case "dbx-vca": {
6959
+ // dbx-style VCA gain cell (uPC1252H2): the output current is
6960
+ // the input current times an exponential dB-linear gain over
6961
+ // the smoothed SUSTAIN-coupled rest plus the smoothed
6962
+ // log-domain envelope plus the victim-dependent shutdown,
6963
+ // evaluated per Newton iterate with all four followers held.
6964
+ //
6965
+ // Slot 0 smooths the GC control itself (SUSTAIN moves and
6966
+ // audio rejection: the pedal's GC node carries tens of
6967
+ // millivolts of audio, and reading it raw pumps the gain at
6968
+ // audio rate). The rest term and the SUSTAIN-tracked knee
6969
+ // both read the held control. Slot 1 smooths the rectified
6970
+ // log-domain input (the knee makes sus-min flat while
6971
+ // centre and sus-max engage progressively). The release TC
6972
+ // varies with suppression depth (fast near top, minutes-slow
6973
+ // from deep suppression); attack stays fast.
6974
+ //
6975
+ // Slot 2 is the silence prime (1 in silence, 0 under signal;
6976
+ // slow to rise, fast to fall). Slot 3 is the shutdown: a
6977
+ // fast peak-holder pumped only by post-gap transient edges
6978
+ // (the envelope has decayed, so the first post-gap peak dumps
6979
+ // a recharge gulp) and bled victim-dependently (fast under
6980
+ // sustained signal, frozen in silence). Render onsets and
6981
+ // continuous tones never pump (priming starts at zero), so
6982
+ // the v4 threshold fit is structurally untouched. With
6983
+ // everything held there is no live control derivative (the
6984
+ // control row carries no stamp).
6985
+ const dbxBaseIdx = stamp.stateIndex;
6986
+ const ctrlKey = `${block.id}_dbxc_${dbxBaseIdx}`;
6987
+ if (this.elapsedSamples !==
6988
+ (this.lastShiftedSample.get(ctrlKey) ?? -1)) {
6989
+ this.lastShiftedSample.set(ctrlKey, this.elapsedSamples);
6990
+ const vCtrlNow = solution[stamp.control] ?? 0.0;
6991
+ const ctrlPrev = state[dbxBaseIdx] ?? 0.0;
6992
+ const ctrlTc = vCtrlNow > ctrlPrev ? stamp.attackSeconds : stamp.releaseSeconds;
6993
+ const ctrlK = dbxVcaEnvelopeK(ctrlTc, this.sampleRate);
6994
+ state[dbxBaseIdx] = ctrlPrev + (vCtrlNow - ctrlPrev) * ctrlK;
6995
+ }
6996
+ const vCtrlHeld = state[dbxBaseIdx] ?? 0.0;
6997
+ const restHeld = dbxVcaRestTerms(vCtrlHeld, stamp.sustainGain, stamp.sustainRef);
6998
+ const kneeHeld = dbxVcaKneeVolts(vCtrlHeld, stamp.kneeBaseVolts, stamp.kneeTrack);
6999
+ const vInInstDbx = (solution[stamp.plus] ?? 0.0) - (solution[stamp.minus] ?? 0.0);
7000
+ const iInInstDbx = vInInstDbx * stamp.inputSiemens;
7001
+ const primeKey = `${block.id}_dbxp_${dbxBaseIdx}`;
7002
+ if (this.elapsedSamples !==
7003
+ (this.lastShiftedSample.get(primeKey) ?? -1)) {
7004
+ this.lastShiftedSample.set(primeKey, this.elapsedSamples);
7005
+ const primeTarget = dbxVcaPrimeTarget(iInInstDbx, stamp.primeRefCurrent);
7006
+ const primePrev = state[dbxBaseIdx + 2] ?? 0.0;
7007
+ const primeTc = primeTarget > primePrev
7008
+ ? stamp.primeRiseSeconds
7009
+ : stamp.primeFallSeconds;
7010
+ const primeK = dbxVcaEnvelopeK(primeTc, this.sampleRate);
7011
+ state[dbxBaseIdx + 2] = primePrev + (primeTarget - primePrev) * primeK;
7012
+ }
7013
+ const primeHeld = state[dbxBaseIdx + 2] ?? 0.0;
7014
+ const envKey = `${block.id}_dbxe_${dbxBaseIdx}`;
7015
+ if (this.elapsedSamples !==
7016
+ (this.lastShiftedSample.get(envKey) ?? -1)) {
7017
+ this.lastShiftedSample.set(envKey, this.elapsedSamples);
7018
+ const envTarget = dbxVcaEnvelopeTerms(iInInstDbx, stamp.envelopeSlope, kneeHeld);
7019
+ const envPrev = state[dbxBaseIdx + 1] ?? 0.0;
7020
+ const envDepth = Math.min(1, Math.max(0, envPrev / 0.15));
7021
+ const envTc = envTarget > envPrev
7022
+ ? stamp.attackSeconds
7023
+ : dbxVcaReleaseTc(envDepth, stamp.releaseSeconds, stamp.releaseSlowdown);
7024
+ const envK = dbxVcaEnvelopeK(envTc, this.sampleRate);
7025
+ state[dbxBaseIdx + 1] = envPrev + (envTarget - envPrev) * envK;
7026
+ }
7027
+ const envHeld = state[dbxBaseIdx + 1] ?? 0.0;
7028
+ const shutKey = `${block.id}_dbxs_${dbxBaseIdx}`;
7029
+ if (this.elapsedSamples !==
7030
+ (this.lastShiftedSample.get(shutKey) ?? -1)) {
7031
+ this.lastShiftedSample.set(shutKey, this.elapsedSamples);
7032
+ const peakTarget = dbxVcaEnvelopeTerms(iInInstDbx, stamp.envelopeSlope, kneeHeld);
7033
+ const shutTarget = dbxVcaShutdownTarget(peakTarget, stamp.shutdownEdgeVolts, primeHeld, stamp.shutdownGain);
7034
+ const shutPrev = state[dbxBaseIdx + 3] ?? 0.0;
7035
+ const shutTc = shutTarget > shutPrev
7036
+ ? stamp.shutdownAttackSeconds
7037
+ : dbxVcaVictimTc(primeHeld, stamp.shutdownFastSeconds, stamp.shutdownSlowSeconds);
7038
+ const shutK = dbxVcaEnvelopeK(shutTc, this.sampleRate);
7039
+ state[dbxBaseIdx + 3] = shutPrev + (shutTarget - shutPrev) * shutK;
7040
+ }
7041
+ const shutHeld = state[dbxBaseIdx + 3] ?? 0.0;
7042
+ const termsHeld = restHeld + envHeld;
7043
+ // Same closed form as `dbxVcaGainDb`: rest plus envelope terms
7044
+ // through 5.9 mV/dB, clamped to the datasheet range. At a clamp rail
7045
+ // the rail decides the gain (derivative zero); the terms are
7046
+ // held anyway, so the control row carries no stamp. The shutdown
7047
+ // rides OUTSIDE the linear clamp: a post-gap transient crushes
7048
+ // toward mute (session 1/2 pips annihilated at -57 dB, session 8
7049
+ // at -67 dB absolute), past any linear Av range, so it adds its
7050
+ // dB after the clamp with only a -100 dB mute floor for safety.
7051
+ const rawDb = -termsHeld / 0.0059;
7052
+ const gainDb = Math.min(stamp.maxGainDb, Math.max(stamp.minGainDb, rawDb));
7053
+ const totalDb = Math.max(-100, gainDb - shutHeld / 0.0059);
7054
+ const gain = dbxVcaGainLinear(totalDb);
7055
+ const vPlus = solution[stamp.plus] ?? 0.0;
7056
+ const vMinus = solution[stamp.minus] ?? 0.0;
7057
+ const vIn = vPlus - vMinus;
7058
+ const iIn = vIn * stamp.inputSiemens;
7059
+ const iOut = iIn * gain;
7060
+ const gIn = gain * stamp.inputSiemens;
7061
+ // Leaving-positive KCL (see the diode): the stamp's physical
7062
+ // current ENTERS the output node, so every term below is
7063
+ // negated once.
7064
+ const leaving = -iOut;
7065
+ const equivalent = leaving - (-gIn * vPlus + gIn * vMinus);
7066
+ if (stamp.output !== 0) {
7067
+ if (stamp.plus !== 0) {
7068
+ matrix[stamp.output][stamp.plus] += -gIn;
7069
+ }
7070
+ if (stamp.minus !== 0) {
7071
+ matrix[stamp.output][stamp.minus] += gIn;
7072
+ }
7073
+ rhs[stamp.output] =
7074
+ (rhs[stamp.output] ?? 0) - equivalent;
7075
+ }
7076
+ break;
7077
+ }
6840
7078
  case "spring-reverb": {
6841
7079
  // Two ports, both ordinary stamps; everything mechanical lives in the state
6842
7080
  // advanced once per sample by `advanceSpringReverb`.