projekt-7/Script_Speech_recognition/speech_recognition.js

102 lines
4.8 KiB
JavaScript
Raw Normal View History

document.addEventListener('DOMContentLoaded', function() {
if ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window) {
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = 'sk-SK'; // Nastavenie jazyka
recognition.interimResults = true;
recognition.maxAlternatives = 1;
recognition.continuous = true;
let recognizing = false; // Stavová premenná, či beží rozpoznávanie
let startTime; // Na ukladanie času začiatku nahrávania
let timerInterval; // Interval na časovač
let transcriptHistory = []; // Na dočasné uloženie textových nahrávok
const startBtn = document.getElementById('startBtn');
const statusText = document.getElementById('statusText');
const timerDisplay = document.getElementById('timerDisplay'); // Element pre zobrazovanie času
const inputText = document.getElementById('inputText'); // Textové pole na výsledky
// Funkcia pre spustenie časovača
function startTimer() {
startTime = Date.now();
timerInterval = setInterval(() => {
const elapsedTime = Math.floor((Date.now() - startTime) / 1000);
timerDisplay.textContent = `${elapsedTime}s`; // Zobrazenie počtu sekúnd
}, 1000); // Aktualizácia každú sekundu
}
// Funkcia pre zastavenie časovača
function stopTimer() {
clearInterval(timerInterval);
timerDisplay.textContent = ''; // Vymaže sa čas po zastavení nahrávania
}
// Po stlačení tlačidla začne alebo zastaví rozpoznávanie reči
startBtn.onclick = () => {
if (!recognizing) {
recognition.start();
recognizing = true;
console.log('Čaká sa na povolenie mikrofónu...');
startBtn.textContent = "🛑 Nahrávanie..."; // Zmena textu na "Nahrávanie..."
statusText.textContent = "Nahrávanie prebieha...";
} else {
recognition.stop();
recognizing = false;
console.log('Rozpoznávanie reči zastavené');
startBtn.textContent = "🎤"; // Obnova textu na "Pripravený na nahrávanie"
statusText.textContent = "Nahrávanie ukončené.";
stopTimer(); // Zastavenie časovača
}
};
// Spustenie po povolení a začatí rozpoznávania
recognition.onstart = function() {
console.log('Rozpoznávanie reči začalo');
startTimer(); // Spustenie časovača po začatí nahrávania
statusText.textContent = "Nahrávanie prebieha..."; // Stav počas nahrávania
};
// Výsledok rozpoznávania
recognition.onresult = function(event) {
let interimTranscript = ''; // Zmeníme na zobrazenie medzivýsledkov
for (let i = event.resultIndex; i < event.results.length; i++) {
const transcript = event.results[i][0].transcript;
// Ak je to medzivýsledok, zobraz ho, ale neulož
if (event.results[i].isFinal) {
transcriptHistory.push(transcript);
inputText.value += transcript + ' '; // Pridanie rozpoznaného textu
} else {
interimTranscript += transcript;
}
}
// Zobrazenie medzivýsledkov, kým nie sú konečné
inputText.value = transcriptHistory.join(' ') + ' ' + interimTranscript;
};
recognition.onend = function() {
// Ak bol mikrofón manuálne zastavený
if (!recognizing) {
recognizing = false;
console.log('Rozpoznávanie reči ukončené');
stopTimer();
startBtn.textContent = "🎤"; // Obnova textu
statusText.textContent = "Nahrávanie ukončené."; // Zmena stavu po ukončení
} else {
// Automaticky znovu spustí rozpoznávanie, ak nebolo zastavené manuálne
recognition.start();
}
}
recognition.onerror = function(event) {
console.error('Chyba pri rozpoznávaní reči:', event.error);
recognizing = false; // V prípade chyby, zastav rozpoznávanie
stopTimer(); // Zastav časovač aj pri chybe
startBtn.textContent = "🎤"; // Obnova textu
statusText.textContent = "Chyba pri nahrávaní. Skúste znova."; // Zobrazenie chyby
};
} else {
alert('Tento prehliadač nepodporuje rozpoznávanie reči.');
}
});