Spaces:
Sleeping
Sleeping
document.addEventListener("DOMContentLoaded", function() { | |
const recordBtn = document.getElementById("record-btn"); | |
const audioPlayer = document.getElementById("audio-player"); | |
const chatContainer = document.getElementById("chat-container"); | |
let mediaRecorder; | |
let chunks = []; | |
recordBtn.addEventListener("click", function() { | |
if (mediaRecorder && mediaRecorder.state === "recording") { | |
mediaRecorder.stop(); | |
recordBtn.textContent = "Bonyeza kitufe cha kurekodi na uliza swali lako"; | |
} else { | |
navigator.mediaDevices.getUserMedia({ audio: true }) | |
.then(function(stream) { | |
mediaRecorder = new MediaRecorder(stream); | |
chunks = []; | |
mediaRecorder.addEventListener("dataavailable", function(e) { | |
chunks.push(e.data); | |
}); | |
mediaRecorder.addEventListener("stop", function() { | |
const audioBlob = new Blob(chunks, { type: "audio/wav" }); | |
sendAudioToServer(audioBlob); | |
}); | |
mediaRecorder.start(); | |
recordBtn.textContent = "Acha kurekodi"; | |
}) | |
.catch(function(err) { | |
console.error("Error accessing microphone:", err); | |
}); | |
} | |
}); | |
function sendAudioToServer(audioBlob) { | |
const formData = new FormData(); | |
formData.append("audio", audioBlob, "recording.wav"); | |
fetch("/transcribe", { | |
method: "POST", | |
body: formData | |
}) | |
.then(response => response.json()) | |
.then(data => { | |
const transcribedText = data.text; | |
displayUserMessage(transcribedText); | |
// Send the transcribed text to the server for generating a response | |
const responseFormData = new FormData(); | |
responseFormData.append("text", transcribedText); | |
fetch("/generate_response", { | |
method: "POST", | |
body: responseFormData | |
}) | |
.then(response => response.json()) | |
.then(data => { | |
const responseText = data.response; | |
displayAssistantMessage(responseText); | |
// Send the response text to the server for audio inference | |
const inferenceFormData = new FormData(); | |
inferenceFormData.append("text", responseText); | |
fetch("/inference", { | |
method: "POST", | |
body: inferenceFormData | |
}) | |
.then(response => response.json()) | |
.then(data => { | |
const audioUrl = data.audio_url; | |
audioPlayer.src = audioUrl; | |
audioPlayer.style.display = "block"; | |
}); | |
}); | |
}); | |
} | |
function displayUserMessage(text) { | |
const messageElement = document.createElement("div"); | |
messageElement.classList.add("user-message"); | |
messageElement.textContent = text; | |
chatContainer.appendChild(messageElement); | |
} | |
function displayAssistantMessage(text) { | |
const messageElement = document.createElement("div"); | |
messageElement.classList.add("assistant-message"); | |
messageElement.textContent = text; | |
chatContainer.appendChild(messageElement); | |
} | |
}); |