36 lines
808 B
JavaScript
36 lines
808 B
JavaScript
var Reader = (function() {
|
|
let reader = window.speechSynthesis;
|
|
let current_position = 0;
|
|
let original_position = 0;
|
|
let to_speak = "";
|
|
|
|
function makeUtterance(str, rate) {
|
|
let msg = new SpeechSynthesisUtterance(str);
|
|
msg.rate = rate;
|
|
msg.lang = "en-US";
|
|
msg.onboundary = ev => {
|
|
if (ev.name === "word") {
|
|
current_position = ev.charIndex;
|
|
}
|
|
}
|
|
return msg;
|
|
}
|
|
|
|
function read(s, rate) {
|
|
to_speak = s.toString();
|
|
original_position = 0;
|
|
current_position = 0;
|
|
let msg = makeUtterance(to_speak, rate);
|
|
reader.speak(msg);
|
|
}
|
|
|
|
function stopRead() {
|
|
reader.cancel();
|
|
}
|
|
|
|
return {
|
|
read: read,
|
|
stopRead: stopRead
|
|
};
|
|
}) ();
|