// 设置语音播报对象 var Voice = function() { this.speak = window.speechSynthesis; this.voice = ''; this.zh_CN = false; this.rate = 1.5; this._setLang(); // 获取并检测是否有中文的环境 this.timeInterval = 28; //循环间隔(秒) this.speak_enable = true; //ture:开启语音播报 false:停止语音播报 }; // 播报语音 (调用发声的方法时请使用延时发声) Voice.prototype.play = function(txt,callback) { if(!this.zh_CN) { console.info('你的电脑不支持中文播报!'); } _timeInterval = this.timeInterval; //console.info(this.zh_CN); if(!this.speak_enable){ //识别是否开启声音播报 if(callback && typeof callback == 'function'){ setTimeout(function(){ callback(); }, Math.abs(_timeInterval)*1000); } return; } this.cancel(); var to_speak = new SpeechSynthesisUtterance(txt); to_speak.voice = this.voice; // 设定中文播报 to_speak.rate = this.rate; //console.info(to_speak); this.speak.speak(to_speak); var starttime = new Date(); to_speak.onend = function(event) { //console.info(event); if(callback && typeof callback == 'function'){ var endtime = new Date(); var timelong = (endtime.getTime()-starttime.getTime())/1000; //console.info(parseInt(_timeInterval)+"==="+parseInt(timelong)); if(timelong > this.timeInterval){ callback(); }else{ setTimeout(function(){ callback(); }, Math.abs(_timeInterval-timelong)*1000); } } }; to_speak.onerror = function(event) { //console.info(event); }; }; // 退出当前播报 Voice.prototype.cancel = function() { this.speak.cancel(); }; //停止语音播报 Voice.prototype.stopSpeak = function() { this.speak.cancel(); this.speak_enable = false; }; // 检查当前语言环境 Voice.prototype._setLang = function() { var _this = this; setTimeout(function(){ var voices = _this.speak.getVoices(); for(var i=0; i