72 lines
2.9 KiB
JavaScript
72 lines
2.9 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function () {
|
|
const startBtn = document.getElementById('startBtn'); // Microphone button
|
|
const inputText = document.getElementById('inputText'); // Textarea
|
|
const statusText = document.getElementById('statusText'); // Optional status display
|
|
const timerDisplay = document.getElementById('timerDisplay'); // Timer display (if used)
|
|
|
|
if ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window) {
|
|
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
|
|
recognition.lang = 'sk-SK'; // Set language to Slovak
|
|
recognition.interimResults = true;
|
|
recognition.continuous = true;
|
|
|
|
let recognizing = false; // Recognition state
|
|
let timerInterval; // Timer interval
|
|
|
|
// Start/Stop speech recognition
|
|
startBtn.onclick = () => {
|
|
if (!recognizing) {
|
|
recognition.start();
|
|
recognizing = true;
|
|
startBtn.textContent = "🛑"; // Change icon to indicate recording
|
|
statusText && (statusText.textContent = "Nahrávanie prebieha...");
|
|
startTimer();
|
|
} else {
|
|
recognition.stop();
|
|
recognizing = false;
|
|
startBtn.textContent = "🎤"; // Reset icon
|
|
statusText && (statusText.textContent = "Nahrávanie ukončené.");
|
|
stopTimer();
|
|
}
|
|
};
|
|
|
|
// Timer functionality
|
|
function startTimer() {
|
|
const startTime = Date.now();
|
|
timerInterval = setInterval(() => {
|
|
const elapsed = Math.floor((Date.now() - startTime) / 1000);
|
|
timerDisplay && (timerDisplay.textContent = `${elapsed}s`);
|
|
}, 1000);
|
|
}
|
|
|
|
function stopTimer() {
|
|
clearInterval(timerInterval);
|
|
timerDisplay && (timerDisplay.textContent = "");
|
|
}
|
|
|
|
// Speech recognition results
|
|
recognition.onresult = function (event) {
|
|
let interim = "";
|
|
for (let i = event.resultIndex; i < event.results.length; i++) {
|
|
const transcript = event.results[i][0].transcript;
|
|
if (event.results[i].isFinal) {
|
|
inputText.value += transcript + " ";
|
|
} else {
|
|
interim += transcript;
|
|
}
|
|
}
|
|
};
|
|
|
|
// Handle recognition errors
|
|
recognition.onerror = function (event) {
|
|
console.error("Speech recognition error:", event.error);
|
|
recognizing = false;
|
|
startBtn.textContent = "🎤"; // Reset icon
|
|
statusText && (statusText.textContent = "Chyba pri nahrávaní. Skúste znova.");
|
|
stopTimer();
|
|
};
|
|
} else {
|
|
alert("Tento prehliadač nepodporuje rozpoznávanie reči.");
|
|
}
|
|
});
|