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
 | 
						|
    };
 | 
						|
}) ();
 |