|
@@ -1,6 +1,6 @@
|
|
<script lang="ts">
|
|
<script lang="ts">
|
|
import { config, models, settings, showCallOverlay } from '$lib/stores';
|
|
import { config, models, settings, showCallOverlay } from '$lib/stores';
|
|
- import { onMount, tick, getContext } from 'svelte';
|
|
|
|
|
|
+ import { onMount, tick, getContext, onDestroy } from 'svelte';
|
|
|
|
|
|
import {
|
|
import {
|
|
blobToFile,
|
|
blobToFile,
|
|
@@ -47,6 +47,7 @@
|
|
let rmsLevel = 0;
|
|
let rmsLevel = 0;
|
|
let hasStartedSpeaking = false;
|
|
let hasStartedSpeaking = false;
|
|
let mediaRecorder;
|
|
let mediaRecorder;
|
|
|
|
+ let audioStream = null;
|
|
let audioChunks = [];
|
|
let audioChunks = [];
|
|
|
|
|
|
let videoInputDevices = [];
|
|
let videoInputDevices = [];
|
|
@@ -212,17 +213,23 @@
|
|
} else {
|
|
} else {
|
|
audioChunks = [];
|
|
audioChunks = [];
|
|
mediaRecorder = false;
|
|
mediaRecorder = false;
|
|
|
|
+
|
|
|
|
+ if (audioStream) {
|
|
|
|
+ const tracks = audioStream.getTracks();
|
|
|
|
+ tracks.forEach((track) => track.stop());
|
|
|
|
+ }
|
|
|
|
+ audioStream = null;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
const startRecording = async () => {
|
|
const startRecording = async () => {
|
|
- const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
|
|
- mediaRecorder = new MediaRecorder(stream);
|
|
|
|
|
|
+ audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
|
|
+ mediaRecorder = new MediaRecorder(audioStream);
|
|
|
|
|
|
mediaRecorder.onstart = () => {
|
|
mediaRecorder.onstart = () => {
|
|
console.log('Recording started');
|
|
console.log('Recording started');
|
|
audioChunks = [];
|
|
audioChunks = [];
|
|
- analyseAudio(stream);
|
|
|
|
|
|
+ analyseAudio(audioStream);
|
|
};
|
|
};
|
|
|
|
|
|
mediaRecorder.ondataavailable = (event) => {
|
|
mediaRecorder.ondataavailable = (event) => {
|
|
@@ -615,6 +622,12 @@
|
|
await stopCamera();
|
|
await stopCamera();
|
|
};
|
|
};
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ onDestroy(async () => {
|
|
|
|
+ await stopAllAudio();
|
|
|
|
+ await stopRecordingCallback(false);
|
|
|
|
+ await stopCamera();
|
|
|
|
+ });
|
|
</script>
|
|
</script>
|
|
|
|
|
|
{#if $showCallOverlay}
|
|
{#if $showCallOverlay}
|