Signatur
Beschreibung
Mit der Eigenschaft interimResults einer SpeechRecognition-Instanz legst du fest, ob das result-Event nur mit endgültigen Erkennungsergebnissen ausgelöst wird oder schon mit Zwischenergebnissen, während der Nutzer noch spricht. Standardwert ist false.
Ist die Eigenschaft true, liefert die Engine laufend Hypothesen, die sie beim weiteren Sprechen noch korrigieren kann. Ob ein Ergebnis endgültig ist, erkennst du an SpeechRecognitionResult.isFinal. So lassen sich „Live-Untertitel“ bauen: Vorläufigen Text zeigst du z. B. grau an und übernimmst ihn erst in den festen Text, wenn isFinal den Wert true hat.
Die Eigenschaft sollte vor dem Aufruf von start() gesetzt werden. Oft wird sie zusammen mit continuous = true verwendet, damit die Erkennung über mehrere Sätze läuft. In diesem Modus enthält event.results alle Ergebnisse der Sitzung. Ab welchem Index sich etwas geändert hat, steht in event.resultIndex.
Rückgabewert
true, wenn Zwischenergebnisse gemeldet werden, sonst false (Standard). Die Eigenschaft ist les- und schreibbar.Beispiele
Zwischenergebnisse aktivieren und auslesen
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.interimResults = true; // vorläufige Ergebnisse liefern
console.log(recognition.interimResults);
recognition.addEventListener('result', (event) => {
const result = event.results[event.results.length - 1];
const text = result[0].transcript;
console.log(result.isFinal ? `Endgültig: ${text}` : `Vorläufig: ${text}`);
});
recognition.start();
Live-Untertitel mit festem und vorläufigem Text
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.continuous = true;
recognition.interimResults = true;
const finalEl = document.querySelector('#final');
const interimEl = document.querySelector('#interim');
let finalText = '';
recognition.onresult = (event) => {
let interim = '';
for (let i = event.resultIndex; i < event.results.length; i++) {
const { transcript } = event.results[i][0];
if (event.results[i].isFinal) {
finalText += transcript + ' ';
} else {
interim += transcript;
}
}
finalEl.textContent = finalText;
interimEl.textContent = interim; // z. B. per CSS grau darstellen
};
document.querySelector('#start').addEventListener('click', () => recognition.start());
Nur endgültige Ergebnisse (Standardverhalten)
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
console.log(recognition.interimResults); // Standardwert
recognition.onresult = (event) => {
// Ohne interimResults ist jedes Ergebnis endgültig
const { transcript, confidence } = event.results[0][0];
console.log(transcript, confidence.toFixed(2));
};
recognition.start();
// Wichtig · Fallstricke
- Browser-Unterstützung: Chrome und Edge bieten die API teils nur als
webkitSpeechRecognitionan. Firefox unterstützt die Spracherkennung nicht. Prüfe deshalb immer, ob sie verfügbar ist. - In Chrome wird der Ton meist an einen Server geschickt und dort ausgewertet. Die Erkennung braucht dann eine Internetverbindung, und das ist datenschutzrelevant. Außerdem ist ein sicherer Kontext (HTTPS) sowie die Erlaubnis für das Mikrofon nötig.
- Zwischenergebnisse können sich noch ändern oder ganz wegfallen. Speichere oder verarbeite verbindlich nur Ergebnisse mit
isFinal === true. - Wenn du
interimResultsänderst, während die Erkennung läuft, wirkt das je nach Browser erst beim nächstenstart(). - Bei
truewird dasresult-Event sehr oft ausgelöst. Halte den Handler deshalb schlank, denn häufige Änderungen am DOM können bremsen. - Bei Zwischenergebnissen ist
confidenceoft0oder wenig aussagekräftig.