Start · Sprachen · JavaScript · Referenz · SpeechSynthesis.resume()

SpeechSynthesis.resume()

Methode

Setzt eine mit <code>pause()</code> angehaltene Sprachausgabe fort und versetzt das <code>SpeechSynthesis</code>-Objekt in den nicht pausierten Zustand.

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

Signatur

SpeechSynthesis.prototype.resume()

Beschreibung

Die Methode resume() des Interfaces SpeechSynthesis hebt den Pausenzustand der Sprachsynthese auf. Wurde eine laufende Äußerung (SpeechSynthesisUtterance) vorher mit speechSynthesis.pause() angehalten, spricht die Engine an der unterbrochenen Stelle weiter. Danach werden auch die übrigen Äußerungen in der Warteschlange normal abgearbeitet.

Ist die Sprachausgabe gar nicht pausiert, hat der Aufruf keine Wirkung. Ob gerade pausiert ist, verrät die Eigenschaft speechSynthesis.paused. Beim Fortsetzen wird an der aktiven Äußerung das Ereignis resume ausgelöst (utterance.onresume bzw. addEventListener("resume", …)).

Typischer Einsatz sind Vorlesefunktionen mit Wiedergabe-/Pause-Schaltflächen, etwa für Barrierefreiheit, Artikel-Vorlesen oder Sprachassistenten. Der Pausenzustand gilt global für das ganze speechSynthesis-Objekt des Fensters, nicht für einzelne Äußerungen.

Beispiele

Pausieren und nach zwei Sekunden fortsetzen

const utterance = new SpeechSynthesisUtterance(
  'Dies ist ein längerer Text, der kurz angehalten und dann fortgesetzt wird.'
);
utterance.lang = 'de-DE';

utterance.addEventListener('pause', () => console.log('Pausiert'));
utterance.addEventListener('resume', () => console.log('Fortgesetzt'));

speechSynthesis.speak(utterance);

setTimeout(() => speechSynthesis.pause(), 1500);
setTimeout(() => speechSynthesis.resume(), 3500);
Pausiert Fortgesetzt

Umschalt-Schaltfläche für eine Vorlesefunktion

const button = document.querySelector('#vorlesen');
const text = document.querySelector('article').textContent;

button.addEventListener('click', () => {
  if (speechSynthesis.paused) {
    speechSynthesis.resume();
    button.textContent = 'Pause';
  } else if (speechSynthesis.speaking) {
    speechSynthesis.pause();
    button.textContent = 'Weiter';
  } else {
    const u = new SpeechSynthesisUtterance(text);
    u.lang = 'de-DE';
    u.onend = () => { button.textContent = 'Vorlesen'; };
    speechSynthesis.speak(u);
    button.textContent = 'Pause';
  }
});

Fortsetzen über die on-Property überwachen

const u = new SpeechSynthesisUtterance('Hallo Welt, wie geht es dir heute?');
u.onresume = (event) => {
  console.log(`Fortgesetzt nach ${Math.round(event.elapsedTime)} ms, Zeichen ${event.charIndex}`);
};

speechSynthesis.speak(u);
speechSynthesis.pause();

// Nur fortsetzen, wenn wirklich pausiert
if (speechSynthesis.paused) {
  speechSynthesis.resume();
}
Fortgesetzt nach … ms, Zeichen 0

// Wichtig · Fallstricke

  • Uneinheitliches Verhalten zwischen Browsern: Unter Android (Chrome) wird pause() teils als cancel() behandelt, sodass resume() nichts mehr fortsetzen kann. Auch die Ereignisse pause/resume werden nicht überall zuverlässig ausgelöst.
  • Chrome-Eigenheit: In Chrome auf dem Desktop bricht die Ausgabe langer Texte nach etwa 15 Sekunden manchmal ab. Als Umgehung ruft man oft in regelmäßigen Abständen pause() und direkt danach resume() auf. Sauberer ist es, den Text in kurze Äußerungen aufzuteilen.
  • Der Pausenzustand kann auch vor speak() bestehen. Ist speechSynthesis.paused dann true, beginnt keine neue Äußerung zu sprechen, bis resume() aufgerufen wird. Im Zweifel vor speak() einmal resume() aufrufen.
  • Die Stimmen und die tatsächliche Wiedergabe hängen vom Betriebssystem ab. Die Unterstützung lässt sich mit 'speechSynthesis' in window prüfen.