Signatur
Beschreibung
SpeechRecognitionEvent ist das Ereignisobjekt, das eine SpeechRecognition-Instanz bei den Ereignissen result und nomatch an die Handler übergibt. Es erbt von Event und liefert die erkannten Texte samt Konfidenzwerten.
Die wichtigsten Eigenschaften:
results(SpeechRecognitionResultList, nur lesbar): alle Ergebnisse der laufenden Sitzung. JedesSpeechRecognitionResultenthält eine oder mehrere Alternativen (SpeechRecognitionAlternativemittranscriptundconfidence). Die EigenschaftisFinalzeigt, ob das Ergebnis endgültig ist.resultIndex(number, nur lesbar): Index des niedrigsten Ergebnisses inresults, das sich bei diesem Ereignis geändert hat. Ab dieser Stelle muss man auswerten.interpretationundemma: veraltet bzw. nie umgesetzt. In aktuellen Browsern liefern sie meistnulloder existieren gar nicht.
Man braucht das Interface für Diktierfunktionen, Sprachbefehle und Live-Untertitel. Ist continuous = true und interimResults = true gesetzt, feuert result mehrfach. Dann trennt man mit resultIndex und isFinal die vorläufigen von den endgültigen Texten.
Der Konstruktor new SpeechRecognitionEvent(type, init) existiert. Im Alltag erzeugt aber der Browser die Instanzen. Selbst erzeugt man sie höchstens in Tests.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Nur beim Konstruktor: der Ereignisname, z. B. "result" oder "nomatch". |
|
| $eventInitDict Pflicht | { resultIndex?: number, results: SpeechRecognitionResultList } | Nur beim Konstruktor: Initialisierungsobjekt. results ist Pflicht. resultIndex ist standardmäßig 0. Dazu kommen die üblichen EventInit-Optionen. |
Rückgabewert
results und resultIndex sowie den geerbten Event-Eigenschaften.Beispiele
Einfache Einmal-Erkennung mit Konfidenz
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 1;
recognition.addEventListener('result', (event) => {
const { transcript, confidence } = event.results[0][0];
console.log(`Erkannt: "${transcript}" (${(confidence * 100).toFixed(0)} %)`);
});
recognition.addEventListener('nomatch', () => {
console.log('Nichts Verständliches erkannt.');
});
document.querySelector('#mic').addEventListener('click', () => recognition.start());
Diktat mit vorläufigen und endgültigen Ergebnissen
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.continuous = true;
recognition.interimResults = true;
const output = document.querySelector('#text');
let finalText = '';
recognition.onresult = (event) => {
let interim = '';
// Nur die geänderten Ergebnisse ab resultIndex auswerten
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 über mehrere Alternativen erkennen
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 5;
const commands = {
hell: () => document.body.classList.remove('dark'),
dunkel: () => document.body.classList.add('dark'),
};
recognition.onresult = (event) => {
const alternatives = Array.from(event.results[event.resultIndex]);
const hit = alternatives
.map((alt) => alt.transcript.trim().toLowerCase())
.find((text) => text in commands);
if (hit) {
commands[hit]();
console.log(`Befehl ausgeführt: ${hit}`);
} else {
console.log('Unbekannter Befehl:', alternatives.map((a) => a.transcript));
}
};
recognition.start();
// Wichtig · Fallstricke
- Browser-Unterstützung: Chromium-Browser bieten das Interface nur mit Präfix an (
webkitSpeechRecognition,webkitSpeechRecognitionEvent). In Firefox ist es standardmäßig deaktiviert. Vor der Nutzung sollte man die Verfügbarkeit prüfen. - Datenschutz: Chrome schickt die Audiodaten zur Erkennung an Server von Google. Wer mit sensiblen Inhalten arbeitet, muss die Nutzer darüber informieren. Außerdem sind ein sicherer Kontext (HTTPS) und eine Mikrofon-Berechtigung nötig.
resultIndexbeachten:resultsenthält alle Ergebnisse der Sitzung. Wer jedes Mal ab Index 0 durchläuft, schreibt Texte doppelt.confidenceist bei vorläufigen Ergebnissen oft0und je nach Browser unzuverlässig. Man sollte es nicht als harte Schwelle verwenden.nomatchwird in Chrome selten ausgelöst. Häufiger kommt einresultmit niedriger Konfidenz oder einerrormitno-speech.interpretationundemmasind veraltet. Man sollte sie nicht verwenden.