Properly stop mediaRecorder stream to clear microphone in-use state

This commit is contained in:
Debanjum Singh Solanky 2023-11-26 20:33:26 -08:00
parent 8faa63c3c6
commit 20ef5bfc93
3 changed files with 12 additions and 3 deletions

View file

@ -618,6 +618,8 @@
});
} else if (mediaRecorder.state === 'recording') {
mediaRecorder.stop();
mediaRecorder.stream.getTracks().forEach(track => track.stop());
mediaRecorder = null;
speakButtonImg.src = './assets/icons/microphone-solid.svg';
speakButtonImg.alt = 'Transcribe';
}

View file

@ -1,4 +1,4 @@
import { App, Modal, RequestUrlParam, request, requestUrl, setIcon } from 'obsidian';
import { App, Modal, request, requestUrl, setIcon } from 'obsidian';
import { KhojSetting } from 'src/settings';
import fetch from "node-fetch";
@ -321,6 +321,8 @@ export class KhojChatModal extends Modal {
});
} else if (this.mediaRecorder.state === 'recording') {
this.mediaRecorder.stop();
this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
this.mediaRecorder = undefined;
setIcon(transcribeButton, "mic");
}
}

View file

@ -407,11 +407,14 @@ To get started, just start typing below. You can also type / to see a list of co
try {
const responseAsJson = JSON.parse(chunk);
if (responseAsJson.detail) {
newResponseText.innerHTML += responseAsJson.detail;
rawResponse += responseAsJson.detail;
}
} catch (error) {
// If the chunk is not a JSON object, just display it as is
newResponseText.innerHTML += chunk;
rawResponse += chunk;
} finally {
newResponseText.innerHTML = "";
newResponseText.appendChild(formatHTMLMessage(rawResponse));
}
} else {
// If the chunk is not a JSON object, just display it as is
@ -635,6 +638,8 @@ To get started, just start typing below. You can also type / to see a list of co
});
} else if (mediaRecorder.state === 'recording') {
mediaRecorder.stop();
mediaRecorder.stream.getTracks().forEach(track => track.stop());
mediaRecorder = null;
speakButtonImg.src = '/static/assets/icons/microphone-solid.svg';
speakButtonImg.alt = 'Transcribe';
}