projekt-7/Script_Speech_recognition/speech_recognition.js

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.");
}
});