From 751c4b739046f1a8692e42b27a20310a5fc3d5ef Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 12 Jan 2024 18:56:00 +0100 Subject: [PATCH] add pregain + move postgain after sends --- packages/core/controls.mjs | 7 ++++++- packages/superdough/superdough.mjs | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/core/controls.mjs b/packages/core/controls.mjs index d979ff23e..39d4aa14d 100644 --- a/packages/core/controls.mjs +++ b/packages/core/controls.mjs @@ -87,7 +87,12 @@ const generic_params = [ */ ['gain'], /** - * Gain applied after all effects have been processed. + * Gain applied before effect sends (delay, reverb ...) + * + */ + ['pregain'], + /** + * Gain applied after effect sends (delay, reverb ...) * * @name postgain * @example diff --git a/packages/superdough/superdough.mjs b/packages/superdough/superdough.mjs index f6ce6c60e..6c59bbcbd 100644 --- a/packages/superdough/superdough.mjs +++ b/packages/superdough/superdough.mjs @@ -272,7 +272,8 @@ export const superdough = async (value, deadline, hapDuration) => { bank, source, gain = 0.8, - postgain = 1, + pregain = 1, + postgain, density = 0.03, // filters ftype = '12db', @@ -470,16 +471,15 @@ export const superdough = async (value, deadline, hapDuration) => { chain.push(phaserFX); } - // last gain - const post = new GainNode(ac, { gain: postgain }); - chain.push(post); - connectToDestination(post, channels); + // pre fx gain + const pre = new GainNode(ac, { gain: pregain }); + chain.push(pre); // delay let delaySend; if (delay > 0 && delaytime > 0 && delayfeedback > 0) { const delyNode = getDelay(orbit, delaytime, delayfeedback, t); - delaySend = effectSend(post, delyNode, delay); + delaySend = effectSend(pre, delyNode, delay); } // reverb let reverbSend; @@ -496,9 +496,16 @@ export const superdough = async (value, deadline, hapDuration) => { roomIR = await loadBuffer(url, ac, ir, 0); } const reverbNode = getReverb(orbit, roomsize, roomfade, roomlp, roomdim, roomIR); - reverbSend = effectSend(post, reverbNode, room); + reverbSend = effectSend(pre, reverbNode, room); } + let post = pre; + if (postgain !== undefined) { + // post fx gain + post = new GainNode(ac, { gain: postgain }); + chain.push(post); + } + connectToDestination(post, channels); // analyser let analyserSend; if (analyze) {