Start · Sprachen · JavaScript · Referenz · SpeechRecognition.start()

SpeechRecognition.start()

Methode

Startet den Spracherkennungsdienst. Er hört auf Audio vom Mikrofon oder von einer übergebenen <code>MediaStreamTrack</code> und liefert Ergebnisse über das <code>result</code>-Event.

seit JavaScript Web Speech API: Chrome/Edge 25+ (mit webkit-Präfix Kategorie: webapi

Signatur

SpeechRecognition.prototype.start(audioTrack)

Beschreibung

Mit start() beginnt eine Spracherkennungssitzung einer SpeechRecognition-Instanz. Ohne Argument nutzt der Browser das Standard-Mikrofon. Beim ersten Aufruf fragt er dafür die Mikrofon-Berechtigung ab. Wenn die Aufnahme beginnt, feuern nacheinander die Events start, audiostart, soundstart und speechstart. Die erkannten Texte kommen asynchron über das Event result an.

Die Methode selbst gibt nichts zurück und ist kein Promise. Wie die Sitzung läuft, verfolgst du über die Events result, nomatch, error und end. Vor dem Aufruf von start() kannst du Eigenschaften wie lang, continuous, interimResults und maxAlternatives setzen. Sie gelten dann für die ganze Sitzung.

In neueren Chromium-Versionen kannst du optional eine Audio-MediaStreamTrack übergeben, zum Beispiel aus getUserMedia() oder aus einem WebRTC-Stream. Dann wird statt des Standard-Mikrofons diese Spur ausgewertet. Die Sitzung endet mit stop() (vorhandenes Audio wird noch ausgewertet) oder mit abort() (sofortiger Abbruch ohne Ergebnis). Sie endet auch automatisch nach einer Sprechpause, wenn continuous auf false steht.

Parameter

Name Typ Default Beschreibung
$audioTrack MediaStreamTrack Optional. Eine Audio-Spur (kind === "audio"), die statt des Standard-Mikrofons ausgewertet wird. Bisher nur in neueren Chromium-Versionen unterstützt. Eine Spur, die kein Audio ist, führt zu einem TypeError.

Rückgabewert

Typ
void
Beschreibung
Kein Rückgabewert (undefined). Die Ergebnisse kommen asynchron über das result-Event.

Beispiele

Einfache Spracheingabe per Button

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

if (!SpeechRecognition) {
  console.warn('Spracherkennung wird in diesem Browser nicht unterstützt.');
} else {
  const recognition = new SpeechRecognition();
  recognition.lang = 'de-DE';
  recognition.interimResults = false;
  recognition.maxAlternatives = 1;

  recognition.addEventListener('result', (event) => {
    const { transcript, confidence } = event.results[0][0];
    console.log(`Erkannt: "${transcript}" (${(confidence * 100).toFixed(0)} %)`);
  });

  recognition.addEventListener('error', (event) => {
    console.error('Fehler:', event.error);
  });

  document.querySelector('#mic').addEventListener('click', () => {
    recognition.start(); // fragt beim ersten Mal die Mikrofon-Berechtigung ab
  });
}
Erkannt: "Hallo Welt" (92 %)

Diktierfunktion mit Zwischenergebnissen und Schutz vor Doppelstart

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

let isListening = false;
const output = document.querySelector('#text');

recognition.onstart = () => { isListening = true; };
recognition.onend = () => { isListening = false; };

recognition.onresult = (event) => {
  let finalText = '';
  let interimText = '';
  for (const result of event.results) {
    if (result.isFinal) finalText += result[0].transcript;
    else interimText += result[0].transcript;
  }
  output.textContent = finalText + interimText;
};

const toggle = () => {
  if (isListening) {
    recognition.stop();
    return;
  }
  try {
    recognition.start();
  } catch (err) {
    // InvalidStateError, falls bereits eine Sitzung läuft
    console.warn(err.name, err.message);
  }
};

document.querySelector('#toggle').addEventListener('click', toggle);

Erkennung auf einer bestimmten MediaStreamTrack (Chromium)

const startFromTrack = async () => {
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  const [track] = stream.getAudioTracks();

  const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
  recognition.lang = 'de-DE';
  recognition.onresult = (e) => console.log(e.results[0][0].transcript);
  recognition.onend = () => track.stop(); // Mikrofon freigeben

  recognition.start(track);
};

document.querySelector('#go').addEventListener('click', startFromTrack);
Guten Morgen

// Wichtig · Fallstricke

  • InvalidStateError: Wenn du start() aufrufst, während schon eine Sitzung läuft, wirft die Methode eine DOMException mit dem Namen InvalidStateError. Starte also erst neu, wenn das end-Event gefeuert hat, oder fange den Fehler mit try/catch ab.
  • Browser-Kompatibilität: In Chrome, Edge und Safari gibt es die Klasse nur als webkitSpeechRecognition. Firefox unterstützt die Spracherkennung nicht. Prüfe deshalb immer vorher, ob die Funktion vorhanden ist. Der Parameter audioTrack ist neu und bisher nur in Chromium verfügbar.
  • Berechtigungen und Kontext: Die Methode braucht einen sicheren Kontext (HTTPS oder localhost) und die Mikrofon-Berechtigung. Wird sie verweigert, feuert error mit not-allowed. Manche Browser verlangen, dass der Aufruf durch eine Benutzeraktion ausgelöst wird, etwa einen Klick.
  • Datenschutz: Chrome schickt die Audiodaten standardmäßig zur Erkennung an Google-Server. Ohne Netzwerk kommt es zum Fehler network. Bei sensiblen Anwendungen solltest du die Nutzer darauf hinweisen.
  • Automatisches Ende: Auch mit continuous = true beendet Chrome die Sitzung nach einiger Zeit ohne Sprache. Für eine Dauererkennung rufst du start() im end-Handler erneut auf.