Start · Sprachen · JavaScript · Referenz · SpeechRecognition: audioend

SpeechRecognition: audioend

Ereignis

Wird an einem <code>SpeechRecognition</code>-Objekt ausgelöst, sobald der User-Agent die Audioaufnahme für die Spracherkennung beendet hat.

seit JavaScript Chrome 33+, Edge 79+, Safari 14.1+ (mit Präfix web Kategorie: webapi

Signatur

recognition.addEventListener("audioend", handler)

Beschreibung

Das Ereignis audioend gehört zur Web Speech API und wird an einer SpeechRecognition-Instanz ausgelöst, wenn der Browser kein Audio mehr vom Mikrofon aufnimmt. Das passiert zum Beispiel nach einer Sprechpause, nach dem Aufruf von stop() oder abort() oder wenn der Dienst die Erkennung von sich aus beendet.

Einen Handler registriert man mit addEventListener("audioend", handler) oder über die Eigenschaft onaudioend. Das Ereignisobjekt ist ein einfaches Event ohne zusätzliche Eigenschaften. Nützlich ist es vor allem für die Oberfläche, etwa um ein Mikrofon-Symbol oder eine „Aufnahme läuft“-Anzeige auszublenden, sobald nicht mehr zugehört wird.

In einer typischen Sitzung laufen die Ereignisse in dieser Reihenfolge ab: start → audiostart → soundstart → speechstart → speechend → soundend → audioend → result/nomatch → end. Wichtig: audioend bedeutet nicht, dass die Erkennung fertig ist. Ergebnisse können danach noch eintreffen. Das endgültige Ende einer Sitzung zeigt erst end an.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Der Ereignisname "audioend".
$handler Pflicht (event: Event) => void Callback, der mit einem gewöhnlichen Event aufgerufen wird. Das Objekt enthält keine besonderen Eigenschaften, event.target verweist auf die SpeechRecognition-Instanz.
$options boolean | AddEventListenerOptions false Optionale Einstellungen wie once oder signal (für das Abmelden per AbortController).

Rückgabewert

Typ
void
Beschreibung
addEventListener gibt nichts zurück. Die Eigenschaft onaudioend enthält den zugewiesenen Handler oder null.

Beispiele

Aufnahme-Anzeige per addEventListener ausblenden

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

const indicator = document.querySelector('#mic-indicator');

recognition.addEventListener('audiostart', () => {
  indicator.hidden = false;
  console.log('Aufnahme gestartet');
});

recognition.addEventListener('audioend', () => {
  indicator.hidden = true;
  console.log('Aufnahme beendet – warte auf Ergebnis …');
});

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

document.querySelector('#start').addEventListener('click', () => recognition.start());
Aufnahme gestartet Aufnahme beendet – warte auf Ergebnis … Erkannt: Hallo Welt

Äquivalent über die Eigenschaft onaudioend

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

recognition.onaudioend = (event) => {
  console.log('audioend von', event.target === recognition ? 'recognition' : 'unbekannt');
};

recognition.start();
// Nach 5 Sekunden Aufnahme manuell beenden
setTimeout(() => recognition.stop(), 5000);
audioend von recognition

Aufnahmedauer messen und Handler wieder entfernen

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
let startedAt = 0;

const onAudioStart = () => { startedAt = performance.now(); };
const onAudioEnd = () => {
  const seconds = ((performance.now() - startedAt) / 1000).toFixed(1);
  console.log(`Audio aufgenommen: ${seconds} s`);
};

recognition.addEventListener('audiostart', onAudioStart);
recognition.addEventListener('audioend', onAudioEnd);

recognition.addEventListener('end', () => {
  // Nach Sitzungsende Listener abmelden
  recognition.removeEventListener('audiostart', onAudioStart);
  recognition.removeEventListener('audioend', onAudioEnd);
  console.log('Sitzung beendet, Listener entfernt');
}, { once: true });

recognition.start();
Audio aufgenommen: 3.2 s Sitzung beendet, Listener entfernt

// Wichtig · Fallstricke

  • Nicht mit end verwechseln: audioend meldet nur, dass die Aufnahme vorbei ist. Ergebnisse (result) können danach noch eintreffen. Aufräumarbeiten oder ein Neustart per start() gehören in den end-Handler. Ein zu früher Aufruf von start() löst eine InvalidStateError-Ausnahme aus.
  • Browser-Unterstützung: Chrome und Edge bieten die API (teils nur als webkitSpeechRecognition) an, Safari ab 14.1 nur mit Präfix. Firefox unterstützt SpeechRecognition nicht. Deshalb immer die Funktion vorher prüfen: 'SpeechRecognition' in window || 'webkitSpeechRecognition' in window.
  • Datenschutz und Voraussetzungen: Man braucht einen sicheren Kontext (HTTPS) und die Mikrofonfreigabe durch die Nutzerin oder den Nutzer. In Chrome wird das Audio zur Erkennung an einen Server geschickt, die Erkennung funktioniert also nicht offline.
  • Verweigert die Person die Mikrofonfreigabe oder tritt ein Fehler auf (error), kann audioend ganz wegfallen, falls die Aufnahme nie begonnen hat.
  • Bei continuous = true läuft die Aufnahme über mehrere Ergebnisse weiter, audioend kommt dann erst beim Stoppen der Sitzung.