Start · Sprachen · JavaScript · Referenz · SpeechRecognitionAlternative.transcript

SpeechRecognitionAlternative.transcript

Eigenschaft

Schreibgeschützte Eigenschaft, die den erkannten Text (das Transkript) einer Erkennungsalternative der Web Speech API als String liefert.

seit JavaScript Web Speech API: Chrome 33+ (mit Präfix webkit), Ed Kategorie: webapi

Signatur

SpeechRecognitionAlternative.transcript

Beschreibung

Die schreibgeschützte Eigenschaft transcript des Interfaces SpeechRecognitionAlternative enthält den Text, den die Spracherkennung für ein gesprochenes Wort oder einen Satz ermittelt hat. Sie ist der eigentliche Nutzwert der Spracherkennung: Hier landet das, was die Person gesagt hat.

Man erreicht sie über das result-Event von SpeechRecognition: event.results ist eine SpeechRecognitionResultList, jedes Element davon ein SpeechRecognitionResult, das wiederum eine oder mehrere SpeechRecognitionAlternative-Objekte enthält. Der typische Zugriff lautet daher event.results[i][0].transcript. Wie viele Alternativen geliefert werden, steuert SpeechRecognition.maxAlternatives; ergänzend gibt confidence an, wie sicher sich die Engine bei der jeweiligen Alternative ist.

Bei kontinuierlicher Erkennung (continuous = true) oder mit Zwischenergebnissen (interimResults = true) kann sich das Transkript eines noch nicht finalen Ergebnisses laufend ändern. Ob ein Ergebnis endgültig ist, zeigt SpeechRecognitionResult.isFinal an. Für eine saubere Anzeige trennt man deshalb vorläufigen von endgültigem Text.

Rückgabewert

Typ
string
Beschreibung
Der erkannte Text dieser Alternative. Kann führende Leerzeichen enthalten (etwa bei Folgesegmenten in Chrome) und ist bei nicht finalen Ergebnissen vorläufig.

Beispiele

Einfache Spracheingabe auslesen

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';

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

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

Alle Alternativen mit Konfidenz anzeigen

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 3;

recognition.onresult = (event) => {
  const result = event.results[0];
  for (const alt of result) {
    console.log(`${alt.transcript.trim()} (${(alt.confidence * 100).toFixed(1)} %)`);
  }
};

recognition.start();
Termin morgen (91.2 %) Termine morgen (5.3 %) Termin Morgen (2.1 %)

Diktierfunktion mit Zwischen- und Endergebnissen

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = 'de-DE';
recognition.continuous = true;
recognition.interimResults = true;

const output = document.querySelector('#diktat');
let finalText = '';

recognition.onresult = (event) => {
  let interim = '';
  for (let i = event.resultIndex; i < event.results.length; i++) {
    const { transcript } = event.results[i][0];
    if (event.results[i].isFinal) {
      finalText += transcript.trim() + ' ';
    } else {
      interim += transcript;
    }
  }
  output.textContent = finalText + interim;
};

recognition.start();

// Wichtig · Fallstricke

  • Browser-Kompatibilität: In Chrome und Edge nur als webkitSpeechRecognition verfügbar; Firefox unterstützt die Spracherkennung nicht. Immer per Feature-Erkennung prüfen.
  • Datenschutz: In Chrome wird der Ton zur Erkennung an Google-Server gesendet – ohne Netzwerk kein Transkript. Nutzer sollten darüber informiert werden.
  • Die Seite muss in einem sicheren Kontext (HTTPS) laufen, und der Mikrofonzugriff muss erlaubt sein, sonst feuert ein error-Event statt result.
  • Transkripte enthalten teils führende Leerzeichen und keine bzw. uneinheitliche Satzzeichen und Großschreibung – vor Vergleichen mit trim() und toLowerCase() normalisieren.
  • Bei interimResults event.resultIndex beachten, sonst werden bereits verarbeitete Ergebnisse doppelt übernommen.
  • Das Transkript als Nutzereingabe behandeln: per textContent statt innerHTML ausgeben, um XSS zu vermeiden.