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

SpeechGrammarList.addFromURI()

Methode

Lädt eine Grammatik von einem URI und fügt sie als neues <code>SpeechGrammar</code>-Objekt zur <code>SpeechGrammarList</code> hinzu.

seit JavaScript Experimentell: Chrome/Edge (mit webkit-Präfix), Sa deprecated seit ja Kategorie: webapi

Signatur

SpeechGrammarList.prototype.addFromURI(src, weight)

Beschreibung

Die Methode addFromURI() gehört zur Web Speech API. Sie nimmt einen URI entgegen, der auf eine Grammatikdatei zeigt, typischerweise im Format JSGF (JSpeech Grammar Format) oder SRGS, und fügt diese Grammatik als neues SpeechGrammar-Objekt an die Liste an. Diese Liste weist man anschließend der Eigenschaft SpeechRecognition.grammars zu.

Sinnvoll ist das, wenn eine Spracherkennung auf ein festes Vokabular eingeschränkt oder dahin gelenkt werden soll, etwa bei Sprachbefehlen („start“, „stopp“, „weiter“) oder Farb- und Produktnamen. Die Grammatik liegt dann als eigene Datei auf dem Server und muss nicht als String im Code stehen. Für eingebettete Grammatiken gibt es die Schwestermethode addFromString().

Mit dem optionalen Parameter weight legt man fest, wie stark diese Grammatik im Vergleich zu anderen Grammatiken in derselben Liste gewichtet wird. Die Methode gibt nichts zurück. Den Erfolg sieht man an length der Liste bzw. am neuen Eintrag, den man über item() abruft.

Wichtig: In der Praxis werten aktuelle Browser-Engines (vor allem Chrome) Grammatiken bei der Erkennung kaum oder gar nicht aus. Die Methode läuft ohne Fehler durch, beeinflusst das Erkennungsergebnis aber oft nicht messbar.

Parameter

Name Typ Default Beschreibung
$src Pflicht string URI der Grammatikdatei, absolut oder relativ, z. B. '/grammars/farben.grxml'. Auch ein data:-URI ist möglich.
$weight number 1.0 Gewichtung der Grammatik im Verhältnis zu anderen Grammatiken der Liste. Gültig sind Werte von 0.0 bis 1.0.

Rückgabewert

Typ
undefined
Beschreibung
Kein Rückgabewert. Die Grammatik wird als neues SpeechGrammar-Objekt an die Liste angehängt.

Beispiele

Grammatik von einer URL laden und der Erkennung zuweisen

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

if (!SpeechRecognition || !SpeechGrammarList) {
  console.warn('Web Speech API wird nicht unterstützt.');
} else {
  const grammarList = new SpeechGrammarList();
  // Grammatikdatei vom eigenen Server laden
  grammarList.addFromURI('/grammars/befehle.grxml', 1);

  const recognition = new SpeechRecognition();
  recognition.grammars = grammarList;
  recognition.lang = 'de-DE';

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

  console.log('Grammatiken in der Liste:', grammarList.length);
  recognition.start();
}
Grammatiken in der Liste: 1 Erkannt: weiter

Mehrere Grammatiken mit unterschiedlicher Gewichtung

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

// Hauptvokabular stark, Zusatzvokabular schwächer gewichten
list.addFromURI('https://example.com/grammars/navigation.grxml', 1.0);
list.addFromURI('https://example.com/grammars/smalltalk.grxml', 0.3);

for (let i = 0; i < list.length; i++) {
  const g = list.item(i);
  console.log(`${i}: ${g.src} (Gewicht ${g.weight})`);
}
0: https://example.com/grammars/navigation.grxml (Gewicht 1) 1: https://example.com/grammars/smalltalk.grxml (Gewicht 0.3)

JSGF-Grammatik als data:-URI

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

const list = new GrammarList();
list.addFromURI(`data:application/x-jsgf,${encodeURIComponent(jsgf)}`, 1);

console.log(list.length);
1

// Wichtig · Fallstricke

  • Experimentell und uneinheitlich unterstützt: In Chrome und Edge gibt es die API nur mit Präfix als webkitSpeechGrammarList, Firefox unterstützt sie standardmäßig nicht. Vor der Nutzung immer per Feature-Detection prüfen.
  • Kaum spürbare Wirkung: Chrome ignoriert Grammatiken bei der serverseitigen Erkennung weitgehend. In der aktuellen Spezifikation ist SpeechGrammarList nur noch als Altlast enthalten und kann künftig entfernt werden. Verlass dich nicht darauf, dass die Erkennung auf das Vokabular eingeschränkt wird, sondern filtere transcript selbst.
  • Die Methode liefert keine Rückmeldung, ob die Datei geladen werden konnte. Ein ungültiger URI oder ein CORS-Problem wirft meist keinen Fehler.
  • Grammatiken von fremden Domains unterliegen den üblichen CORS- und CSP-Regeln (connect-src). Lade Grammatikdateien möglichst vom eigenen Ursprung.
  • Die Spracherkennung selbst braucht einen sicheren Kontext (HTTPS) und die Erlaubnis für das Mikrofon.