Signatur
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
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());
Ä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);
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();
// Wichtig · Fallstricke
- Nicht mit
endverwechseln:audioendmeldet nur, dass die Aufnahme vorbei ist. Ergebnisse (result) können danach noch eintreffen. Aufräumarbeiten oder ein Neustart perstart()gehören in denend-Handler. Ein zu früher Aufruf vonstart()löst eineInvalidStateError-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ütztSpeechRecognitionnicht. 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), kannaudioendganz wegfallen, falls die Aufnahme nie begonnen hat. - Bei
continuous = trueläuft die Aufnahme über mehrere Ergebnisse weiter,audioendkommt dann erst beim Stoppen der Sitzung.