Spaces:
Sleeping
Sleeping
| const video = document.getElementById("localVideo"); | |
| const messages = document.getElementById("messages"); | |
| const startBtn = document.getElementById("startInterview"); | |
| async function startCamera() { | |
| try { | |
| const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); | |
| video.srcObject = stream; | |
| } catch (err) { | |
| alert("Could not access camera/mic: " + err.message); | |
| } | |
| } | |
| function appendMessage(sender, text) { | |
| const msg = document.createElement("div"); | |
| msg.textContent = `${sender}: ${text}`; | |
| messages.appendChild(msg); | |
| messages.scrollTop = messages.scrollHeight; | |
| } | |
| async function askBot(message) { | |
| const res = await fetch("/ask", { | |
| method: "POST", | |
| headers: { "Content-Type": "application/json" }, | |
| body: JSON.stringify({ message }) | |
| }); | |
| const data = await res.json(); | |
| return data.response; | |
| } | |
| function speak(text) { | |
| const utterance = new SpeechSynthesisUtterance(text); | |
| utterance.lang = "en-US"; | |
| utterance.pitch = 1.1; | |
| utterance.rate = 1; | |
| speechSynthesis.speak(utterance); | |
| } | |
| function startSpeechRecognition() { | |
| const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)(); | |
| recognition.lang = "en-US"; | |
| recognition.interimResults = false; | |
| recognition.maxAlternatives = 1; | |
| recognition.start(); | |
| recognition.onresult = async (event) => { | |
| const transcript = event.results[0][0].transcript; | |
| appendMessage("You", transcript); | |
| const reply = await askBot(transcript); | |
| appendMessage("Interviewer", reply); | |
| speak(reply); | |
| }; | |
| recognition.onerror = (event) => { | |
| console.error("Speech recognition error:", event.error); | |
| }; | |
| } | |
| startBtn.addEventListener("click", async () => { | |
| await startCamera(); | |
| const opening = await askBot("Start the interview."); | |
| appendMessage("Interviewer", opening); | |
| speak(opening); | |
| startSpeechRecognition(); | |
| }); | |