Text to Speech Issues in latest Chrome under Windows
HTML
<h1>
Text to Speech - Pause/Resume Event Issues in Chrome on Windows
</h1>
<p>
Replication of an issue present in both Chrome 55.0.2883.87 and 56.0.2924.51 beta (64-bit) under Windows 10; this issue is not present in the latest build of Chrome on OS X.
</p>
<h2>
Instructions for Replicating on Windows
</h2>
<ul>
<li>Start speech</li>
<li>Pause speech</li>
<li>Note that<ul>
<li>Speech is paused</li>
<li>No onpause event is logged</li>
</ul></li>
<li>Resume speech</li>
<li>Note that
<ul>
<li>Speech is resumed</li>
<li>No onresume event is logged</li>
</ul></li>
</ul>
<p>
<label>Message
<input type="text" id="text" value="There is something wrong with the pause and resume events of SpeechSynthesisUtterance in the latest Chrome under Windows. This is very unfortunate."></input>
</label>
</p>
<p>
<button type="button" id="speak">Speak</button>
<button type="button" id="stop">Stop</button>
<button type="button" id="pause">Pause</button>
<button type="button" id="resume">Resume</button>
</p>
<b>SpeechSynthesisUtterance events</b>
<p>
<ul id="ssuLog">
</ul>
</p>
</p>
JavaScript
var message = new SpeechSynthesisUtterance($("#text").val());
var voices = speechSynthesis.getVoices();
$("input").on("change", function () {
console.log($(this).attr("id"), $(this).val());
message[$(this).attr("id")] = $(this).val();
});
message.onresume = function (event) {
console.log("onresume event fired");
console.log(event);
$("#ssuLog").append("<li>onresume</li>");
}
message.onpause = function (event) {
console.log("onpause event fired");
console.log(event);
$("#ssuLog").append("<li>onpause</li>");
}
message.onstart = function (event) {
console.log("onstart event fired");
console.log(event);
$("#ssuLog").append("<li>onstart</li>");
}
message.onend = function (event) {
console.log("onend event fired");
console.log(event);
$("#ssuLog").append("<li>onend</li>");
}
$("select").on("change", function () {
message.voice = voices[$(this).val()];
});
$("#speak").on("click", function () {
speechSynthesis.speak(message);
});
$("#stop").on("click", function () {
speechSynthesis.cancel();
});
$("#pause").on("click", function () {
speechSynthesis.pause();
});
$("#resume").on("click", function () {
speechSynthesis.resume();
});
// Hack around voices bug
var interval = setInterval(function () {
voices = speechSynthesis.getVoices();
if (voices.length) clearInterval(interval); else return;
for (var i = 0; i < voices.length; i++) {
$("select").append("<option value=\"" + i + "\">" + voices[i].name + "</option>");
}
}, 10);