propagate releaseAudioNode in packages

This commit is contained in:
jeromew 2025-12-04 15:26:59 +00:00
parent c7586e96ff
commit f6f507dd29
6 changed files with 27 additions and 27 deletions

View file

@ -7,6 +7,7 @@ import {
getPitchEnvelope, getPitchEnvelope,
getVibratoOscillator, getVibratoOscillator,
onceEnded, onceEnded,
releaseAudioNode,
} from '@strudel/webaudio'; } from '@strudel/webaudio';
import gm from './gm.mjs'; import gm from './gm.mjs';
@ -172,9 +173,8 @@ export function registerSoundfonts() {
bufferSource.stop(envEnd); bufferSource.stop(envEnd);
const stop = (releaseTime) => {}; const stop = (releaseTime) => {};
onceEnded(bufferSource, () => { onceEnded(bufferSource, () => {
bufferSource.disconnect(); releaseAudioNode(bufferSource);
vibratoOscillator?.stop(); releaseAudioNode(vibratoOscillator);
node.disconnect();
onended(); onended();
}); });
return { node, stop }; return { node, stop };

View file

@ -189,7 +189,7 @@ export function applyParameterModulators(audioContext, param, start, end, envelo
getParamADSR(param, attack, decay, sustain, release, min, max, start, holdEnd, curve); getParamADSR(param, attack, decay, sustain, release, min, max, start, holdEnd, curve);
} }
const lfo = getParamLfo(audioContext, param, start, end, lfoValues); const lfo = getParamLfo(audioContext, param, start, end, lfoValues);
return { lfo, disconnect: () => lfo?.disconnect() }; return lfo
} }
export function createFilter(context, start, end, params, cps, cycle) { export function createFilter(context, start, end, params, cps, cycle) {
let { let {
@ -325,8 +325,8 @@ export function getVibratoOscillator(param, value, t) {
vibratoOscillator.connect(gain); vibratoOscillator.connect(gain);
gain.connect(param); gain.connect(param);
onceEnded(vibratoOscillator, () => { onceEnded(vibratoOscillator, () => {
gain.disconnect(param); releaseAudioNode(gain);
vibratoOscillator.disconnect(gain); releaseAudioNode(vibratoOscillator);
}); });
vibratoOscillator.start(t); vibratoOscillator.start(t);
return vibratoOscillator; return vibratoOscillator;

View file

@ -329,10 +329,10 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) {
const out = ac.createGain(); // we need a separate gain for the cutgroups because firefox... const out = ac.createGain(); // we need a separate gain for the cutgroups because firefox...
node.connect(out); node.connect(out);
onceEnded(bufferSource, function () { onceEnded(bufferSource, function () {
bufferSource.disconnect(); releaseAudioNode(bufferSource);
vibratoOscillator?.stop(); releaseAudioNode(vibratoOscillator);
node.disconnect(); releaseAudioNode(node);
out.disconnect(); releaseAudioNode(out);
onended(); onended();
}); });
let envEnd = holdEnd + release + 0.01; let envEnd = holdEnd + release + 0.01;

View file

@ -9,7 +9,7 @@ import './reverb.mjs';
import './vowel.mjs'; import './vowel.mjs';
import { nanFallback, _mod, cycleToSeconds, pickAndRename } from './util.mjs'; import { nanFallback, _mod, cycleToSeconds, pickAndRename } from './util.mjs';
import workletsUrl from './worklets.mjs?audioworklet'; import workletsUrl from './worklets.mjs?audioworklet';
import { createFilter, gainNode, getCompressor, getDistortion, getLfo, getWorklet, effectSend } from './helpers.mjs'; import { createFilter, gainNode, getCompressor, getDistortion, getLfo, getWorklet, effectSend, releaseAudioNode } from './helpers.mjs';
import { map } from 'nanostores'; import { map } from 'nanostores';
import { logger } from './logger.mjs'; import { logger } from './logger.mjs';
import { loadBuffer } from './sampler.mjs'; import { loadBuffer } from './sampler.mjs';
@ -506,7 +506,7 @@ export const superdough = async (value, t, hapDuration, cps = 0.5, cycle = 0.5)
} else if (getSound(s)) { } else if (getSound(s)) {
const { onTrigger } = getSound(s); const { onTrigger } = getSound(s);
const onEnded = () => { const onEnded = () => {
audioNodes.forEach((n) => n?.disconnect()); audioNodes.forEach((n) => releaseAudioNode(n));
activeSoundSources.delete(chainID); activeSoundSources.delete(chainID);
}; };
const soundHandle = await onTrigger(t, value, onEnded, cps); const soundHandle = await onTrigger(t, value, onEnded, cps);

View file

@ -1,6 +1,5 @@
import { clamp } from './util.mjs'; import { clamp } from './util.mjs';
import { registerSound, soundMap } from './superdough.mjs'; import { registerSound, soundMap } from './superdough.mjs';
import { onceEnded } from './helpers.mjs';
import { getAudioContext } from './audioContext.mjs'; import { getAudioContext } from './audioContext.mjs';
import { import {
applyFM, applyFM,
@ -13,6 +12,7 @@ import {
getVibratoOscillator, getVibratoOscillator,
getWorklet, getWorklet,
noises, noises,
onceEnded,
releaseAudioNode, releaseAudioNode,
webAudioTimeout, webAudioTimeout,
} from './helpers.mjs'; } from './helpers.mjs';
@ -53,7 +53,7 @@ export function registerSynthSounds() {
const g = gainNode(0.3); const g = gainNode(0.3);
let sound = getOscillator(s, t, value, () => { let sound = getOscillator(s, t, value, () => {
g.disconnect(); releaseAudioNode(g);
onended(); onended();
}); });
@ -112,12 +112,12 @@ export function registerSynthSounds() {
const mix = gainNode(mixGain); const mix = gainNode(mixGain);
onceEnded(o, () => { onceEnded(o, () => {
o.disconnect(); releaseAudioNode(o);
g.disconnect(); releaseAudioNode(g);
sat.disconnect(); releaseAudioNode(sat);
noise.node.disconnect(); releaseAudioNode(noise.node);
noiseGain.disconnect(); releaseAudioNode(noiseGain);
mix.disconnect(); releaseAudioNode(mix);
onended(); onended();
}); });
@ -386,8 +386,8 @@ export function registerSynthSounds() {
const { duration } = value; const { duration } = value;
onceEnded(o, () => { onceEnded(o, () => {
o.disconnect(); releaseAudioNode(o);
g.disconnect(); releaseAudioNode(g);
onended(); onended();
}); });
@ -491,8 +491,8 @@ export function getOscillator(s, t, value, onended) {
} }
onceEnded(o, () => { onceEnded(o, () => {
noiseMix || o.disconnect(); noiseMix || releaseAudioNode(o);
noiseMix?.node.disconnect(); releaseAudioNode(noiseMix?.node);
onended(); onended();
}); });
o.start(t); o.start(t);

View file

@ -320,10 +320,10 @@ export async function onTriggerSynth(t, value, onended, tables, cps, frameLen) {
ac, ac,
() => { () => {
releaseAudioNode(source); releaseAudioNode(source);
vibratoOscillator?.stop(); releaseAudioNode(vibratoOscillator);
fm?.stop(); fm?.stop();
wtPosModulators?.disconnect(); releaseAudioNode(wtPosModulators);
wtWarpModulators?.disconnect(); releaseAudioNode(wtWarpModulators);
onended(); onended();
}, },
t, t,