Start · Sprachen · JavaScript · Referenz · SpeechGrammar.src

SpeechGrammar.src

Eigenschaft

Liest oder setzt die Grammatik eines <code>SpeechGrammar</code>-Objekts als String, entweder als URL oder als Inhalt im JSGF-Format.

seit JavaScript Experimentell – nur Chromium-Browser (als webkitSp deprecated seit ja Kategorie: webapi

Signatur

SpeechGrammar.src

Beschreibung

Die Eigenschaft src der Schnittstelle SpeechGrammar enthält die Grammatik, die eine Spracherkennung (SpeechRecognition) beim Auswerten des Gesprochenen berücksichtigen soll. Laut Spezifikation ist der Wert eine URL. Diese URL kann auf eine externe Grammatikdatei verweisen oder die Grammatik als data:-URL direkt enthalten. Üblich ist dafür das Format JSGF (JSpeech Grammar Format).

Meist setzt man src nicht selbst. Stattdessen fügt man Grammatiken über SpeechGrammarList.addFromString() oder SpeechGrammarList.addFromURI() einer Liste hinzu. Danach liest man die fertigen SpeechGrammar-Objekte über SpeechGrammarList.item() oder den Index-Zugriff aus. Mit src lässt sich dann prüfen, welche Grammatik ein Eintrag enthält, oder man tauscht sie nachträglich aus.

Man verwendet die Eigenschaft, wenn die Erkennung auf einen festen Wortschatz beschränkt oder dafür gewichtet werden soll, zum Beispiel für Sprachbefehle wie Farben, Ziffern oder Menüpunkte. In der Praxis werten aktuelle Browser Grammatiken aber kaum oder gar nicht aus. Deshalb sollte die Logik einer Anwendung nie davon abhängen.

Parameter

Name Typ Default Beschreibung
$value Pflicht string Nur beim Setzen: eine URL zu einer Grammatikdatei oder eine data:-URL mit der Grammatik im JSGF-Format. Relative URLs werden relativ zur Dokument-URL aufgelöst.

Rückgabewert

Typ
string
Beschreibung
Die Grammatik als (aufgelöste) URL-Zeichenkette. Wurde die Grammatik per addFromString() hinzugefügt, liefert Chromium meist eine data:-URL mit dem kodierten Grammatik-Text.

Beispiele

Grammatik hinzufügen und über src auslesen

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

if (!SpeechGrammarList) {
  console.warn('SpeechGrammarList wird nicht unterstützt.');
} else {
  const farben = ['rot', 'grün', 'blau', 'gelb'];
  const grammatik = `#JSGF V1.0; grammar farben; public <farbe> = ${farben.join(' | ')} ;`;

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

  // Das erzeugte SpeechGrammar-Objekt auslesen
  const eintrag = liste[0];
  console.log(eintrag.src);
  console.log(eintrag.weight);
}
data:application/xml,%23JSGF%20V1.0%3B%20grammar%20farben%3B%20... (je nach Browser) 1

Grammatik mit einer Spracherkennung verwenden

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

if (Recognition && GrammarList) {
  const befehle = '#JSGF V1.0; grammar befehle; public <befehl> = start | stopp | weiter | zurück ;';

  const liste = new GrammarList();
  liste.addFromString(befehle, 1);

  const erkennung = new Recognition();
  erkennung.lang = 'de-DE';
  erkennung.grammars = liste;

  // Zur Kontrolle alle hinterlegten Grammatiken ausgeben
  for (let i = 0; i < erkennung.grammars.length; i++) {
    console.log(`Grammatik ${i}:`, erkennung.grammars.item(i).src);
  }

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

  document.querySelector('#mikro')?.addEventListener('click', () => erkennung.start());
}
Grammatik 0: data:application/xml,%23JSGF%20V1.0%3B%20grammar%20befehle%3B%20...

src nachträglich auf eine externe Grammatikdatei setzen

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

if (GrammarList) {
  const liste = new GrammarList();
  liste.addFromString('#JSGF V1.0; grammar leer; public <x> = platzhalter ;', 1);

  const grammar = liste.item(0);
  // Relative URL wird relativ zum Dokument aufgelöst
  grammar.src = '/grammatiken/ziffern.jsgf';
  console.log(grammar.src);
}
https://example.com/grammatiken/ziffern.jsgf

// Wichtig · Fallstricke

  • Experimentell und uneinheitlich unterstützt: Chromium-Browser stellen die Schnittstellen nur mit Präfix bereit (webkitSpeechGrammar, webkitSpeechGrammarList). In Firefox ist die Web Speech API hinter einem Flag verborgen, und Safari unterstützt Grammatiken nur eingeschränkt. Die Unterstützung sollte man immer vorher prüfen.
  • Grammatiken werden oft ignoriert: Selbst wo die Eigenschaft vorhanden ist, beeinflusst die Grammatik das Ergebnis der Spracherkennung in aktuellen Implementierungen häufig nicht. Die Grammatikteile der Spezifikation gelten als veraltet und werden möglicherweise entfernt. Erkannte Texte sollte man deshalb immer selbst prüfen, zum Beispiel mit einem Abgleich gegen eine Liste erlaubter Wörter.
  • Rückgabewert ist nicht der Originaltext: Nach addFromString() liefert src in der Regel eine URL-kodierte data:-URL. Den ursprünglichen JSGF-Text erhält man bei Bedarf mit decodeURIComponent() zurück.
  • Externe Grammatikdateien unterliegen den üblichen Regeln für Zugriffe über Herkunftsgrenzen hinweg (CORS). Außerdem funktioniert die Spracherkennung nur in einem sicheren Kontext (HTTPS) und erst, nachdem der Nutzer den Mikrofonzugriff erlaubt hat.