Signatur
Beschreibung
Die Eigenschaft grammars einer SpeechRecognition-Instanz enthält eine SpeechGrammarList. Diese Liste besteht aus SpeechGrammar-Objekten und beschreibt, welche Wörter oder Wortfolgen die Erkennung erwarten soll. Die Grammatiken werden meist im Format JSGF (JSpeech Grammar Format) angegeben, zum Beispiel für eine feste Menge an Befehlen oder Farbnamen.
Man verwendet grammars, wenn eine Anwendung nur einen kleinen, bekannten Wortschatz braucht, etwa bei Sprachbefehlen („start“, „stopp“, „weiter“) oder bei Auswahllisten. Dazu erzeugt man mit new SpeechGrammarList() eine Liste, fügt über addFromString() oder addFromURI() Grammatiken hinzu (optional gewichtet von 0 bis 1) und weist die Liste recognition.grammars zu, bevor start() aufgerufen wird.
Wichtig: Die Grammatik ist nur ein Hinweis an die Erkennungs-Engine. Aktuelle Browser, allen voran Chrome, verwenden eine serverseitige Erkennung und ignorieren die Grammatik in der Praxis weitgehend. Das Ergebnis kann also trotzdem Wörter enthalten, die nicht in der Grammatik stehen. Prüfe erkannte Texte deshalb immer selbst gegen die erlaubten Werte.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | SpeechGrammarList | leere SpeechGrammarList | Nur beim Setzen: die neue Liste von Grammatiken, die der Erkennung zugewiesen wird. |
Rückgabewert
SpeechGrammar-Objekten. Ohne eigene Zuweisung ist sie leer (length === 0).Beispiele
Grammatik für Farbbefehle zuweisen
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const SpeechGrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const farben = ['rot', 'grün', 'blau', 'gelb', 'schwarz'];
const jsgf = `#JSGF V1.0; grammar farben; public <farbe> = ${farben.join(' | ')} ;`;
const recognition = new SpeechRecognition();
const grammarList = new SpeechGrammarList();
grammarList.addFromString(jsgf, 1); // Gewicht 0..1
recognition.grammars = grammarList;
recognition.lang = 'de-DE';
recognition.maxAlternatives = 1;
console.log(recognition.grammars.length);
Zugewiesene Grammatiken auslesen
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const SGL = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const recognition = new SR();
console.log('Vorher:', recognition.grammars.length);
const list = new SGL();
list.addFromString('#JSGF V1.0; grammar cmd; public <cmd> = start | stopp ;', 1);
list.addFromString('#JSGF V1.0; grammar ja; public <ja> = ja | nein ;', 0.5);
recognition.grammars = list;
for (let i = 0; i < recognition.grammars.length; i++) {
const g = recognition.grammars.item(i);
console.log(i, g.weight);
}
Sprachbefehle mit Prüfung und Funktionserkennung
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const SGL = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const befehle = ['start', 'stopp', 'weiter'];
if (!SR) {
console.warn('Spracherkennung wird nicht unterstützt.');
} else {
const recognition = new SR();
recognition.lang = 'de-DE';
// Grammatik nur setzen, wenn der Browser sie kennt
if (SGL) {
const list = new SGL();
list.addFromString(`#JSGF V1.0; grammar befehle; public <b> = ${befehle.join(' | ')} ;`, 1);
recognition.grammars = list;
}
recognition.addEventListener('result', (event) => {
const text = event.results[0][0].transcript.trim().toLowerCase();
// Grammatik ist nur ein Hinweis – selbst prüfen
if (befehle.includes(text)) {
console.log(`Befehl erkannt: ${text}`);
} else {
console.log(`Unbekannte Eingabe: ${text}`);
}
});
document.querySelector('#mic').addEventListener('click', () => recognition.start());
}
// Wichtig · Fallstricke
- Wird oft ignoriert: Chrome und Safari berücksichtigen die zugewiesene Grammatik in der Praxis kaum. Erkannte Texte immer selbst prüfen und nicht davon ausgehen, dass nur Wörter aus der Grammatik zurückkommen.
- Präfixe: In Chrome, Edge und Safari heißen die Konstruktoren
webkitSpeechRecognitionundwebkitSpeechGrammarList. Firefox unterstützt die Spracherkennung standardmäßig nicht. Safari stelltSpeechGrammarListje nach Version gar nicht bereit, daher braucht man eine Funktionserkennung. - Zeitpunkt: Die Grammatik vor
start()zuweisen. Änderungen während einer laufenden Sitzung wirken sich meist erst beim nächsten Start aus. - Veraltet:
SpeechGrammarundSpeechGrammarListgelten in neueren Fassungen der Spezifikation als veraltet. Für neuen Code sollte man sich nicht darauf verlassen. - Datenschutz: In Chrome wird das Audio zur Erkennung an einen Server gesendet. Außerdem ist eine sichere Verbindung (HTTPS) mit Mikrofon-Freigabe nötig.