Signatur
Beschreibung
Das Ereignis soundstart der Schnittstelle SpeechRecognition (Web Speech API) tritt ein, wenn im Audiosignal zum ersten Mal irgendein Geräusch auftaucht. Das kann Sprache sein, aber auch Husten, Tastaturklappern oder Hintergrundlärm. Man registriert es mit addEventListener("soundstart", handler) oder über die Eigenschaft onsoundstart.
Die Ereignisse einer Erkennungssitzung kommen normalerweise in dieser Reihenfolge: start → audiostart → soundstart → speechstart → result → speechend → soundend → audioend → end. soundstart steht also zwischen dem Öffnen des Mikrofons (audiostart) und dem Moment, in dem tatsächlich Sprache erkannt wird (speechstart).
In der Praxis zeigt man damit schnell an, dass etwas zu hören ist, zum Beispiel mit einem pulsierenden Mikrofonsymbol. Ob tatsächlich Sprache vorliegt, entscheidet erst speechstart. Das Ereignis enthält keine Audiodaten und kein Ergebnis, sondern ist ein einfaches Event.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname "soundstart". |
|
| $handler Pflicht | (event: Event) => void | Callback-Funktion, die beim Ereignis aufgerufen wird. Sie bekommt ein einfaches Event-Objekt ohne zusätzliche Eigenschaften. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Einstellungen wie once oder signal für addEventListener. |
Rückgabewert
addEventListener gibt nichts zurück. Der Handler bekommt ein Event, dessen target die SpeechRecognition-Instanz ist.Beispiele
Geräusch 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 – höre zu …');
});
recognition.addEventListener('soundend', () => {
console.log('Kein Geräusch mehr.');
});
recognition.start();
Über die Eigenschaft onsoundstart
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.onsoundstart = (event) => {
console.log('soundstart ausgelöst von', event.target.constructor.name);
};
recognition.start();
Mikrofonsymbol animieren und Listener wieder entfernen
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
const micIcon = document.querySelector('#mic');
const onSoundStart = () => micIcon.classList.add('pulsing');
const onSoundEnd = () => micIcon.classList.remove('pulsing');
recognition.addEventListener('soundstart', onSoundStart);
recognition.addEventListener('soundend', onSoundEnd);
recognition.addEventListener('end', () => {
// Aufräumen nach Ende der Sitzung
recognition.removeEventListener('soundstart', onSoundStart);
recognition.removeEventListener('soundend', onSoundEnd);
micIcon.classList.remove('pulsing');
}, { once: true });
document.querySelector('#start').addEventListener('click', () => recognition.start());
Zeit bis zum ersten Geräusch messen
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
let audioStartedAt = 0;
recognition.onaudiostart = () => { audioStartedAt = performance.now(); };
recognition.onsoundstart = () => {
const ms = Math.round(performance.now() - audioStartedAt);
console.log(`Erstes Geräusch nach ${ms} ms`);
};
recognition.start();
// Wichtig · Fallstricke
- Kompatibilität: Chromium-Browser (Chrome, Edge) und Safari stellen die API meist nur als
webkitSpeechRecognitionbereit. Firefox unterstütztSpeechRecognitionstandardmäßig nicht. Prüfe deshalb immer vorher, ob die API vorhanden ist. - Geräusch ist nicht gleich Sprache:
soundstartreagiert auch auf Lärm. Wenn wirklich Sprache erkannt werden soll, verwendespeechstart. - Fehlt die Mikrofonberechtigung oder verweigert der Nutzer den Zugriff, tritt
soundstartnicht ein. Stattdessen folgt einerror-Ereignis miterror === \"not-allowed\". - Die Erkennung läuft nur in einem sicheren Kontext (HTTPS oder localhost). In Chrome wird das Audio zur Auswertung an einen Server geschickt, was für den Datenschutz wichtig ist.
- Bei
continuous = falsegibt es pro Sitzung höchstens einsoundstart. Nachendmussstart()erneut aufgerufen werden.