Start · Sprachen · JavaScript · Referenz · SpeechRecognitionResult.isFinal

SpeechRecognitionResult.isFinal

Eigenschaft

Schreibgeschützter boolescher Wert: <code>true</code>, wenn das Erkennungsergebnis endgültig ist und sich nicht mehr ändert, sonst <code>false</code> (Zwischenergebnis).

seit JavaScript Web Speech API – Chrome/Edge (mit Präfix webkit), Kategorie: webapi

Signatur

SpeechRecognitionResult.isFinal

Beschreibung

Die Eigenschaft isFinal eines SpeechRecognitionResult-Objekts zeigt an, ob die Spracherkennung für diesen Abschnitt fertig ist. Bei true ist das Ergebnis endgültig: Das Transkript wird sich nicht mehr ändern und kann dauerhaft übernommen werden, etwa in ein Textfeld oder zur Befehlsauswertung.

Wichtig ist die Eigenschaft vor allem mit SpeechRecognition.interimResults = true. Dann liefert der Browser während des Sprechens laufend Zwischenergebnisse (isFinal === false), die bei jedem result-Ereignis durch genauere Varianten ersetzt werden, bis schließlich ein endgültiges Ergebnis kommt. Ohne Zwischenergebnisse sind alle gelieferten Ergebnisse in der Regel endgültig.

Üblicherweise geht man im result-Handler ab event.resultIndex über event.results (eine SpeechRecognitionResultList), trennt anhand von isFinal in „bestätigten“ und „vorläufigen“ Text und stellt vorläufigen Text z. B. grau oder kursiv dar.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das Ergebnis endgültig ist; false bei einem Zwischenergebnis, das sich noch ändern kann.

Beispiele

Endgültige und vorläufige Ergebnisse trennen

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.interimResults = true;
recognition.continuous = true;

let finalText = '';

recognition.addEventListener('result', (event) => {
  let interimText = '';
  for (let i = event.resultIndex; i < event.results.length; i++) {
    const result = event.results[i];
    if (result.isFinal) {
      finalText += result[0].transcript;
    } else {
      interimText += result[0].transcript;
    }
  }
  console.log('Endgültig:', finalText);
  console.log('Vorläufig:', interimText);
});

recognition.start();
Vorläufig: hallo Vorläufig: hallo wel Endgültig: hallo Welt

Live-Diktat mit hervorgehobenem Zwischentext

// HTML: <p id="final"></p><p id="interim" class="grau"></p>
const finalEl = document.querySelector('#final');
const interimEl = document.querySelector('#interim');

const Rec = window.SpeechRecognition || window.webkitSpeechRecognition;
const rec = new Rec();
rec.lang = 'de-DE';
rec.interimResults = true;

rec.onresult = (event) => {
  const results = Array.from(event.results);
  finalEl.textContent = results
    .filter((r) => r.isFinal)
    .map((r) => r[0].transcript)
    .join(' ');
  interimEl.textContent = results
    .filter((r) => !r.isFinal)
    .map((r) => r[0].transcript)
    .join(' ');
};

document.querySelector('#start').addEventListener('click', () => rec.start());

Sprachbefehl erst bei endgültigem Ergebnis ausführen

const Rec = window.SpeechRecognition || window.webkitSpeechRecognition;
const rec = new Rec();
rec.lang = 'de-DE';
rec.interimResults = true;

const befehle = {
  'licht an': () => console.log('💡 Licht eingeschaltet'),
  'licht aus': () => console.log('🌑 Licht ausgeschaltet'),
};

rec.onresult = (event) => {
  const result = event.results[event.results.length - 1];
  if (!result.isFinal) return; // Zwischenergebnisse ignorieren
  const text = result[0].transcript.trim().toLowerCase();
  befehle[text]?.() ?? console.log(`Unbekannter Befehl: ${text}`);
};

rec.start();
💡 Licht eingeschaltet

// Wichtig · Fallstricke

  • Schreibgeschützt: Zuweisungen an isFinal werden ignoriert (im Strict Mode TypeError).
  • Aktionen mit Nebenwirkungen (Befehle ausführen, Daten speichern) nur bei isFinal === true auslösen – Zwischenergebnisse ändern sich oft noch, etwa „wel“ → „Welt“.
  • Bei Zwischenergebnissen nie Text anhängen, sondern jedes Mal ersetzen, sonst entstehen Dopplungen. Für endgültigen Text ab event.resultIndex iterieren, damit nichts doppelt übernommen wird.
  • Browserunterstützung: Chrome und Edge nur mit Präfix webkitSpeechRecognition, oft mit serverseitiger Erkennung (Internetverbindung nötig, Datenschutz beachten). Safari ab 14.1; Firefox unterstützt die Spracherkennung standardmäßig nicht. Vorher auf Unterstützung prüfen.
  • Braucht einen sicheren Kontext (HTTPS) und die Freigabe für das Mikrofon.