Spaces:
Running
Running
// static/script.js | |
document.addEventListener('DOMContentLoaded', () => { | |
const recordButton = document.getElementById('recordButton'); | |
const stopButton = document.getElementById('stopButton'); | |
const statusDiv = document.getElementById('status'); | |
const resultDiv = document.getElementById('result'); | |
let mediaRecorder; | |
let audioChunks = []; | |
// --- Bắt đầu ghi âm --- | |
recordButton.addEventListener('click', async () => { | |
try { | |
const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); | |
mediaRecorder = new MediaRecorder(stream); | |
mediaRecorder.ondataavailable = event => { | |
audioChunks.push(event.data); | |
}; | |
mediaRecorder.onstop = () => { | |
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' }); | |
sendAudioToServer(audioBlob); | |
audioChunks = []; | |
}; | |
mediaRecorder.start(); | |
statusDiv.textContent = '🔴 Đang ghi âm...'; | |
recordButton.disabled = true; | |
stopButton.disabled = false; | |
} catch (error) { | |
console.error('Lỗi khi truy cập micro:', error); | |
statusDiv.textContent = 'Lỗi: Không thể truy cập micro.'; | |
} | |
}); | |
// --- Dừng ghi âm --- | |
stopButton.addEventListener('click', () => { | |
mediaRecorder.stop(); | |
statusDiv.textContent = 'Đang xử lý... Vui lòng chờ.'; | |
recordButton.disabled = false; | |
stopButton.disabled = true; | |
}); | |
// --- Gửi audio lên server --- | |
async function sendAudioToServer(audioBlob) { | |
const formData = new FormData(); | |
formData.append('audio_file', audioBlob, 'recording.wav'); | |
try { | |
resultDiv.textContent = '...'; // Reset kết quả | |
const response = await fetch('/predict', { | |
method: 'POST', | |
body: formData, | |
}); | |
if (response.ok) { | |
const data = await response.json(); | |
resultDiv.textContent = data.prediction; | |
statusDiv.textContent = 'Hoàn thành! Sẵn sàng ghi âm lần nữa.'; | |
} else { | |
const errorData = await response.json(); | |
throw new Error(errorData.error || 'Lỗi không xác định từ server.'); | |
} | |
} catch (error) { | |
console.error('Lỗi khi gửi audio:', error); | |
statusDiv.textContent = 'Đã xảy ra lỗi khi gửi audio.'; | |
resultDiv.textContent = 'Lỗi!'; | |
} | |
} | |
}); | |