Signatur
Beschreibung
Die Schnittstelle SpeechRecognitionAlternative gehört zur Web Speech API. Sie steht für eine mögliche Deutung dessen, was der Spracherkennungsdienst gehört hat. Das kann ein einzelnes Wort sein, aber auch ein ganzer Satz. Der Dienst liefert oft mehrere Deutungen, sortiert nach Wahrscheinlichkeit. Jede davon ist eine eigene SpeechRecognitionAlternative.
Man erzeugt solche Objekte nie selbst. Man bekommt sie über die Hierarchie im result-Ereignis von SpeechRecognition: event.results ist eine SpeechRecognitionResultList. Jedes Element darin ist ein SpeechRecognitionResult, und über dessen Index (result[0], result[1] …) oder result.item(i) kommt man an die einzelnen Alternativen.
Die Schnittstelle hat zwei schreibgeschützte Eigenschaften:
transcript(string): der erkannte Text.confidence(number): eine Schätzung zwischen0und1, wie sicher sich der Dienst ist.
Wie viele Alternativen es pro Ergebnis höchstens gibt, legt SpeechRecognition.maxAlternatives fest (Standard: 1). Mehrere Alternativen lohnen sich zum Beispiel bei Sprachbefehlen: Man vergleicht alle Hypothesen mit einer Liste erlaubter Befehle und nimmt die erste, die passt.
Rückgabewert
transcript (string) und confidence (number, 0–1). Man erhält es über SpeechRecognitionResult[index] bzw. SpeechRecognitionResult.item(index).Beispiele
Beste Alternative lesen (transcript und confidence)
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.addEventListener('result', (event) => {
// Erstes Ergebnis, erste (wahrscheinlichste) Alternative
const alternative = event.results[0][0];
console.log(`Erkannt: "${alternative.transcript}"`);
console.log(`Sicherheit: ${(alternative.confidence * 100).toFixed(1)} %`);
});
// Muss durch eine Nutzeraktion ausgelöst werden
document.querySelector('#mic').addEventListener('click', () => recognition.start());
Mehrere Alternativen gegen eine Befehlsliste prüfen
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 5;
const befehle = ['licht an', 'licht aus', 'musik stopp'];
recognition.onresult = (event) => {
const result = event.results[0];
// SpeechRecognitionResult ist nicht iterierbar wie ein Array -> Array.from
const alternativen = Array.from({ length: result.length }, (_, i) => result.item(i));
const treffer = alternativen.find((alt) =>
befehle.includes(alt.transcript.trim().toLowerCase())
);
if (treffer) {
console.log(`Befehl: ${treffer.transcript} (${treffer.confidence.toFixed(2)})`);
} else {
console.log('Kein bekannter Befehl:', alternativen.map((a) => a.transcript));
}
};
document.querySelector('#cmd').addEventListener('click', () => recognition.start());
Fortlaufendes Diktat mit Zwischenergebnissen
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.continuous = true;
recognition.interimResults = true;
const ausgabe = document.querySelector('#text');
let finalText = '';
recognition.onresult = (event) => {
let zwischenText = '';
for (let i = event.resultIndex; i < event.results.length; i++) {
const { transcript } = event.results[i][0]; // SpeechRecognitionAlternative
if (event.results[i].isFinal) {
finalText += transcript + ' ';
} else {
zwischenText += transcript;
}
}
ausgabe.textContent = finalText + zwischenText;
};
document.querySelector('#start').onclick = () => recognition.start();
document.querySelector('#stop').onclick = () => recognition.stop();
// Wichtig · Fallstricke
- Browser-Unterstützung: Chromium-Browser und Safari kennen die API nur mit Präfix als
webkitSpeechRecognition. Firefox unterstützt sie standardmäßig nicht. Prüfe deshalb immer vorher, ob sie vorhanden ist:'SpeechRecognition' in window || 'webkitSpeechRecognition' in window. - Serverbasierte Erkennung: In Chrome geht das Audio zur Auswertung an Google-Server. Ohne Netzwerk kommt ein
error-Ereignis mitnetwork. Denke an den Datenschutz: Nutzer sollten wissen, dass ihre Sprache übertragen wird. confidenceist unzuverlässig: Je nach Browser und Dienst ist der Wert bei Zwischenergebnissen oder weiteren Alternativen oft0. Verwende ihn nur als grobe Orientierung und nicht als feste Schwelle.maxAlternativesist nur eine Obergrenze: Der Dienst kann auch weniger Alternativen liefern. Prüfe also immerresult.length.- Leerzeichen im Text: Bei fortlaufender Erkennung beginnt
transcriptab dem zweiten Ergebnis häufig mit einem Leerzeichen. Vor Vergleichen deshalbtrim()aufrufen. - Die Erkennung braucht einen sicheren Kontext (HTTPS) und die Freigabe des Mikrofons.
start()sollte man durch eine Nutzeraktion auslösen.