Signatur
Beschreibung
Die Eigenschaft weight eines SpeechGrammar-Objekts ist eine Gleitkommazahl zwischen 0.0 und 1.0. Sie gibt an, wie stark diese Grammatik im Verhältnis zu anderen Grammatiken in derselben SpeechGrammarList gewichtet werden soll. Der Standardwert ist 1.0.
Gedacht ist das für Fälle, in denen mehrere Grammatiken gleichzeitig aktiv sind, etwa eine Liste mit Befehlen wie „start“ und „stopp“ und daneben ein allgemeineres Vokabular. Mit einem höheren Gewicht soll die Erkennung Wörter aus der wichtigeren Grammatik bevorzugen.
Meist setzt man das Gewicht nicht direkt über die Eigenschaft. Stattdessen übergibt man es als zweites Argument an SpeechGrammarList.addFromString(string, weight) oder SpeechGrammarList.addFromURI(src, weight). Die Eigenschaft liest man dann über grammarList[i].weight aus.
Wichtig: Die Eigenschaft ist nur ein Hinweis an die Erkennungs-Engine. Aktuelle Browser werten Grammatiken und damit auch ihr Gewicht praktisch nicht aus. Auf dieses Verhalten sollte man sich deshalb nicht verlassen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | number | 1.0 | Beim Setzen: neues Gewicht als Gleitkommazahl im Bereich 0.0 bis 1.0. |
Rückgabewert
0.0 und 1.0. Der Standardwert ist 1.0.Beispiele
Gewicht beim Hinzufügen setzen und auslesen
const SpeechGrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
if (SpeechGrammarList) {
const grammar = '#JSGF V1.0; grammar farben; public <farbe> = rot | grün | blau ;';
const list = new SpeechGrammarList();
list.addFromString(grammar, 0.8);
console.log(list[0].weight);
} else {
console.log('SpeechGrammarList wird nicht unterstützt');
}
Standardgewicht und nachträgliches Ändern
const SpeechGrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const list = new SpeechGrammarList();
list.addFromString('#JSGF V1.0; grammar ja; public <antwort> = ja | nein ;');
const grammar = list.item(0);
console.log(grammar.weight); // ohne Angabe: 1
grammar.weight = 0.5;
console.log(grammar.weight);
Befehle gegenüber allgemeinem Vokabular bevorzugen
const Recognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const GrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const recognition = new Recognition();
const grammars = new GrammarList();
// Befehle mit hohem Gewicht, Farben mit niedrigerem Gewicht
grammars.addFromString('#JSGF V1.0; grammar befehle; public <cmd> = start | stopp | weiter ;', 1.0);
grammars.addFromString('#JSGF V1.0; grammar farben; public <farbe> = rot | grün | blau ;', 0.3);
recognition.grammars = grammars;
recognition.lang = 'de-DE';
for (let i = 0; i < grammars.length; i++) {
console.log(`Grammatik ${i}: Gewicht ${grammars[i].weight}`);
}
recognition.onresult = (event) => {
console.log('Erkannt:', event.results[0][0].transcript);
};
recognition.start();
// Wichtig · Fallstricke
- Kompatibilität:
SpeechGrammarundSpeechGrammarListgelten als experimentell bzw. veraltet und gehören nicht zu Baseline. Chrome und Edge bieten die Objekte nur mit Präfix an (webkitSpeechGrammarList). In Firefox ist die Spracherkennung standardmäßig deaktiviert. Prüfe die Unterstützung daher immer vorher (Feature-Detection). - Kaum Wirkung: Die Browser-Engines ignorieren Grammatiken und Gewichte weitgehend. Ein anderes Gewicht verändert das Erkennungsergebnis in der Praxis meist nicht.
- Wertebereich: Erlaubt sind Werte von
0.0bis1.0. Wie sich Werte außerhalb dieses Bereichs verhalten, ist nicht einheitlich festgelegt. Je nach Implementierung kann das einen Fehler auslösen. Prüfe den Wert deshalb selbst, bevor du ihn setzt. - Die Spracherkennung setzt eine sichere Umgebung (HTTPS) und die Freigabe des Mikrofons voraus. In Chrome wird die Audioaufnahme außerdem an einen Server übertragen, was für den Datenschutz relevant ist.