Start · Sprachen · JavaScript · Referenz · SpeechRecognition: nomatch

SpeechRecognition: nomatch

Ereignis

Wird ausgelöst, wenn der Spracherkennungsdienst ein endgültiges Ergebnis liefert, aber nichts mit ausreichender Sicherheit erkannt hat.

seit JavaScript Chromium-Browser (mit webkit-Präfix), Safari 14.1+ Kategorie: webapi

Signatur

recognition.addEventListener("nomatch", handler)

Beschreibung

Das Ereignis nomatch gehört zum Interface SpeechRecognition der Web Speech API. Es wird ausgelöst, wenn der Erkennungsdienst ein endgültiges Ergebnis zurückgibt, in dem keine Erkennung den Schwellenwert für die Sicherheit (confidence) erreicht. Das kommt zum Beispiel bei Nuschelei, starken Hintergrundgeräuschen oder bei Wörtern vor, die nicht zur eingestellten Sprache (lang) passen.

Einen Listener können Sie auf zwei Arten registrieren: mit recognition.addEventListener("nomatch", handler) oder über die Eigenschaft recognition.onnomatch = handler. Der Handler bekommt ein SpeechRecognitionEvent. Dessen Eigenschaft results kann trotzdem Kandidaten mit geringer Sicherheit enthalten, oder sie ist leer.

Typische Einsatzzwecke sind Rückmeldungen an die Nutzer („Das habe ich nicht verstanden, bitte wiederholen“), ein automatischer Neustart der Erkennung oder das Protokollieren gescheiterter Erkennungen in Sprachsteuerungen.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Der Ereignisname "nomatch".
$handler Pflicht (event: SpeechRecognitionEvent) => void Callback, der das SpeechRecognitionEvent erhält. Es hat die Eigenschaften results (SpeechRecognitionResultList) und resultIndex.
$options boolean | AddEventListenerOptions false Optionale Listener-Optionen wie once oder signal.

Rückgabewert

Typ
void
Beschreibung
addEventListener gibt nichts zurück (undefined).

Beispiele

nomatch mit addEventListener behandeln

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

recognition.addEventListener("result", (event) => {
  console.log("Erkannt:", event.results[0][0].transcript);
});

recognition.addEventListener("nomatch", () => {
  console.log("Das habe ich leider nicht verstanden.");
});

document.querySelector("#mic").addEventListener("click", () => recognition.start());
Das habe ich leider nicht verstanden.

onnomatch-Eigenschaft und Kandidaten mit geringer Sicherheit

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

recognition.onnomatch = (event) => {
  const result = event.results?.[0];
  if (result && result.length > 0) {
    const best = result[0];
    console.log(`Unsicher: "${best.transcript}" (${best.confidence.toFixed(2)})`);
  } else {
    console.log("Keine Kandidaten vorhanden.");
  }
};

recognition.start();
Keine Kandidaten vorhanden.

Sprachbefehl erneut anfordern und Listener wieder entfernen

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

let attempts = 0;
const status = document.querySelector("#status");

const onNoMatch = () => {
  attempts += 1;
  status.textContent = `Nicht verstanden (Versuch ${attempts}/3). Bitte wiederholen …`;
  if (attempts >= 3) {
    recognition.removeEventListener("nomatch", onNoMatch);
    status.textContent = "Bitte nutzen Sie die Tastatureingabe.";
  }
};

recognition.addEventListener("nomatch", onNoMatch);

// Nach jedem Durchlauf neu starten, solange noch Versuche übrig sind
recognition.addEventListener("end", () => {
  if (attempts > 0 && attempts < 3) recognition.start();
});

recognition.addEventListener("result", () => { attempts = 0; });
recognition.start();

// Wichtig · Fallstricke

  • Unzuverlässig ausgelöst: Chrome und andere Chromium-Browser feuern nomatch in der Praxis nur selten. Oft kommt stattdessen ein result-Ereignis mit niedriger confidence oder ein error-Ereignis mit error === "no-speech". Prüfen Sie deshalb zusätzlich die confidence-Werte selbst und behandeln Sie error.
  • Kompatibilität: Chromium-Browser bieten die API nur mit Präfix als webkitSpeechRecognition an; Safari unterstützt sie ab Version 14.1. Firefox unterstützt SpeechRecognition standardmäßig nicht. Prüfen Sie die Verfügbarkeit immer vorab (Feature-Detection).
  • Datenschutz und Voraussetzungen: In Chrome wird das Audio zur Erkennung an einen Server geschickt. Die API braucht einen sicheren Kontext (HTTPS) und die Freigabe des Mikrofons durch die Nutzer.
  • Nach nomatch folgt normalerweise end. Für einen automatischen Neustart müssen Sie start() daher im end-Handler aufrufen. Ein Aufruf während einer laufenden Sitzung löst einen InvalidStateError aus.