From 85e79d993263f84b1aa63f4efa9eb71b9cb93d42 Mon Sep 17 00:00:00 2001 From: Aria Date: Wed, 14 Jan 2026 16:53:11 -0600 Subject: [PATCH 1/2] Set pooled values immediately instead of scheduling --- packages/superdough/helpers.mjs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/superdough/helpers.mjs b/packages/superdough/helpers.mjs index 0ca085e3e..bb402ea78 100644 --- a/packages/superdough/helpers.mjs +++ b/packages/superdough/helpers.mjs @@ -154,9 +154,8 @@ export function getCompressor(ac, threshold, ratio, knee, attack, release) { attack: attack ?? 0.005, release: release ?? 0.05, }; - const now = ac.currentTime; Object.entries(options).forEach(([key, value]) => { - node[key].setValueAtTime(value, now); + node[key].value = value;; }); return node; } @@ -242,9 +241,8 @@ export function createFilter(context, start, end, params, cps, cycle) { const factory = () => context.createBiquadFilter(); filter = getNodeFromPool('filter', factory); filter.type = type; - const now = context.currentTime; Object.entries({ Q: q, frequency }).forEach(([key, value]) => { - filter[key].setValueAtTime(value, now); + filter[key].value = value; }); frequencyParam = filter.frequency; } From 21e6d81d349f475527d26509749385d70c5d0374 Mon Sep 17 00:00:00 2001 From: Aria Date: Wed, 14 Jan 2026 16:58:45 -0600 Subject: [PATCH 2/2] Also set values immediately for supersaw and wavetable --- packages/superdough/helpers.mjs | 2 +- packages/superdough/synth.mjs | 3 +-- packages/superdough/wavetable.mjs | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/superdough/helpers.mjs b/packages/superdough/helpers.mjs index bb402ea78..584b19673 100644 --- a/packages/superdough/helpers.mjs +++ b/packages/superdough/helpers.mjs @@ -155,7 +155,7 @@ export function getCompressor(ac, threshold, ratio, knee, attack, release) { release: release ?? 0.05, }; Object.entries(options).forEach(([key, value]) => { - node[key].value = value;; + node[key].value = value; }); return node; } diff --git a/packages/superdough/synth.mjs b/packages/superdough/synth.mjs index 9561ab363..38ad643de 100644 --- a/packages/superdough/synth.mjs +++ b/packages/superdough/synth.mjs @@ -178,11 +178,10 @@ export function registerSynthSounds() { }; const factory = () => new AudioWorkletNode(ac, 'supersaw-oscillator', { outputChannelCount: [2] }); const o = getNodeFromPool('supersaw', factory); - const now = ac.currentTime; Object.entries(params).forEach(([key, value]) => { const param = o.parameters.get(key); const target = value !== undefined ? value : param.defaultValue; - param.setValueAtTime(target, now); + param.value = target; }); o.port.postMessage({ type: 'initialize' }); const gainAdjustment = 1 / Math.sqrt(voices); diff --git a/packages/superdough/wavetable.mjs b/packages/superdough/wavetable.mjs index 1de42f643..6ef1f0ebb 100644 --- a/packages/superdough/wavetable.mjs +++ b/packages/superdough/wavetable.mjs @@ -244,11 +244,10 @@ export async function onTriggerSynth(t, value, onended, tables, cps, frameLen) { }; const factory = () => new AudioWorkletNode(ac, 'wavetable-oscillator-processor', { outputChannelCount: [2] }); const source = getNodeFromPool('wavetable', factory); - const now = ac.currentTime; Object.entries(params).forEach(([key, value]) => { const param = source.parameters.get(key); const target = value !== undefined ? value : param.defaultValue; - param.setValueAtTime(target, now); + param.value = target; }); source.port.postMessage({ type: 'initialize', payload }); if (ac.currentTime > t) {