Signatur
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());
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();
// 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 mitnetworkauf. - 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
resultdas Ereignisnomatch. Behandeln Sie außerdemerrorundend. - resultIndex beachten: Bei
continuous = trueenthältevent.resultsalle Ergebnisse der Sitzung. Iterieren Sie abevent.resultIndex, sonst verarbeiten Sie Text doppelt. - confidence: Der Wert kann je nach Browser
0sein, besonders bei Zwischenergebnissen. Verlassen Sie sich nicht allein darauf. - Ohne
continuousendet die Sitzung nach dem ersten endgültigen Ergebnis automatisch.