Signatur
Beschreibung
Das Ereignis soundend gehört zur Web Speech API. Es wird ausgelöst, wenn der Erkennungsdienst kein Geräusch mehr wahrnimmt. Dabei spielt es keine Rolle, ob vorher erkennbare Sprache oder nur ein Hintergrundgeräusch zu hören war. Es ist das Gegenstück zu soundstart.
Die Ereignisse einer Erkennungssitzung laufen typischerweise in dieser Reihenfolge ab: start → audiostart → soundstart → speechstart → speechend → soundend → audioend → end. soundend kommt also nach speechend, aber vor dem Ende der Audioaufnahme.
Einen Handler meldest du entweder mit addEventListener("soundend", handler) oder über die Eigenschaft onsoundend an. Das übergebene Objekt ist ein normales Event ohne zusätzliche Daten. Das Ereignis lässt sich nicht abbrechen und steigt nicht im DOM auf. Man nutzt es vor allem für Rückmeldungen in der Oberfläche, zum Beispiel um eine „Mikrofon hört zu“-Animation auszublenden, sobald es still ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname, immer "soundend". |
|
| $handler Pflicht | (event: Event) => void | Callback, der bei dem Ereignis aufgerufen wird. Er bekommt ein einfaches Event-Objekt, dessen target die SpeechRecognition-Instanz ist. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Listener-Optionen wie once oder signal. |
Rückgabewert
addEventListener liefert keinen Wert. Der Handler bekommt ein Event.Beispiele
Stille mit addEventListener erkennen
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.addEventListener('soundstart', () => console.log('Geräusch erkannt'));
recognition.addEventListener('soundend', () => console.log('Kein Geräusch mehr'));
recognition.start();
Über die Eigenschaft onsoundend
const Recognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new Recognition();
recognition.onsoundend = (event) => {
console.log('soundend um', Math.round(event.timeStamp), 'ms');
};
recognition.start();
Mikrofon-Anzeige ein- und ausblenden, Listener danach entfernen
const Recognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new Recognition();
const indicator = document.querySelector('#mic-indicator');
const onSoundStart = () => indicator.classList.add('active');
const onSoundEnd = () => indicator.classList.remove('active');
recognition.addEventListener('soundstart', onSoundStart);
recognition.addEventListener('soundend', onSoundEnd);
recognition.addEventListener('end', () => {
recognition.removeEventListener('soundstart', onSoundStart);
recognition.removeEventListener('soundend', onSoundEnd);
console.log('Sitzung beendet, Listener entfernt');
}, { once: true });
document.querySelector('#talk').addEventListener('click', () => recognition.start());
// Wichtig · Fallstricke
- Browser-Unterstützung: Chrome und Edge bieten die API nur als
webkitSpeechRecognitionan. Safari unterstützt sie ab 14.1, Firefox bisher nicht. Prüfe deshalb vorher, ob die API vorhanden ist. - In Chrome wird das Audio an einen Server geschickt. Ohne Netzwerk kann ein
error-Ereignis kommen, undsoundendwird dann eventuell gar nicht ausgelöst. - Die Seite braucht einen sicheren Kontext (HTTPS) und die Freigabe des Mikrofons durch den Nutzer.
soundendheißt nicht, dass ein Ergebnis vorliegt. Werte die erkannten Texte imresult-Ereignis aus.- Ist
continuous = truegesetzt, könnensoundstartundsoundendje nach Implementierung mehrfach oder nur einmal pro Sitzung kommen. Verlass dich nicht auf eine feste Anzahl.