Signatur
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
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());
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();
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
nomatchin der Praxis nur selten. Oft kommt stattdessen einresult-Ereignis mit niedrigerconfidenceoder einerror-Ereignis miterror === "no-speech". Prüfen Sie deshalb zusätzlich dieconfidence-Werte selbst und behandeln Sieerror. - Kompatibilität: Chromium-Browser bieten die API nur mit Präfix als
webkitSpeechRecognitionan; Safari unterstützt sie ab Version 14.1. Firefox unterstütztSpeechRecognitionstandardmäß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
nomatchfolgt normalerweiseend. Für einen automatischen Neustart müssen Siestart()daher imend-Handler aufrufen. Ein Aufruf während einer laufenden Sitzung löst einenInvalidStateErroraus.