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

SpeechRecognition.abort()

Methode

Bricht eine laufende Spracherkennung sofort ab, ohne ein <code>SpeechRecognitionResult</code> für die bisher aufgenommenen Audiodaten zu liefern.

seit JavaScript Web Speech API – Chrome/Edge (mit Präfix webkit), Kategorie: webapi

Signatur

SpeechRecognition.prototype.abort()

Beschreibung

abort() beendet eine laufende Spracherkennungssitzung sofort. Der Dienst hört nicht mehr auf das Mikrofon, und Audiodaten, die schon aufgenommen, aber noch nicht ausgewertet wurden, werden verworfen. Es wird kein result-Event mehr ausgelöst.

Das ist der wichtigste Unterschied zu stop(): stop() beendet zwar ebenfalls die Aufnahme, versucht aber, aus dem bisher Gesprochenen noch ein Ergebnis zu ermitteln. Nimm abort(), wenn der Nutzer einen Vorgang abbricht (z. B. „Abbrechen“-Button, Escape-Taste, Seitenwechsel) oder wenn ein Ergebnis gar nicht mehr gebraucht wird.

Nach dem Aufruf feuert die Instanz in der Regel ein error-Event mit error === "aborted" und danach ein end-Event. Aufräumarbeiten wie UI-Zurücksetzen gehören deshalb am besten in den end-Handler. Ruft man abort() auf, während gar keine Erkennung läuft, passiert nichts.

Beispiele

Abbrechen-Button für die Spracheingabe

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

const startBtn = document.querySelector('#start');
const cancelBtn = document.querySelector('#cancel');

startBtn.addEventListener('click', () => recognition.start());

// Nutzer bricht ab: Das bisher Gesprochene wird verworfen
cancelBtn.addEventListener('click', () => recognition.abort());

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

recognition.addEventListener('end', () => {
  console.log('Erkennung beendet');
});
Erkennung beendet

Abbruch im error-Handler vom echten Fehler unterscheiden

const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();

recognition.onerror = (event) => {
  if (event.error === 'aborted') {
    console.info('Vom Nutzer oder Code abgebrochen – kein Fehler anzeigen');
    return;
  }
  console.error('Spracherkennung fehlgeschlagen:', event.error);
};

recognition.start();
setTimeout(() => recognition.abort(), 1000);
Vom Nutzer oder Code abgebrochen – kein Fehler anzeigen

Zeitlimit und Escape-Taste mit AbortController-ähnlichem Muster

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

const listenOnce = (timeoutMs = 5000) => new Promise((resolve, reject) => {
  const recognition = new SR();
  recognition.lang = 'de-DE';

  const cancel = () => recognition.abort();
  const onKey = (e) => { if (e.key === 'Escape') cancel(); };
  const timer = setTimeout(cancel, timeoutMs);
  document.addEventListener('keydown', onKey);

  recognition.onresult = (e) => resolve(e.results[0][0].transcript);
  recognition.onerror = (e) => reject(new Error(e.error));
  recognition.onend = () => {
    clearTimeout(timer);
    document.removeEventListener('keydown', onKey);
    resolve(null); // kein Ergebnis, falls abgebrochen
  };

  recognition.start();
});

const text = await listenOnce(3000).catch((err) => {
  console.warn('Abbruch/Fehler:', err.message);
  return null;
});
console.log('Ergebnis:', text);
Abbruch/Fehler: aborted Ergebnis: null

// Wichtig · Fallstricke

  • Unterschied zu stop(): abort() verwirft das bisher Gesprochene, stop() liefert dafür eventuell noch ein result. Wer das letzte Ergebnis noch braucht, muss stop() nehmen.
  • Nach abort() kommt meist ein error-Event mit error: "aborted". Dieses sollte man im Fehler-Handler gesondert behandeln, damit dem Nutzer keine falsche Fehlermeldung angezeigt wird.
  • Die Sitzung endet asynchron. Wer direkt nach abort() wieder start() aufruft, bekommt unter Umständen einen InvalidStateError. Neu starten sollte man erst im end-Handler.
  • Kompatibilität: Chrome und Edge bieten die API nur mit Präfix als webkitSpeechRecognition an, Safari ab 14.1. Firefox unterstützt sie standardmäßig nicht. Vorher per Feature-Erkennung prüfen.
  • In Chrome läuft die Erkennung über einen Server. Das Audio wird also übertragen, und die Seite braucht einen sicheren Kontext (HTTPS) und die Mikrofon-Berechtigung.