Start · Sprachen · JavaScript · Referenz · SpeechGrammarList.item()

SpeechGrammarList.item()

Methode

Gibt das <code>SpeechGrammar</code>-Objekt an der angegebenen Position einer <code>SpeechGrammarList</code> zurück. Alternativ geht das auch per Array-Syntax <code>list[index]</code>.

seit JavaScript Web Speech API (experimentell). In Chrome/Edge nur deprecated seit ja Kategorie: webapi

Signatur

SpeechGrammarList.prototype.item(index)

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

Typ
SpeechGrammar
Beschreibung
Das 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'));
1 1 true

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);
true 0.8

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}`);
  }
}
Grammatik 0: Gewicht 1 Grammatik 1: Gewicht 0.5

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Web Speech API ist experimentell. Chrome und Edge bieten die Schnittstelle nur mit Präfix als webkitSpeechGrammarList an. 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. Bei item() verhalten sich die Browser unterschiedlich: Manche geben null zurück, manche werfen einen Fehler. Prüfe den Index daher vorher gegen length.
  • 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 mit Array.from(list) um.