Start · Sprachen · JavaScript · Referenz · SpeechSynthesisEvent.elapsedTime

SpeechSynthesisEvent.elapsedTime

Eigenschaft

Schreibgeschützte Zahl: die Zeit in Sekunden, die seit Beginn der Sprachausgabe einer <code>SpeechSynthesisUtterance</code> bis zum Auslösen des Ereignisses vergangen ist.

seit JavaScript Web Speech API – Baseline: alle modernen Browser ( Kategorie: webapi

Signatur

SpeechSynthesisEvent.elapsedTime

Beschreibung

Die Eigenschaft elapsedTime eines SpeechSynthesisEvent gibt an, wie viel Zeit seit dem Start der Ausgabe von SpeechSynthesisUtterance.text vergangen war, als das Ereignis ausgelöst wurde. Laut Spezifikation ist der Wert eine Gleitkommazahl in Sekunden.

Der Wert ist in allen Ereignissen der Sprachausgabe verfügbar: start, end, pause, resume, boundary, mark und error (dort als SpeechSynthesisErrorEvent, das von SpeechSynthesisEvent erbt). Besonders nützlich ist er im boundary-Ereignis, um den zeitlichen Verlauf von Wort- und Satzgrenzen zu verfolgen, sowie im end-Ereignis, um die Gesamtdauer einer Ansage zu messen.

Typische Einsatzzwecke sind Fortschrittsanzeigen, Karaoke-artiges Hervorheben des gerade gesprochenen Wortes, Protokollierung und die Abschätzung der Sprechgeschwindigkeit verschiedener Stimmen. Da es sich um eine reine Leseeigenschaft handelt, hat sie keine Parameter; Zuweisungen werden ignoriert.

Rückgabewert

Typ
number
Beschreibung
Gleitkommazahl mit der seit Beginn der Ausgabe verstrichenen Zeit (laut Spezifikation in Sekunden). Im start-Ereignis in der Regel 0.

Beispiele

Gesamtdauer einer Ansage messen (addEventListener)

const utterance = new SpeechSynthesisUtterance('Willkommen bei programmierung.net!');
utterance.lang = 'de-DE';

utterance.addEventListener('start', (event) => {
  console.log(`Start nach ${event.elapsedTime} s`);
});

utterance.addEventListener('end', (event) => {
  console.log(`Ausgabe beendet nach ${event.elapsedTime.toFixed(2)} s`);
});

speechSynthesis.speak(utterance);
Start nach 0 s Ausgabe beendet nach 2.14 s

Wortgrenzen mit Zeitstempel protokollieren (on-Property)

const text = 'Das ist ein kurzer Testsatz.';
const utterance = new SpeechSynthesisUtterance(text);
utterance.lang = 'de-DE';

utterance.onboundary = (event) => {
  if (event.name !== 'word') return;
  const wort = text.slice(event.charIndex).split(/\s/)[0];
  console.log(`${event.elapsedTime.toFixed(2)} s: ${wort}`);
};

speechSynthesis.speak(utterance);
0.00 s: Das 0.21 s: ist 0.38 s: ein 0.52 s: kurzer 0.89 s: Testsatz.

Pausieren und Fortsetzen mit Zeitangabe

const utterance = new SpeechSynthesisUtterance(
  'Dies ist ein längerer Text, der zwischendurch pausiert wird.'
);
utterance.lang = 'de-DE';

const log = (event) =>
  console.log(`${event.type} bei ${event.elapsedTime.toFixed(2)} s`);

utterance.addEventListener('pause', log);
utterance.addEventListener('resume', log);
utterance.addEventListener('end', (event) => {
  log(event);
  // Listener aufräumen
  utterance.removeEventListener('pause', log);
  utterance.removeEventListener('resume', log);
});

speechSynthesis.speak(utterance);
setTimeout(() => speechSynthesis.pause(), 1000);
setTimeout(() => speechSynthesis.resume(), 2500);
pause bei 1.00 s resume bei 1.00 s end bei 3.62 s

// Wichtig · Fallstricke

  • Einheit nicht einheitlich: Die Spezifikation schreibt Sekunden vor, einige Browser-Versionen (vor allem ältere Chromium-Versionen) liefern jedoch Millisekunden. Wer exakte Zeiten braucht, sollte den Wert plausibilisieren oder zusätzlich performance.now() beim start-Ereignis messen.
  • Abhängig von der Sprach-Engine: Genauigkeit und Verfügbarkeit hängen von der verwendeten Stimme ab. Bei manchen Netzwerk-Stimmen (z. B. Google-Stimmen in Chrome) werden boundary-Ereignisse gar nicht ausgelöst, oder elapsedTime ist 0.
  • Ob die Zeit während einer Pause weiterläuft, ist nicht festgelegt und variiert zwischen Implementierungen.
  • Die Eigenschaft ist schreibgeschützt; Zuweisungen haben keine Wirkung (im Strict Mode kein Fehler, da es ein Getter ohne Setter auf dem Prototyp ist – die Zuweisung wird einfach ignoriert bzw. wirft in Strict Mode einen TypeError).
  • Die Web Speech API ist nur in Browsern verfügbar, nicht in Node.js. Vorher mit 'speechSynthesis' in window prüfen.