Start · Sprachen · JavaScript · Referenz · new SpeechGrammar()

new SpeechGrammar()

Methode

Erzeugt ein neues, leeres <code>SpeechGrammar</code>-Objekt, das eine Grammatik (z. B. im JSGF-Format) für die Spracherkennung beschreibt.

seit JavaScript Web Speech API (experimentell, veraltet) – Chromiu deprecated seit ja Kategorie: webapi

Signatur

new SpeechGrammar()

Beschreibung

Der Konstruktor SpeechGrammar() gehört zur Web Speech API. Er erzeugt ein einzelnes Grammatik-Objekt mit den Eigenschaften src (die Grammatik selbst bzw. deren URI) und weight (Gewichtung, Standard 1). Mit einer solchen Grammatik wollte man festlegen, welche Wörter oder Sätze die Spracherkennung bevorzugt erkennen soll, etwa Farbnamen oder Menübefehle.

In der Praxis erzeugt man einzelne Grammatiken meist nicht direkt über den Konstruktor, sondern fügt sie über SpeechGrammarList.addFromString() oder SpeechGrammarList.addFromURI() einer Liste hinzu. Diese Liste wird dann der Eigenschaft SpeechRecognition.grammars zugewiesen. Der Konstruktor ist nur dann nützlich, wenn man ein Grammatik-Objekt gezielt einzeln anlegen und seine Eigenschaften selbst setzen möchte.

Wichtig: Grammatiken werden von den Browsern kaum bis gar nicht ausgewertet. Chromium-basierte Browser stellen den Konstruktor nur mit Präfix als webkitSpeechGrammar bereit und ignorieren die Grammatik bei der Erkennung. Die aktuelle Spezifikation hat das Grammatik-Konzept inzwischen zugunsten kontextbezogener Hinweise (Phrases) aufgegeben. Für neuen Code sollte man sich daher nicht auf SpeechGrammar verlassen.

Beispiele

Grammatik-Objekt mit Feature-Erkennung anlegen

// Präfix-Variante in Chromium berücksichtigen
const GrammarCtor = window.SpeechGrammar || window.webkitSpeechGrammar;

if (GrammarCtor) {
  const grammar = new GrammarCtor();
  grammar.src = '#JSGF V1.0; grammar farben; public <farbe> = rot | grün | blau ;';
  grammar.weight = 0.8;
  console.log(grammar.weight);
} else {
  console.log('SpeechGrammar wird nicht unterstützt');
}
0.8

Übliche Alternative: Grammatik über SpeechGrammarList hinzufügen

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

if (Recognition && GrammarList) {
  const jsgf = '#JSGF V1.0; grammar befehle; public <befehl> = start | stopp | weiter ;';
  const list = new GrammarList();
  list.addFromString(jsgf, 1);

  const recognition = new Recognition();
  recognition.lang = 'de-DE';
  recognition.grammars = list;

  recognition.addEventListener('result', (event) => {
    console.log('Erkannt:', event.results[0][0].transcript);
  });

  console.log('Grammatiken in der Liste:', list.length);
  // recognition.start(); // erfordert Nutzeraktion und Mikrofonfreigabe
}
Grammatiken in der Liste: 1

Grammatik aus einer Liste auslesen

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

if (GrammarList) {
  const list = new GrammarList();
  list.addFromString('#JSGF V1.0; grammar ja_nein; public <antwort> = ja | nein ;', 0.5);

  // Jeder Eintrag ist ein SpeechGrammar-Objekt
  const grammar = list.item(0);
  console.log(grammar instanceof (window.SpeechGrammar || window.webkitSpeechGrammar));
  console.log(grammar.weight);
}
true 0.5

// Wichtig · Fallstricke

  • Veraltet und experimentell: Das Grammatik-Konzept wurde aus der aktuellen Web-Speech-Spezifikation entfernt. Für neuen Code nicht verwenden.
  • Kompatibilität: Chromium-Browser (Chrome, Edge, Opera) bieten nur webkitSpeechGrammar an; Firefox hatte die API lediglich hinter einem Flag; Safari unterstützt SpeechGrammar praktisch nicht. Immer eine Feature-Erkennung verwenden.
  • Keine Wirkung auf die Erkennung: Auch wenn der Konstruktor vorhanden ist, werten die gängigen Erkennungsdienste die Grammatik nicht aus. Das Ergebnis wird also nicht auf die angegebenen Wörter beschränkt. Filtern Sie die Ergebnisse deshalb selbst im result-Handler.
  • Einen Wert für weight außerhalb von 0 bis 1 kann der Browser zurückweisen oder ignorieren.
  • Die Spracherkennung selbst braucht einen sicheren Kontext (HTTPS) und die Mikrofonfreigabe. In Chrome wird der Ton außerdem an einen Server geschickt, was für den Datenschutz wichtig ist.