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

SpeechGrammarList.addFromString()

Methode

Fügt einer <code>SpeechGrammarList</code> eine Grammatik hinzu, die als String (meist im JSGF-Format) direkt im Code vorliegt, optional mit einer Gewichtung.

seit JavaScript Experimentell: Chromium (mit Präfix webkit), keine deprecated seit ja Kategorie: webapi

Signatur

SpeechGrammarList.prototype.addFromString(string, weight)

Beschreibung

Die Methode addFromString() der Schnittstelle SpeechGrammarList nimmt eine Grammatik, die als String vorliegt (z. B. in einer Variablen oder einem Template-Literal gespeichert), wandelt sie in ein SpeechGrammar-Objekt um und hängt sie an die Liste an. Die Grammatik wird üblicherweise im JSGF-Format (JSpeech Grammar Format) geschrieben.

Gedacht ist sie für die Web Speech API: Du übergibst die Liste über recognition.grammars an ein SpeechRecognition-Objekt. Damit sollte die Erkennung bestimmte Wörter oder Phrasen (etwa Befehle, Farbnamen oder Menüpunkte) bevorzugt erkennen. Im Gegensatz zu addFromURI() brauchst du dafür keine externe Datei, sondern hast die Grammatik direkt im Code.

Über den optionalen Parameter weight legst du die relative Gewichtung dieser Grammatik gegenüber anderen Grammatiken derselben Liste fest (Wertebereich 0.0 bis 1.0).

Wichtig: In der Praxis ignorieren aktuelle Browser-Implementierungen (Chrome, Edge, Safari) Grammatiken weitgehend. Der Aufruf verursacht keinen Fehler, beeinflusst das Erkennungsergebnis aber in der Regel nicht spürbar. Die Spezifikation hat Grammatiken inzwischen sogar als veraltet markiert.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Die Grammatik als String, typischerweise im JSGF-Format, z. B. #JSGF V1.0; grammar farben; public <farbe> = rot | grün | blau;.
$weight number 1.0 Relative Gewichtung der Grammatik zwischen 0.0 und 1.0. Werte außerhalb dieses Bereichs können einen SyntaxError auslösen.

Rückgabewert

Typ
void
Beschreibung
Gibt undefined zurück. Die neue SpeechGrammar steht danach am Ende der Liste und ist über list.item(index) bzw. list[index] erreichbar.

Beispiele

Farb-Grammatik für die Spracherkennung registrieren

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const SpeechGrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;

const farben = ['rot', 'grün', 'blau', 'gelb', 'schwarz'];
const grammatik = `#JSGF V1.0; grammar farben; public <farbe> = ${farben.join(' | ')};`;

const liste = new SpeechGrammarList();
liste.addFromString(grammatik, 1);

const recognition = new SpeechRecognition();
recognition.grammars = liste;
recognition.lang = 'de-DE';
recognition.interimResults = false;

recognition.addEventListener('result', (event) => {
  const text = event.results[0][0].transcript;
  document.body.style.backgroundColor = text.trim() === 'rot' ? 'red' : '';
  console.log('Erkannt:', text);
});

document.querySelector('#start').addEventListener('click', () => recognition.start());
Erkannt: rot

Mehrere Grammatiken mit unterschiedlicher Gewichtung

const GrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const liste = new GrammarList();

liste.addFromString('#JSGF V1.0; grammar befehle; public <befehl> = start | stopp | weiter;', 1.0);
liste.addFromString('#JSGF V1.0; grammar zahlen; public <zahl> = eins | zwei | drei;', 0.5);

console.log(liste.length);
console.log(liste[1].weight);
2 0.5

Feature-Erkennung vor der Nutzung

const GrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;

if (GrammarList) {
  const liste = new GrammarList();
  liste.addFromString('#JSGF V1.0; grammar ja_nein; public <antwort> = ja | nein;');
  console.log('Grammatik hinzugefügt:', liste.length);
} else {
  console.warn('SpeechGrammarList wird nicht unterstützt.');
}
Grammatik hinzugefügt: 1

// Wichtig · Fallstricke

  • Kaum Wirkung in der Praxis: Chrome, Edge und Safari akzeptieren Grammatiken, werten sie aber faktisch nicht aus. Verlasse dich nicht darauf, dass die Erkennung dadurch genauer wird – prüfe das Transkript lieber selbst gegen eine Liste erlaubter Werte.
  • Veraltet: Die Web-Speech-Spezifikation hat SpeechGrammar und SpeechGrammarList als veraltet markiert. In neuerem Code solltest du sie nicht voraussetzen.
  • Kompatibilität: In Chromium-Browsern ist die Schnittstelle nur mit Präfix als webkitSpeechGrammarList verfügbar; Firefox unterstützt die Spracherkennung standardmäßig nicht. Immer eine Feature-Erkennung einbauen.
  • Die Spracherkennung in Chrome schickt Audiodaten an einen Server – beim Datenschutz beachten und nur in sicheren Kontexten (HTTPS) nutzen.
  • Ein syntaktisch fehlerhafter JSGF-String löst in der Regel keinen Fehler aus; Tippfehler bemerkst du also nicht.