Start · Sprachen · JavaScript · Referenz · SpeechRecognition: result

SpeechRecognition: result

Ereignis

Wird ausgelöst, wenn der Spracherkennungsdienst ein Ergebnis liefert – ein Wort oder eine Phrase wurde erkannt und an die Anwendung übergeben.

seit JavaScript Chrome 25+ (mit Präfix webkit), Edge 79+, Safari 1 Kategorie: webapi

Signatur

recognition.addEventListener("result", handler)

Beschreibung

Das result-Ereignis gehört zu SpeechRecognition aus der Web Speech API. Es ist das zentrale Ereignis jeder Spracherkennung: Sobald der Dienst gesprochene Sprache in Text umgewandelt hat, bekommt der Handler ein SpeechRecognitionEvent. Den Handler registriert man mit recognition.addEventListener("result", handler) oder über die Eigenschaft recognition.onresult = handler.

Das Ereignisobjekt enthält in event.results eine SpeechRecognitionResultList. Jeder Eintrag ist ein SpeechRecognitionResult mit einer oder mehreren Alternativen (SpeechRecognitionAlternative). Jede Alternative hat die Eigenschaften transcript (der erkannte Text) und confidence (Sicherheit zwischen 0 und 1). Über event.resultIndex erfahren Sie, ab welchem Index sich die Liste gegenüber dem letzten Ereignis geändert hat.

Ist interimResults auf true gesetzt, wird das Ereignis mehrfach mit vorläufigen Zwischenergebnissen ausgelöst. Ob ein Ergebnis endgültig ist, zeigt result.isFinal. Mit continuous = true läuft die Erkennung weiter, und die Ergebnisliste wächst während der Sitzung an. Das Ereignis eignet sich für Diktierfunktionen, Sprachbefehle, Sprachsuche und Barrierefreiheits-Funktionen.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, hier immer "result".
$handler Pflicht (event: SpeechRecognitionEvent) => void Callback, der ein SpeechRecognitionEvent mit results und resultIndex bekommt.
$options boolean | AddEventListenerOptions false Optionale Listener-Optionen wie once oder signal.

Beispiele

Einfache Spracheingabe mit addEventListener

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

recognition.addEventListener('result', (event) => {
  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 Zwischenergebnissen über onresult

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

const output = document.querySelector('#text');
let finalText = '';

recognition.onresult = (event) => {
  let interim = '';
  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();

Sprachbefehle erkennen und Listener wieder entfernen

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

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

const onResult = (event) => {
  const alternatives = Array.from(event.results[0]);
  const match = alternatives
    .map((alt) => alt.transcript.trim().toLowerCase())
    .find((text) => text in commands);

  if (match) {
    commands[match]();
    recognition.removeEventListener('result', onResult);
  } else {
    console.log('Befehl nicht erkannt');
  }
};

recognition.addEventListener('result', onResult);
recognition.start();
Licht wird eingeschaltet

// Wichtig · Fallstricke

  • Browser-Unterstützung: In Chrome und Edge nur mit Präfix als webkitSpeechRecognition, Safari ab 14.1. Firefox unterstützt die Spracherkennung standardmäßig nicht. Prüfen Sie die Verfügbarkeit daher immer vorher ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window).
  • Datenschutz: In Chrome wird die Audioaufnahme zur Erkennung an Server von Google geschickt. Weisen Sie die Nutzer darauf hin. Ohne Netzwerk tritt ein error-Ereignis mit network auf.
  • Sicherer Kontext: Das Mikrofon ist nur über HTTPS (oder localhost) zugänglich, und der Nutzer muss den Zugriff erlauben.
  • Kein Treffer: Erkennt der Dienst nichts Passendes, kommt statt result das Ereignis nomatch. Behandeln Sie außerdem error und end.
  • resultIndex beachten: Bei continuous = true enthält event.results alle Ergebnisse der Sitzung. Iterieren Sie ab event.resultIndex, sonst verarbeiten Sie Text doppelt.
  • confidence: Der Wert kann je nach Browser 0 sein, besonders bei Zwischenergebnissen. Verlassen Sie sich nicht allein darauf.
  • Ohne continuous endet die Sitzung nach dem ersten endgültigen Ergebnis automatisch.