SpeechSynthesis API onend callback not working SpeechSynthesis API onend callback not working google-chrome google-chrome

SpeechSynthesis API onend callback not working


According to this comment on the bug mentioned in the answer from Kevin Hakanson, it might be a problem with garbage collection. Storing the utterance in a variable before calling speak seems to do the trick:

window.utterances = [];var utterance = new SpeechSynthesisUtterance( 'hello' );utterances.push( utterance );speechSynthesis.speak( utterance );


While this is how I found it to make it work, I am not sure if this is the right behavior....

First don't call the speak function it right away, use callback.

2nd, to get time use timeStamp instead of elapsedTime. You could have just used performance.now() as well.

var btn = document.getElementById('btn');speechSynthesis.cancel()var u = new SpeechSynthesisUtterance();u.text = "This text was changed from the original demo.";var t;u.onstart = function (event) {    t = event.timeStamp;    console.log(t);};u.onend = function (event) {    t = event.timeStamp - t;    console.log(event.timeStamp);    console.log((t / 1000) + " seconds");};btn.onclick = function () {speechSynthesis.speak(u);};

Demo: http://jsfiddle.net/QYw6b/2/

you get time passed and both events fired for sure.


You could use the EventListener for start and end like I did for Speakerbot (http://www.speakerbot.de/).

Here my face changes while words are spoken.

newUtt = new SpeechSynthesisUtterance();newUtt.addEventListener('start', function () {     console.log('started');})newUtt.addEventListener('end', function () {     console.log('stopped');})