From 8f56ef6507d5c408fd774201efea0b1337f2b6fe Mon Sep 17 00:00:00 2001 From: "Jade (Rose) Rowland" Date: Sun, 31 Dec 2023 11:39:14 -0500 Subject: [PATCH] suspend and close exisiting audio context --- packages/superdough/superdough.mjs | 3 ++- website/src/repl/panel/AudioDeviceSelector.jsx | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/superdough/superdough.mjs b/packages/superdough/superdough.mjs index 41b24d94..f6ce6c60 100644 --- a/packages/superdough/superdough.mjs +++ b/packages/superdough/superdough.mjs @@ -30,11 +30,12 @@ let audioContext; export const setDefaultAudioContext = () => { audioContext = new AudioContext(); + return audioContext; }; export const getAudioContext = () => { if (!audioContext) { - setDefaultAudioContext(); + return setDefaultAudioContext(); } return audioContext; }; diff --git a/website/src/repl/panel/AudioDeviceSelector.jsx b/website/src/repl/panel/AudioDeviceSelector.jsx index c2302444..98e3e068 100644 --- a/website/src/repl/panel/AudioDeviceSelector.jsx +++ b/website/src/repl/panel/AudioDeviceSelector.jsx @@ -19,10 +19,14 @@ export const getAudioDevices = async () => { }; export const setAudioDevice = async (id) => { - const audioCtx = getAudioContext(); + let audioCtx = getAudioContext(); if (audioCtx.sinkId === id) { return; } + await audioCtx.suspend(); + await audioCtx.close(); + audioCtx = setDefaultAudioContext(); + await audioCtx.resume(); const isValidID = (id ?? '').length > 0; if (isValidID) { try { @@ -30,9 +34,6 @@ export const setAudioDevice = async (id) => { } catch { logger('failed to set audio interface', 'warning'); } - } else { - // reset the audio context and dont set the sink id if it is invalid AKA System Standard selection - setDefaultAudioContext(); } initializeAudioOutput(); };