From 63808e9ebb7a42f65a96fd0cb447521523168906 Mon Sep 17 00:00:00 2001 From: "Jade (Rose) Rowland" Date: Sat, 22 Mar 2025 16:30:18 -0400 Subject: [PATCH] working --- packages/superdough/sampler.mjs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/superdough/sampler.mjs b/packages/superdough/sampler.mjs index f5e46d6bb..27bb4691a 100644 --- a/packages/superdough/sampler.mjs +++ b/packages/superdough/sampler.mjs @@ -300,7 +300,8 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) { // destructure adsr here, because the default should be different for synths and samples let [attack, decay, sustain, release] = getADSRValues([value.attack, value.decay, value.sustain, value.release]); - const { bufferSource, sliceDuration, offset } = await getSampleBufferSource(value, bank, resolveUrl); + const sbs = await getSampleBufferSource(value, bank, resolveUrl); + const { bufferSource, sliceDuration, offset,bufferDuration } = sbs // asny stuff above took too long? if (ac.currentTime > t) { @@ -317,13 +318,16 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) { let vibratoOscillator = getVibratoOscillator(bufferSource.detune, value, t); const time = t + nudge; + bufferSource.start(time, offset); const envGain = ac.createGain(); const node = bufferSource.connect(envGain); + const clipDeltaSeconds = 1.5 + // if none of these controls is set, the duration of the sound will be set to the duration of the sample slice - if (clip == null && loop == null && value.release == null) { + if (clip == null && loop == null && value.release == null && bufferDuration < clipDeltaSeconds) { duration = sliceDuration; } let holdEnd = t + duration;