Start · Sprachen · JavaScript · Referenz · SpeechRecognitionEvent.results

SpeechRecognitionEvent.results

Eigenschaft

Schreibgeschützte Eigenschaft, die eine <code>SpeechRecognitionResultList</code> mit allen Erkennungsergebnissen der aktuellen Sitzung liefert.

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

Signatur

SpeechRecognitionEvent.results

Beschreibung

Die schreibgeschützte Eigenschaft results eines SpeechRecognitionEvent enthält eine SpeechRecognitionResultList. In dieser Liste stehen alle Erkennungsergebnisse der laufenden Sitzung, nicht nur die, die sich mit dem aktuellen Ereignis geändert haben. Jeder Eintrag ist ein SpeechRecognitionResult, das eine oder mehrere Alternativen (SpeechRecognitionAlternative) mit transcript und confidence enthält.

Gelesen wird die Eigenschaft fast immer im result-Ereignis, also über recognition.onresult oder addEventListener("result", …). Zusammen mit event.resultIndex findest du heraus, ab welchem Index sich Ergebnisse geändert haben. So lassen sich neue Teilergebnisse gezielt verarbeiten, ohne die ganze Liste jedes Mal neu durchzugehen.

Jedes SpeechRecognitionResult hat die Eigenschaft isFinal. Wenn recognition.interimResults = true gesetzt ist, stehen in der Liste auch vorläufige Ergebnisse, die sich später noch ändern können. Nur Ergebnisse mit isFinal === true gelten als endgültig. Bei continuous = true wächst die Liste während der Sitzung weiter. Sonst enthält sie meist nur ein einziges Ergebnis.

Rückgabewert

Typ
SpeechRecognitionResultList
Beschreibung
Eine array-ähnliche, schreibgeschützte Liste von SpeechRecognitionResult-Objekten. Zugriff über results[i] oder results.item(i), Anzahl über results.length.

Beispiele

Einfache Spracheingabe: bestes Transkript auslesen

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = "de-DE";
recognition.maxAlternatives = 1;

recognition.onresult = (event) => {
  // Erstes Ergebnis, erste (beste) Alternative
  const { transcript, confidence } = event.results[0][0];
  console.log(`Erkannt: "${transcript}" (Sicherheit: ${confidence.toFixed(2)})`);
};

document.querySelector("#mic").addEventListener("click", () => recognition.start());
Erkannt: "hallo welt" (Sicherheit: 0.92)

Live-Diktat mit Zwischen- und Endergebnissen

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

const output = document.querySelector("#diktat");
let finalText = "";

recognition.addEventListener("result", (event) => {
  let interim = "";
  // Nur die geänderten Ergebnisse ab resultIndex verarbeiten
  for (let i = event.resultIndex; i < event.results.length; i++) {
    const result = event.results[i];
    if (result.isFinal) {
      finalText += result[0].transcript + " ";
    } else {
      interim += result[0].transcript;
    }
  }
  output.textContent = finalText + interim;
});

recognition.start();

Alle Alternativen eines Ergebnisses auflisten

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = "de-DE";
recognition.maxAlternatives = 3;

recognition.onresult = ({ results }) => {
  const last = results[results.length - 1];
  // SpeechRecognitionResult ist array-ähnlich, daher Array.from
  const alternatives = Array.from(last, (alt) => ({
    text: alt.transcript,
    sicherheit: Math.round(alt.confidence * 100) + " %"
  }));
  console.table(alternatives);
};

recognition.start();
┌─────────┬──────────────┬────────────┐ │ (index) │ text │ sicherheit │ ├─────────┼──────────────┼────────────┤ │ 0 │ 'Termin morgen' │ '89 %' │ │ 1 │ 'Termine morgen' │ '6 %' │ └─────────┴──────────────┴────────────┘

// Wichtig · Fallstricke

  • Browserunterstützung: Chrome und Edge bieten die API nur als webkitSpeechRecognition an. Safari unterstützt sie ab 14.1. Firefox hat sie standardmäßig nicht aktiviert. Prüfe deshalb immer mit Feature-Detection: window.SpeechRecognition || window.webkitSpeechRecognition.
  • results enthält alle Ergebnisse der Sitzung. Wenn du bei jedem Ereignis die ganze Liste verarbeitest, entstehen im continuous-Modus doppelte Texte. Starte die Schleife deshalb bei event.resultIndex.
  • Die Liste ist kein echtes Array. Methoden wie map oder filter gibt es darauf nicht. Nutze Array.from(event.results) oder eine for-Schleife.
  • Zwischenergebnisse (isFinal === false) können beim nächsten Ereignis ersetzt werden. Speichere sie also nicht dauerhaft.
  • confidence kann in manchen Implementierungen 0 sein, zum Beispiel bei Zwischenergebnissen. Verlasse dich nicht blind darauf.
  • Datenschutz: Chrome schickt die Audiodaten zur Erkennung an Server von Google. Die API funktioniert nur in sicheren Kontexten (HTTPS) und erst, nachdem der Nutzer den Mikrofonzugriff erlaubt hat.