From a88545b6afc9084f3a1c5f17491c160ac26809b9 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 28 Jun 2024 09:02:40 +0200 Subject: [PATCH] add slew limiter --- packages/core/src/audiograph.js | 21 +++++++++++++++++++++ packages/core/src/graph.js | 8 ++++++++ 2 files changed, 29 insertions(+) diff --git a/packages/core/src/audiograph.js b/packages/core/src/audiograph.js index f79e692..6a3c507 100644 --- a/packages/core/src/audiograph.js +++ b/packages/core/src/audiograph.js @@ -584,6 +584,26 @@ class Lag { } } +class Slew { + constructor() { + this.last = 0; + } + + update(input, up, dn) { + const upStep = up * ISR; + const downStep = dn * ISR; + + let delta = input - this.last; + if (delta > upStep) { + delta = upStep; + } else if (delta < -downStep) { + delta = -downStep; + } + this.last += delta; + return this.last; + } +} + /** * Slide/portamento node */ @@ -838,6 +858,7 @@ export let NODE_CLASSES = { Tri: TriOsc, // Scope: Scope, Slide: Slide, + Slew: Slew, Lag: Lag, Filter: Filter, Fold: Fold, diff --git a/packages/core/src/graph.js b/packages/core/src/graph.js index ad92159..95dd1c1 100644 --- a/packages/core/src/graph.js +++ b/packages/core/src/graph.js @@ -292,6 +292,7 @@ export let saw = makeNode("Saw"); export let sine = makeNode("Sine"); export let tri = makeNode("Tri"); export let slide = makeNode("Slide"); +export let slew = makeNode("Slew"); export let lag = makeNode("Lag"); export let filter = makeNode("Filter"); export let fold = makeNode("Fold"); @@ -523,6 +524,13 @@ export const NODE_SCHEMA = { { name: "rate", default: 1 }, ], }, + Slew: { + ins: [ + { name: "in", default: 0 }, + { name: "up", default: 1 }, + { name: "dn", default: 1 }, + ], + }, Tri: { ins: [{ name: "freq", default: 0 }], },