Signatur
Beschreibung
Die Methode item() liest ein einzelnes SpeechGrammar-Objekt aus einer SpeechGrammarList. Sie ist ein sogenannter indizierter Getter. Deshalb liefern grammarList.item(0) und grammarList[0] dasselbe Ergebnis.
Eine SpeechGrammarList enthält die Grammatiken, meist im JSGF-Format, mit denen ein SpeechRecognition-Objekt die Erkennung auf bestimmte Wörter oder Sätze lenken soll. Über item() kann man die hinterlegten Grammatiken prüfen, ihre Gewichtung (weight) auslesen oder ihre Quelle (src) zur Fehlersuche ausgeben.
Die Liste ist kein echtes Array. Sie hat nur length und einen Zugriff über den Index. Methoden wie map() oder forEach() gibt es nicht. Wer sie nutzen will, wandelt die Liste zuerst mit Array.from() um oder durchläuft sie mit einer klassischen for-Schleife über length.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $index Pflicht | number | Position der gewünschten Grammatik, beginnend bei 0. Der Wert wird in eine vorzeichenlose Ganzzahl umgewandelt. |
Rückgabewert
SpeechGrammar-Objekt an der Position index, mit den Eigenschaften src und weight. Was bei einem ungültigen Index passiert, hängt von der Implementierung ab (siehe Hinweise).Beispiele
Grammatik hinzufügen und per item() auslesen
const SpeechGrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const farben = ['rot', 'grün', 'blau', 'gelb'];
const grammar = `#JSGF V1.0; grammar farben; public <farbe> = ${farben.join(' | ')} ;`;
const grammarList = new SpeechGrammarList();
grammarList.addFromString(grammar, 1);
const ersteGrammatik = grammarList.item(0);
console.log(grammarList.length);
console.log(ersteGrammatik.weight);
console.log(ersteGrammatik.src.includes('grammar farben'));
Array-Syntax statt item()
const SpeechGrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const grammarList = new SpeechGrammarList();
grammarList.addFromString('#JSGF V1.0; grammar ja_nein; public <antwort> = ja | nein ;', 0.8);
// Beide Zugriffe liefern dasselbe Objekt
console.log(grammarList[0] === grammarList.item(0));
console.log(grammarList[0].weight);
Alle Grammatiken einer Erkennung sicher durchlaufen
const Recognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const GrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
if (!Recognition || !GrammarList) {
console.warn('Web Speech API wird nicht unterstützt.');
} else {
const recognition = new Recognition();
const list = new GrammarList();
list.addFromString('#JSGF V1.0; grammar befehle; public <cmd> = start | stopp ;', 1);
list.addFromString('#JSGF V1.0; grammar zahlen; public <zahl> = eins | zwei | drei ;', 0.5);
recognition.grammars = list;
// Über length iterieren, damit kein ungültiger Index entsteht
for (let i = 0; i < recognition.grammars.length; i++) {
const g = recognition.grammars.item(i);
console.log(`Grammatik ${i}: Gewicht ${g.weight}`);
}
}
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Web Speech API ist experimentell. Chrome und Edge bieten die Schnittstelle nur mit Präfix als
webkitSpeechGrammarListan. Firefox unterstützt die Spracherkennung standardmäßig nicht. Prüfe deshalb immer, ob die Funktion vorhanden ist, bevor du sie nutzt. - Ungültiger Index: Mit der Array-Syntax liefert ein Index außerhalb der Liste
undefined. Beiitem()verhalten sich die Browser unterschiedlich: Manche gebennullzurück, manche werfen einen Fehler. Prüfe den Index daher vorher gegenlength. - Kaum Wirkung auf die Erkennung: In Chrome haben Grammatiken nach aktuellem Stand praktisch keinen Einfluss auf das Erkennungsergebnis. Neuere Entwürfe der Spezifikation stufen Grammatiken als veraltet ein. Verlasse dich also nicht darauf, dass eine Grammatik die Erkennung tatsächlich einschränkt.
- Die Liste ist kein
Array. Für Array-Methoden wandelst du sie zuerst mitArray.from(list)um.