Signatur
Beschreibung
Ein SpeechRecognitionResult steht für ein einzelnes Erkennungsergebnis der Web Speech API und verhält sich wie ein Array aus SpeechRecognitionAlternative-Objekten. Jede Alternative ist eine mögliche Deutung des Gesprochenen mit einem transcript und einem confidence-Wert. Die Eigenschaft length gibt an, wie viele dieser Alternativen vorhanden sind.
Wie viele Alternativen höchstens geliefert werden, legst du über SpeechRecognition.maxAlternatives fest (Standard: 1). Die Erkennungs-Engine kann aber auch weniger Alternativen liefern, als angefordert wurden. Deshalb solltest du beim Durchlaufen der Alternativen immer length abfragen, statt von maxAlternatives auszugehen.
In der Praxis brauchst du length vor allem, wenn du mehrere Deutungen anbieten willst, etwa für eine „Meinten Sie …?“-Auswahl oder für einen Abgleich mit einer festen Liste von Sprachbefehlen. Die Alternativen sind in der Regel nach Konfidenz absteigend sortiert, Index 0 ist also die wahrscheinlichste.
Rückgabewert
SpeechRecognitionAlternative-Objekte in diesem Ergebnis. Der Wert ist schreibgeschützt.Beispiele
Anzahl der Alternativen ausgeben
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 3;
recognition.addEventListener('result', (event) => {
const result = event.results[0];
console.log(`Alternativen: ${result.length}`);
});
recognition.start();
Alle Alternativen mit Konfidenz auflisten
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 5;
recognition.onresult = (event) => {
const result = event.results[event.results.length - 1];
for (let i = 0; i < result.length; i++) {
const { transcript, confidence } = result[i];
console.log(`${i + 1}. "${transcript}" (${(confidence * 100).toFixed(1)} %)`);
}
};
recognition.start();
Sprachbefehl über alle Alternativen abgleichen
const commands = ['licht an', 'licht aus', 'musik stopp'];
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 5;
recognition.onresult = (event) => {
const result = event.results[0];
// Array.from nutzt length intern
const match = Array.from(result)
.map((alt) => alt.transcript.trim().toLowerCase())
.find((text) => commands.includes(text));
console.log(match ? `Befehl erkannt: ${match}` : `Kein Befehl unter ${result.length} Alternativen`);
};
recognition.start();
// Wichtig · Fallstricke
- Weniger als angefordert:
lengthkann kleiner alsmaxAlternativessein. Viele Engines (z. B. Chrome bei Zwischenergebnissen mitinterimResults = true) liefern nur eine einzige Alternative. - Nicht verwechseln:
event.results.length(SpeechRecognitionResultList) zählt die Ergebnisse,event.results[i].lengthdagegen die Alternativen innerhalb eines Ergebnisses. - Kein echtes Array:
SpeechRecognitionResulthat keine Methoden wiemapoderfilter. Nutze einefor-Schleife mitlengthoderArray.from(). - Browser-Unterstützung: In Chromium-Browsern nur mit dem Präfix
webkitSpeechRecognitionverfügbar, Firefox unterstützt die Spracherkennung nicht. In Chrome wird der Ton an einen Server übertragen, daher braucht es eine Netzwerkverbindung. Außerdem ist ein sicherer Kontext (HTTPS) mit Mikrofonfreigabe nötig.