Spaces:
Building
Building
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(); | |
}); | |