mirror of
https://codeberg.org/uzu/strudel
synced 2026-07-13 06:19:33 -04:00
Ensure zeroGain is cleaned up after use; move start/stop to after callback assigned for safety
This commit is contained in:
committed by
Switch Angel AKA Jade Rose
parent
64f7bc4442
commit
659071a4ee
@@ -211,18 +211,25 @@ export function getVibratoOscillator(param, value, t) {
|
||||
export function webAudioTimeout(audioContext, onComplete, startTime, stopTime) {
|
||||
const constantNode = new ConstantSourceNode(audioContext);
|
||||
|
||||
// Safari requires audio nodes to be connected in order for their onended events
|
||||
// Certain browsers requires audio nodes to be connected in order for their onended events
|
||||
// to fire, so we _mute it_ and then connect it to the destination
|
||||
const zeroGain = gainNode(0);
|
||||
zeroGain.connect(audioContext.destination);
|
||||
constantNode.connect(zeroGain);
|
||||
constantNode.start(startTime);
|
||||
|
||||
// Schedule the `onComplete` callback to occur at `stopTime`
|
||||
constantNode.stop(stopTime);
|
||||
constantNode.onended = () => {
|
||||
// Ensure garbage collection
|
||||
try {
|
||||
zeroGain.disconnect();
|
||||
} catch {}
|
||||
try {
|
||||
constantNode.disconnect();
|
||||
} catch {}
|
||||
onComplete();
|
||||
};
|
||||
constantNode.start(startTime);
|
||||
constantNode.stop(stopTime);
|
||||
return constantNode;
|
||||
}
|
||||
const mod = (freq, range = 1, type = 'sine') => {
|
||||
|
||||
Reference in New Issue
Block a user