mirror of
https://github.com/oobabooga/text-generation-webui.git
synced 2024-11-25 01:09:22 +01:00
8074fba18d
--------- Co-authored-by: RandoInternetPreson <aaronalai1@gmail.com>
87 lines
3.1 KiB
JavaScript
87 lines
3.1 KiB
JavaScript
console.log("Whisper STT script loaded");
|
|
|
|
let mediaRecorder;
|
|
let audioChunks = [];
|
|
let isRecording = false;
|
|
|
|
window.startStopRecording = function() {
|
|
if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
|
|
console.error("getUserMedia not supported on your browser!");
|
|
return;
|
|
}
|
|
|
|
if (isRecording == false) {
|
|
//console.log("Start recording function called");
|
|
navigator.mediaDevices.getUserMedia({ audio: true })
|
|
.then(stream => {
|
|
//console.log("Got audio stream");
|
|
mediaRecorder = new MediaRecorder(stream);
|
|
audioChunks = []; // Reset audio chunks
|
|
mediaRecorder.start();
|
|
//console.log("MediaRecorder started");
|
|
recButton.icon;
|
|
recordButton.innerHTML = recButton.innerHTML = "Stop";
|
|
isRecording = true;
|
|
|
|
mediaRecorder.addEventListener("dataavailable", event => {
|
|
//console.log("Data available event, data size: ", event.data.size);
|
|
audioChunks.push(event.data);
|
|
});
|
|
|
|
mediaRecorder.addEventListener("stop", () => {
|
|
//console.log("MediaRecorder stopped");
|
|
if (audioChunks.length > 0) {
|
|
const audioBlob = new Blob(audioChunks, { type: "audio/webm" });
|
|
//console.log("Audio blob created, size: ", audioBlob.size);
|
|
const reader = new FileReader();
|
|
reader.readAsDataURL(audioBlob);
|
|
reader.onloadend = function() {
|
|
const base64data = reader.result;
|
|
//console.log("Audio converted to base64, length: ", base64data.length);
|
|
|
|
const audioBase64Input = document.querySelector("#audio-base64 textarea");
|
|
if (audioBase64Input) {
|
|
audioBase64Input.value = base64data;
|
|
audioBase64Input.dispatchEvent(new Event("input", { bubbles: true }));
|
|
audioBase64Input.dispatchEvent(new Event("change", { bubbles: true }));
|
|
//console.log("Updated textarea with base64 data");
|
|
} else {
|
|
console.error("Could not find audio-base64 textarea");
|
|
}
|
|
};
|
|
} else {
|
|
console.error("No audio data recorded for Whisper");
|
|
}
|
|
});
|
|
});
|
|
} else {
|
|
//console.log("Stopping MediaRecorder");
|
|
recordButton.innerHTML = recButton.innerHTML = "Rec.";
|
|
isRecording = false;
|
|
mediaRecorder.stop();
|
|
}
|
|
};
|
|
|
|
const recordButton = gradioApp().querySelector("#record-button");
|
|
recordButton.addEventListener("click", window.startStopRecording);
|
|
|
|
|
|
function gradioApp() {
|
|
const elems = document.getElementsByTagName("gradio-app");
|
|
const gradioShadowRoot = elems.length == 0 ? null : elems[0].shadowRoot;
|
|
return gradioShadowRoot ? gradioShadowRoot : document;
|
|
}
|
|
|
|
|
|
// extra rec button next to generate button
|
|
var recButton = recordButton.cloneNode(true);
|
|
var generate_button = document.getElementById("Generate");
|
|
generate_button.insertAdjacentElement("afterend", recButton);
|
|
|
|
recButton.style.setProperty("margin-left", "-10px");
|
|
recButton.innerHTML = "Rec.";
|
|
|
|
recButton.addEventListener("click", function() {
|
|
recordButton.click();
|
|
});
|