Start · Sprachen · JavaScript · Referenz · SpeechRecognition.interimResults

SpeechRecognition.interimResults

Eigenschaft

Legt fest, ob die Spracherkennung schon vorläufige (noch nicht endgültige) Ergebnisse liefert (<code>true</code>) oder nur endgültige (<code>false</code>, Standard).

seit JavaScript Web Speech API – Chrome 25+ (mit Präfix webkit), E Kategorie: webapi

Signatur

SpeechRecognition.interimResults

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

Typ
boolean
Beschreibung
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();
true Vorläufig: hallo Vorläufig: hallo wie Endgültig: Hallo, wie geht's?

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();
false Termin morgen um zehn 0.92

// Wichtig · Fallstricke

  • Browser-Unterstützung: Chrome und Edge bieten die API teils nur als webkitSpeechRecognition an. 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ächsten start().
  • Bei true wird das result-Event sehr oft ausgelöst. Halte den Handler deshalb schlank, denn häufige Änderungen am DOM können bremsen.
  • Bei Zwischenergebnissen ist confidence oft 0 oder wenig aussagekräftig.