Spaces:
Running
Running
File size: 2,524 Bytes
64745dd 35c66c7 64745dd 35c66c7 6f89e0d 35c66c7 64745dd 6f89e0d 64745dd 6f89e0d 64745dd 35c66c7 64745dd 35c66c7 64745dd 6f89e0d 64745dd 35c66c7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
let mediaRecorder;
let audioChunks = [];
let recording = false;
let transcriber;
// Function to load the model
async function loadModel() {
document.getElementById("modelStatus").innerText = "β³ Loading Whisper model...";
transcriber = await window.Transformers.pipeline(
'automatic-speech-recognition',
'Xenova/whisper-tiny.en'
);
document.getElementById("modelStatus").innerText = "β
Model loaded!";
document.getElementById("recordButton").innerText = "π€ Start Recording";
document.getElementById("recordButton").disabled = false;
document.getElementById("status").innerText = "Press the button to record.";
}
// Function to start recording
async function startRecording() {
let stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = (event) => {
audioChunks.push(event.data);
};
mediaRecorder.onstop = async () => {
let audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
let reader = new FileReader();
reader.onloadend = async () => {
let audioURL = reader.result;
document.getElementById("status").innerText = "β³ Transcribing...";
try {
let output = await transcriber(audioURL);
document.getElementById("output").innerText = output.text;
document.getElementById("status").innerText = "β
Done!";
} catch (error) {
document.getElementById("status").innerText = "β Error during transcription.";
console.error(error);
}
};
reader.readAsDataURL(audioBlob);
};
mediaRecorder.start();
audioChunks = [];
recording = true;
document.getElementById("recordButton").innerText = "βΉ Stop Recording";
document.getElementById("status").innerText = "ποΈ Recording...";
}
// Function to stop recording
function stopRecording() {
if (mediaRecorder && recording) {
mediaRecorder.stop();
recording = false;
document.getElementById("recordButton").innerText = "π€ Start Recording";
document.getElementById("status").innerText = "β³ Processing audio...";
}
}
// Toggle recording
document.getElementById("recordButton").addEventListener("click", () => {
if (!recording) {
startRecording();
} else {
stopRecording();
}
});
// Load the model on page load
loadModel();
|