Start · Sprachen · JavaScript · Referenz · SpeechRecognition: soundstart

SpeechRecognition: soundstart

Ereignis

Wird ausgelöst, sobald die Spracherkennung ein beliebiges Geräusch erkennt, egal ob es sich um verständliche Sprache handelt oder nicht.

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

Signatur

recognition.addEventListener("soundstart", handler)

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

Typ
void
Beschreibung
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();
Geräusch erkannt – höre zu … Kein Geräusch mehr.

Ü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();
soundstart ausgelöst von SpeechRecognition

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();
Erstes Geräusch nach 812 ms

// Wichtig · Fallstricke

  • Kompatibilität: Chromium-Browser (Chrome, Edge) und Safari stellen die API meist nur als webkitSpeechRecognition bereit. Firefox unterstützt SpeechRecognition standardmäßig nicht. Prüfe deshalb immer vorher, ob die API vorhanden ist.
  • Geräusch ist nicht gleich Sprache: soundstart reagiert auch auf Lärm. Wenn wirklich Sprache erkannt werden soll, verwende speechstart.
  • Fehlt die Mikrofonberechtigung oder verweigert der Nutzer den Zugriff, tritt soundstart nicht ein. Stattdessen folgt ein error-Ereignis mit error === \"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 = false gibt es pro Sitzung höchstens ein soundstart. Nach end muss start() erneut aufgerufen werden.