fix(voice): cleanup audio context on processing init failure
This commit is contained in:
parent
7a85935eee
commit
bdd5ff768e
|
|
@ -415,6 +415,28 @@ const VoiceProvider = memo(({ children }: TVoiceProviderProps) => {
|
|||
let rnnoiseNode: AudioWorkletNode | undefined;
|
||||
let gateNode: AudioWorkletNode | undefined;
|
||||
|
||||
const cleanupLocalProcessing = async () => {
|
||||
try {
|
||||
gateNode?.disconnect();
|
||||
rnnoiseNode?.disconnect();
|
||||
deepFilterNode?.disconnect();
|
||||
source.disconnect();
|
||||
dest.disconnect();
|
||||
deepFilterCore?.destroy?.();
|
||||
} catch {
|
||||
// ignore cleanup failures
|
||||
}
|
||||
|
||||
try {
|
||||
if (ctx.state !== 'closed') {
|
||||
await ctx.close();
|
||||
}
|
||||
} catch {
|
||||
// ignore context close failures
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
if (useDeepFilterNet) {
|
||||
const deepFilterSuppression = sensitivityToDeepFilterLevel(
|
||||
devices.voiceSensitivity ?? 70
|
||||
|
|
@ -488,6 +510,10 @@ const VoiceProvider = memo(({ children }: TVoiceProviderProps) => {
|
|||
});
|
||||
|
||||
return dest.stream;
|
||||
} catch (err) {
|
||||
await cleanupLocalProcessing();
|
||||
throw err;
|
||||
}
|
||||
}, [devices.noiseSuppressionDeepFilterNet, devices.noiseSuppressionRnnoise, devices.keyboardSuppression, devices.voiceSensitivity, cleanupAudioProcessing]);
|
||||
|
||||
const acquireMicStream = useCallback(async (): Promise<{ stream: MediaStream; track: MediaStreamTrack; raw: MediaStream }> => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue