Start · Sprachen · JavaScript · Referenz · SpeechRecognitionEvent.resultIndex

SpeechRecognitionEvent.resultIndex

Eigenschaft

Schreibgeschützte Zahl mit dem niedrigsten Index in <code>event.results</code>, dessen Ergebnis sich seit dem letzten <code>result</code>-Event geändert hat.

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

Signatur

SpeechRecognitionEvent.resultIndex

Beschreibung

Die schreibgeschützte Eigenschaft resultIndex eines SpeechRecognitionEvent gibt an, ab welcher Position sich die SpeechRecognitionResultList in event.results geändert hat. Alle Einträge unterhalb dieses Index sind unverändert geblieben und wurden schon in früheren result-Events gemeldet.

Das ist vor allem bei kontinuierlicher Erkennung (recognition.continuous = true) und bei Zwischenergebnissen (recognition.interimResults = true) wichtig. Hier enthält event.results alle Ergebnisse der laufenden Sitzung. Wer bei jedem Event die ganze Liste von vorn durchgeht, verarbeitet dieselben Sätze mehrfach. Mit resultIndex als Startwert der Schleife verarbeitet man nur die neuen oder geänderten Einträge.

Typisch ist dieses Muster: Endgültige Ergebnisse (result.isFinal === true) hängt man fest an ein Transkript an. Vorläufige Ergebnisse zeigt man dagegen nur vorübergehend an, denn sie können im nächsten Event unter demselben Index durch eine bessere Erkennung ersetzt werden.

Rückgabewert

Typ
number
Beschreibung
Eine ganze Zahl ≥ 0: der niedrigste Index in event.results, der sich mit diesem Event geändert hat.

Beispiele

Nur neue Ergebnisse verarbeiten

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

recognition.addEventListener('result', (event) => {
  // Erst ab resultIndex lesen, frühere Ergebnisse sind bekannt
  for (let i = event.resultIndex; i < event.results.length; i++) {
    console.log(`Ergebnis ${i}:`, event.results[i][0].transcript);
  }
});

recognition.start();
Ergebnis 0: hallo welt Ergebnis 1: wie geht es dir

Live-Transkript mit Zwischenergebnissen

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
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 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;
    }
  }
  finalEl.textContent = finalText;
  interimEl.textContent = interimText; // vorläufig, wird ersetzt
};

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

resultIndex zur Fehlersuche protokollieren

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.continuous = true;
recognition.interimResults = true;

recognition.onresult = ({ resultIndex, results }) => {
  console.log(`geändert ab Index ${resultIndex}, Gesamtzahl ${results.length}`);
};

recognition.start();
geändert ab Index 0, Gesamtzahl 1 geändert ab Index 0, Gesamtzahl 1 geändert ab Index 1, Gesamtzahl 2

// Wichtig · Fallstricke

  • Häufiger Fehler: Die Schleife bei 0 statt bei event.resultIndex zu beginnen. Bei continuous = true landen dann Sätze doppelt im Transkript.
  • Vorläufige Ergebnisse können sich am selben Index mehrmals ändern. Sie sollten deshalb nicht fest gespeichert werden, sondern erst, wenn isFinal den Wert true hat.
  • Einige Android-Versionen von Chrome melden bei continuous = true ungewöhnliche resultIndex-Werte oder doppelte Ergebnisse. Auf Mobilgeräten sollte man die Erkennung gezielt testen.
  • Kompatibilität: In Chromium-Browsern ist der Konstruktor oft nur als webkitSpeechRecognition verfügbar. Firefox unterstützt die Erkennung standardmäßig nicht. Chrome schickt die Audiodaten zur Auswertung an einen Server, deshalb funktioniert die Erkennung dort nicht offline. Außerdem ist ein sicherer Kontext (HTTPS) nötig, und der Nutzer muss den Mikrofonzugriff erlauben.