UNPKG

ztwcom

Version:

优化

104 lines (94 loc) 3.18 kB
let speak = window.speechSynthesis; let message = new window.SpeechSynthesisUtterance(); let msgArr = [] let idx = 0 //指定本地语言包服务为true的语言包 message.voice = speak.getVoices().filter(function (voice) { return voice.localService == true && voice.lang == "zh-CN"; })[0];; //正在播报的报警数据 let speakingDataMap = new Map(); function speakMsg (newSpeakDataMap, interval = 2000) { msgArr = [] //更新正在播报数据 if (speakingDataMap.size > 0) { speakingDataMap.forEach(function (value, key, map) { if (newSpeakDataMap.get(key) == null) { //报警已经结束,移除此条报警信息 speakingDataMap.delete(key); } else { //更新相应报警信息 speakingDataMap.set(key, newSpeakDataMap.get(key)); newSpeakDataMap.delete(key); } }); } //将新增报警添加到播报数据 if (newSpeakDataMap.size > 0) { newSpeakDataMap.forEach(function (value, key, map) { speakingDataMap.set(key, value); }) } for (const key in newSpeakDataMap) { if (Object.prototype.hasOwnProperty.call(newSpeakDataMap, key)) { const element = newSpeakDataMap[key]; // console.log(element, 'element') msgArr.push(element) } } repeat(msgArr, interval) } function arabicToChinese (str) { const numMap = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; return str.split('').map(char => numMap[parseInt(char)]).join(''); } function repeat (msgArr, interval) { console.log(idx, msgArr[idx], '---') message.text = msgArr[idx]; speak.speak(message) message.onend = () => { // return new Promise((resolve, reject) => { // resolve(message, idx, msgArr) window.setTimeout(() => { if (idx == (msgArr.length - 1)) { // 最后一条 idx = 0 repeat(msgArr, interval) } else { // 中间条数 idx++ repeat(msgArr, interval) } }, interval) // }) } } // 暂停 function pause () { speak.pause() } // 恢复暂停 function resume () { speak.resume() } // 清空 function cancel () { message.onend = null; speak.cancel(); } function test (text) { //let message = new window.SpeechSynthesisUtterance(text); //message.voice = window.speechSynthesis.getVoices().filter(function(voice) { return voice.localService == true && voice.lang == "zh-CN"; })[0]; //message.voice = speak.getVoices().filter(function(voice) { return voice.localService == true && voice.lang == "zh-CN"; })[0]; /*message.volume = 100; // 声音的音量 message.rate = 1;// 语速,数值,默认值是1,范围是0.1到10 message.pitch = 1.5; // 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1 message.lang = 'zh-CN'*/ message.text = text; speak.speak(message); //speak.speak(message); /*for(let i = voices.length-1; i >= 0 ; i--) { message.voice = voices[i]; message.text = text; speak.speak(message); }*/ } export { speakMsg, cancel, pause, resume };