From 09641c1f360844c7adc9d8549aaec54a12c59c39 Mon Sep 17 00:00:00 2001
From: Zhao Xin <7176466@qq.com>
Date: Fri, 16 Sep 2022 09:09:32 +0800
Subject: [PATCH] gitpush
---
package.json | 2 +-
public/js/WebSpeech.min.js | 13 +++++++++++++
views/home.pug | 7 +++++++
3 files changed, 21 insertions(+), 1 deletion(-)
create mode 100644 public/js/WebSpeech.min.js
diff --git a/package.json b/package.json
index 5a1b6c2..545d641 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"main": "server.js",
"scripts": {
"start": "nodemon server",
- "install": "PORT=8080 pm2 start server.js --name 'Zhao Server:8080' --watch",
+ "pm2start": "PORT=8080 pm2 start server.js --name 'Zhao Server:8080' --watch",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
diff --git a/public/js/WebSpeech.min.js b/public/js/WebSpeech.min.js
new file mode 100644
index 0000000..9a48d11
--- /dev/null
+++ b/public/js/WebSpeech.min.js
@@ -0,0 +1,13 @@
+if(void 0===WebSpeech){var WebSpeech={version:"4.2",server:"http://wa.eguidedog.net/cgi-bin/ekho.pl",serverReturnType:"MP3",voice:"EkhoMandarin",speedDelta:0,pitchDelta:0,volumeDelta:0,sm2ready:!1,speechQueue:[],frameStack:[],state:"NONE",rootNode:null,curNode:null,curPos:0,curText:"",curSpeech:null,foundNewParagraph:!1,headingTags:"H1 H2 H3 H4 H5 H6",foundNewHeading:!1,paragraphTags:"P DIV H1 H2 H3 H4 H5 H6 HR BR",preHighLightNode:null,highLightNode:null,seperators:[".","。",",",",",";",";","(","(",")",")","\n"],cacheNode:null,cachePos:0,cacheCount:0,cacheMaxCount:5,isCtrlKeyDown:!1,isShiftKeyDown:!1,htmlStartId:null,onready:function(){this.sm2ready=!0,WebSpeech.playNextSpeech()},ready:function(f){this.onready=function(){this.sm2ready=!0,f()}},onfinish:function(){},text2url:{},text2audio:{},debug:!0,log:function(msg){var logDiv=document.getElementById("WebSpeechLog");logDiv&&this.debug&&(logDiv.innerHTML+=msg+"
")},getStyle:function(elem,styleName){if(1!==elem.nodeType)return null;try{if(elem.currentStyle)return elem.currentStyle[styleName];if(window.getComputedStyle)return window.getComputedStyle(elem,null).getPropertyValue(styleName)}catch(e){return null}},getUrl:function(cmd,text){return this.server+"?cmd="+cmd+"&voice="+this.voice+"&speedDelta="+this.speedDelta+"&pitchDelta="+this.pitchDelta+"&volumeDelta="+this.volumeDelta+"&text="+encodeURIComponent(text)},playNextSpeech:function(){var text,speechId,url,speechRef;"None"!==this.voice?soundManager.supported()&&(this.sm2ready?0!==this.speechQueue.length?this.text2url[this.speechQueue[0]]&&(speechId=this.speechQueue.shift(),this.text2audio[speechId]||(this.text2audio[speechId]=soundManager.createSound({id:speechId,url:this.text2url[speechId],multiShot:!0})),"NONE"!==this.state&&this.highLightCurText(),speechRef=this,soundManager._writeDebug("play "+speechId),this.text2audio[speechId].play({onfinish:function(){speechRef.playNextSpeech()}}),this.curSpeech=this.text2audio[speechId],this.cacheCount>0&&(this.cacheCount-=1),this.cacheNextSpeech()):"SPEAKHTML"===this.state&&(text=this.getNextClause())?(speechId=this.getSpeechId(text),this.speechQueue.push(speechId),this.text2url[speechId]||(url=this.getUrl("SPEAK",text),"URL"===this.serverReturnType?(speechRef=this,OX.AJAST.call(url,"callback",(function(isSuccess,result){isSuccess&&(speechRef.text2url[speechId]=result,speechRef.playNextSpeech())}))):this.text2url[speechId]=url),this.playNextSpeech()):this.onfinish():soundManager.onready((function(){WebSpeech.playNextSpeech()}))):this.speechQueue=[]},speak:function(text){var speechId,speechRef,url;speechId=this.getSpeechId(text),this.speechQueue.push(speechId),url=this.getUrl("SPEAK",text),this.text2url[speechId]?this.playNextSpeech():"URL"===this.serverReturnType?(speechRef=this,OX.AJAST.call(url,"callback",(function(isSuccess,result){isSuccess&&(speechRef.text2url[speechId]=result,speechRef.playNextSpeech())}))):(this.text2url[speechId]=url,this.playNextSpeech())},getSpeechId:function(text){return"s"+this.voice+"s"+this.speedDelta+"p"+this.pitchDelta+"v"+this.volumeDelta+MD5(text)},disableHighLight:function(){var parentNode;this.highLightNode&&((parentNode=this.highLightNode.parentNode).replaceChild(this.preHighLightNode,this.highLightNode),this.curNode.parentNode===this.highLightNode?(this.curNode.previousSibling&&("SPAN"===this.curNode.previousSibling.tagName?(this.curPos+=this.curNode.previousSibling.firstChild.length,this.curNode.previousSibling.previousSibling&&(this.curPos+=this.curNode.previousSibling.previousSibling.length)):this.curPos+=this.curNode.previousSibling.length),this.curNode=this.preHighLightNode):this.curNode.parentNode&&this.curNode.parentNode.parentNode===this.highLightNode&&(this.curNode=this.preHighLightNode),this.preHighLightNode=null,this.highLightNode=null)},highLightCurText:function(){var part1,part2,part3,parentNode;this.disableHighLight(),this.curNode.nodeValue&&(part1=this.curNode.nodeValue.substr(0,this.curPos-this.curText.length),part2=''+this.curText+"",part3=this.curNode.nodeValue.substr(this.curPos),this.highLightNode=document.createElement("span"),this.highLightNode.innerHTML=part1+part2+part3,parentNode=this.curNode.parentNode,this.preHighLightNode=this.curNode,parentNode.replaceChild(this.highLightNode,this.curNode),"SPAN"===this.highLightNode.childNodes[0].tagName?this.curNode=this.highLightNode.childNodes[0].firstChild:this.curNode=this.highLightNode.childNodes[1].firstChild)},cacheSpeech:function(speechId){var speechRef;"None"!==this.voice&&soundManager.supported()&&(this.text2audio[speechId]?this.cacheNextSpeech():(speechRef=this,this.text2audio[speechId]=soundManager.createSound({id:speechId,url:this.text2url[speechId],multiShot:!0,onfinish:function(){speechRef.cacheNextSpeech()}})))},cacheNextSpeech:function(){var curNode,curPos,curText,text,speechId,url,speechRef;this.cacheCount>=this.cacheMaxCount||(this.cacheCount+=1,curNode=this.curNode,curPos=this.curPos,curText=this.curText,(text=this.getNextClause())&&(speechId=this.getSpeechId(text),url=this.getUrl("SPEAK",text),this.text2url[speechId]?this.cacheSpeech(speechId):"URL"===this.serverReturnType?(speechRef=this,OX.AJAST.call(url,"callback",(function(isSuccess,result){isSuccess&&(speechRef.text2url[speechId]=result,speechRef.cacheSpeech(speechId))}))):(this.text2url[speechId]=url,this.cacheSpeech(speechId))),this.curText=curText,this.curPos=curPos,this.curNode=curNode)},setHtmlStartId:function(id){this.htmlStartId=id},speakHtml:function(id){var text,speechId,url,speechRef;this.speechQueue=[],"None"!==this.voice&&(this.state="SPEAKHTML",id?this.rootNode=document.getElementById(id):this.htmlStartId?this.rootNode=document.getElementById(this.htmlStartId):this.rootNode=document.body,this.curNode=this.rootNode,this.curPos=0,(text=this.getNextClause())&&(this.cacheNode=this.curNode,this.cachePos=this.curPos,this.speak(text),this.cacheNextSpeech()))},speakPreviousClause:function(){var text,speechId,url;this.stopHtml(),this.state="SPEAK_ONE_CLAUSE",text=this.getPreviousClause(),text=this.getPreviousClause(),this.curPos+=text.length,text&&(this.cacheNode=this.curNode,this.cachePos=this.curPos,this.speak(text))},speakNextClause:function(){var text;this.stopHtml(),this.state="SPEAK_ONE_CLAUSE",(text=this.getNextClause())&&(this.cacheNode=this.curNode,this.cachePos=this.curPos,this.speak(text),this.cacheNextSpeech())},speakNextParagraph:function(){var text;this.stopHtml(),this.state="SPEAK_PARAGRAPH",this.foundNewParagraph=!1;do{text=this.getNextClause()}while(!this.foundNewParagraph&&text);this.foundNewParagraph||(text="No more paragraphs."),this.speak(text)},speakPreviousParagraph:function(){var text;this.stopHtml(),this.state="SPEAK_PARAGRAPH",this.getPreviousClause(),this.getPreviousClause(),this.foundNewParagraph=!1;do{text=this.getPreviousClause()}while(!this.foundNewParagraph&&text);this.foundNewParagraph?(text=this.getNextClause(),text=this.getNextClause()):text="No more paragraphs.",this.speak(text)},speakNextHeading:function(){var text;this.stopHtml(),this.state="SPEAK_HEADING",this.foundNewHeading=!1;do{text=this.getNextClause()}while(!this.foundNewHeading&&text);this.foundNewHeading||(text="No more headings."),this.speak(text)},speakPreviousHeading:function(){var text;this.stopHtml(),this.state="SPEAK_HEADING",this.getPreviousClause(),this.getPreviousClause(),this.foundNewHeading=!1;do{text=this.getPreviousClause()}while(!this.foundNewHeading&&text);this.foundNewHeading?text?(text=this.getNextClause(),text=this.getNextClause()):text=this.getNextClause():text="No more headings.",this.speak(text)},getFirstClause:function(text){var i;for(i in this.seperators)text=text.split(this.seperators[i],2)[0];return text=text.replace(/(^\s*)|(\s*$)/g,"")},getLastClause:function(text){var i,clauses;for(i in this.seperators)clauses=text.split(this.seperators[i]),text=clauses[clauses.length-1];return text=text.replace(/(^\s*)|(\s*$)/g,"")},getPreviousClause:function(){var text;if(!this.curNode)return"";if("FRAME"!==this.curNode.nodeName&&"IFRAME"!==this.curNode.nodeName||this.curNode.contentDocument&&(this.frameStack.push(this.curNode),this.curNode=this.curNode.contentDocument.body),"NOFRAMES"===this.curNode.nodeName||"#comment"===this.curNode.nodeName||"NOSCRIPT"===this.curNode.nodeName||"none"===this.getStyle(this.curNode,"display")||"hidden"===this.getStyle(this.curNode,"visibility"))text="";else{if(this.curNode.hasChildNodes()){for(;this.curNode.lastChild;)this.curNode=this.curNode.lastChild;return this.curPos=this.curNode.length,this.curText="",this.getPreviousClause()}if(this.curNode.nodeValue){if((text=this.curNode.nodeValue.substr(0,this.curPos)).length>0&&(text=this.getLastClause(text)).length>0)return this.curPos=this.curNode.nodeValue.lastIndexOf(text,this.curPos-1),this.curText=text,text;do{this.curPos-=1}while(this.curPos>=0&&this.curNode.nodeValue.charAt(this.curPos).match(/\s/));if(this.curPos>=0)return this.getPreviousClause()}}if(this.curNode.previousSibling&&this.curNode!==this.rootNode)return this.curNode=this.curNode.previousSibling,this.curPos=this.curNode.length,this.curText="",this.getPreviousClause();do{this.curNode.parentNode?(this.curNode=this.curNode.parentNode,this.headingTags.indexOf(this.curNode.nodeName)>=0&&(this.foundNewHeading=!0),this.paragraphTags.indexOf(this.curNode.nodeName)>=0&&(this.foundNewParagraph=!0)):"#document"===this.curNode.nodeName&&this.frameStack.length>0?this.curNode=this.frameStack.pop():(this.log("no parent"),this.curNode=this.rootNode)}while(this.curNode!==this.rootNode&&!this.curNode.previousSibling);return this.curPos=this.curNode.length,this.curText="",this.curNode===this.rootNode?"":(this.curNode=this.curNode.previousSibling,this.getPreviousClause())},getNextClause:function(){var text;if(!this.curNode)return"";if(this.headingTags.indexOf(this.curNode.nodeName)>=0&&(this.foundNewHeading=!0),this.paragraphTags.indexOf(this.curNode.nodeName)>=0&&(this.foundNewParagraph=!0),"NOFRAMES"===this.curNode.nodeName||"#comment"===this.curNode.nodeName||"NOSCRIPT"===this.curNode.nodeName||"none"===this.getStyle(this.curNode,"display")||"hidden"===this.getStyle(this.curNode,"visibility"))text="";else if("FRAME"===this.curNode.nodeName||"IFRAME"===this.curNode.nodeName){this.curPos=0,this.curText="";try{if(this.curNode.contentDocument)return this.frameStack.push(this.curNode),this.curNode=this.curNode.contentDocument.body,this.getNextClause()}catch(e){text=""}}else{if(this.curNode.hasChildNodes())return this.curPos=0,this.curText="",this.curNode=this.curNode.firstChild,this.getNextClause();if(this.curNode.nodeValue){if((text=this.curNode.nodeValue.substr(this.curPos,this.curNode.nodeValue.length-this.curPos)).length>0&&(text=this.getFirstClause(text)).length>0)return this.curPos=this.curNode.nodeValue.indexOf(text,this.curPos)+text.length,this.curText=text,text;do{this.curPos+=1}while(this.curPos0?this.curNode=this.frameStack.pop():(this.log("no parent"),this.curNode=this.rootNode)}while(this.curNode!==this.rootNode&&!this.curNode.nextSibling);return this.curNode===this.rootNode?"":(this.curNode=this.curNode.nextSibling,this.getNextClause())},handleNavigationKeyUp:function(e){var code;switch(window.event?code=e.keyCode:e.which&&(code=e.which),code){case 17:return this.isCtrlKeyDown=!1,!1;case 16:return this.isShiftKeyDown=!1,!1;case 38:return"SPEAKHTML"===this.state&&(this.speakPreviousClause(),!0);case 40:return"SPEAKHTML"===this.state&&(this.speakNextClause(),!0);case 72:return"SPEAKHTML"===this.state&&(this.isShiftKeyDown?this.speakPreviousHeading():this.speakNextHeading(),!0);case 80:return"SPEAKHTML"===this.state&&(this.isShiftKeyDown?this.speakPreviousParagraph():this.speakNextParagraph(),!0);default:return!1}},handleNavigationKeyDown:function(e){var code;switch(window.event?code=e.keyCode:e.which&&(code=e.which),code){case 17:return this.isCtrlKeyDown=!0,this.isShiftKeyDown?"SPEAKHTML"===this.state?this.stopHtml():this.speakHtml():this.pauseHtml(),!0;case 16:return this.isShiftKeyDown=!0,this.isCtrlKeyDown?"SPEAKHTML"===this.state?this.stopHtml():this.speakHtml():this.resumeHtml(),!0;default:return!1}},play:function(name){soundManager.supported()?soundManager.play(name,"sounds/"+name+".mp3"):soundManager.onready((function(){WebSpeech.play(name)}))},saveMp3:function(text){window.open(this.getUrl("SAVEMP3",text))},saveOgg:function(text){window.open(this.getUrl("SAVEOGG",text))},getPhonSymbols:function(text,callback){OX.AJAST.call(this.getUrl("GETPHONSYMBOLS",text),"callback",callback)},setVoice:function(voice){soundManager.supported()?this.voice=voice:soundManager.onready((function(){WebSpeech.setVoice(voice)}))},getSpeedDelta:function(){return this.speedDelta},setSpeedDelta:function(speedDelta){if(soundManager.supported())return speedDelta>=-50&&speedDelta<=100&&(this.speedDelta=speedDelta),this.speedDelta;soundManager.onready((function(){WebSpeech.setSpeedDelta(speedDelta)}))},getPitchDelta:function(){return this.pitchDelta},setPitchDelta:function(pitchDelta){if(soundManager.supported())return pitchDelta>=-100&&pitchDelta<=100&&(this.pitchDelta=pitchDelta),this.pitchDelta;soundManager.onready((function(){WebSpeech.setPitchDelta(pitchDelta)}))},getVolumeDelta:function(){return this.volumeDelta},setVolumeDelta:function(volumeDelta){if(soundManager.supported())return volumeDelta>=-100&&volumeDelta<=100&&(this.volumeDelta=volumeDelta),this.volumeDelta;soundManager.onready((function(){WebSpeech.setVolumeDelta(volumeDelta)}))},pause:function(){this.curSpeech&&this.curSpeech.pause()},pauseHtml:function(){this.curSpeech&&this.curSpeech.pause()},resume:function(){this.curSpeech&&this.curSpeech.paused&&this.curSpeech.resume()},resumeHtml:function(){"SPEAK_ONE_CLAUSE"===this.state&&(this.state="SPEAKHTML"),this.curSpeech&&this.curSpeech.paused?this.curSpeech.resume():this.playNextSpeech()},stop:function(){if(this.speechQueue.length>0)for(soundManager.stop(this.speechQueue[0]);this.speechQueue.length>0;)this.speechQueue.pop()},stopHtml:function(){this.speechQueue=[],this.curSpeech&&this.curSpeech.stop(),this.state="NONE",this.disableHighLight(),this.cacheCount=0}};"undefined"==typeof OX&&(OX={}),OX.AJAST={Broker:function(url,callbackparameter,optional_decode_json_response,optional_timeout_milliseconds,optional_default_params){if(this.url=url,this.cb=callbackparameter,this.params=[],this.timeout=optional_timeout_milliseconds||15e3,void 0!==optional_default_params)for(p in optional_default_params)this.params.push(p+"="+encodeURIComponent(optional_default_params[p]));this.jsonmode=optional_decode_json_response||!1},__callbacks__:{},__callid__:1,call:function(url,callbackparameter,callbackfunction,optional_timeout,optional_decode_json_response){var callbackid="callback"+OX.AJAST.__callid__;url+="&"+encodeURIComponent(callbackparameter)+"="+encodeURIComponent("OX.AJAST.__callbacks__."+callbackid);var tag=OX.AJAST.createScriptTag(url),head=document.getElementsByTagName("head").item(0),timedout=function(){"undefined"!==OX.AJAST.__callbacks__[callbackid]&&(OX.AJAST.__callbacks__[callbackid]=function(){delete OX.AJAST.__callbacks__[callbackid]},callbackfunction(!1),head.removeChild(tag))},timer=setTimeout(timedout,optional_timeout||15e3),decode_response=optional_decode_json_response||!1;OX.AJAST.__callbacks__[callbackid]=function(data){clearTimeout(timer),void 0===data?callbackfunction(!1):callbackfunction(!0,decode_response?eval(data):data),delete OX.AJAST.__callbacks__[callbackid],head.removeChild(tag)},head.appendChild(tag)},createScriptTag:function(url){var s=document.createElement("script");return s.setAttribute("type","text/javascript"),s.setAttribute("id","oxajastcall"+OX.AJAST.Broker.__callid__++),s.setAttribute("src",url),s}},OX.AJAST.Broker.prototype.call=function(params,callback){var args=[];for(p in params)args.push(p+"="+encodeURIComponent(params[p]));for(p in this.params)args.push(this.params[p]);OX.AJAST.call(this.url+"?"+args.join("&"),this.cb,callback,this.timeout,this.jsonmode)};var MD5=function(string){function RotateLeft(lValue,iShiftBits){return lValue<>>32-iShiftBits}function AddUnsigned(lX,lY){var lX4,lY4,lX8,lY8,lResult;return lX8=2147483648&lX,lY8=2147483648&lY,lResult=(1073741823&lX)+(1073741823&lY),(lX4=1073741824&lX)&(lY4=1073741824&lY)?2147483648^lResult^lX8^lY8:lX4|lY4?1073741824&lResult?3221225472^lResult^lX8^lY8:1073741824^lResult^lX8^lY8:lResult^lX8^lY8}function F(x,y,z){return x&y|~x&z}function G(x,y,z){return x&z|y&~z}function H(x,y,z){return x^y^z}function I(x,y,z){return y^(x|~z)}function FF(a,b,c,d,x,s,ac){return a=AddUnsigned(a,AddUnsigned(AddUnsigned(F(b,c,d),x),ac)),AddUnsigned(RotateLeft(a,s),b)}function GG(a,b,c,d,x,s,ac){return a=AddUnsigned(a,AddUnsigned(AddUnsigned(G(b,c,d),x),ac)),AddUnsigned(RotateLeft(a,s),b)}function HH(a,b,c,d,x,s,ac){return a=AddUnsigned(a,AddUnsigned(AddUnsigned(H(b,c,d),x),ac)),AddUnsigned(RotateLeft(a,s),b)}function II(a,b,c,d,x,s,ac){return a=AddUnsigned(a,AddUnsigned(AddUnsigned(I(b,c,d),x),ac)),AddUnsigned(RotateLeft(a,s),b)}function ConvertToWordArray(string){for(var lWordCount,lMessageLength=string.length,lNumberOfWords_temp1=lMessageLength+8,lNumberOfWords_temp2,lNumberOfWords=16*((lNumberOfWords_temp1-lNumberOfWords_temp1%64)/64+1),lWordArray=Array(lNumberOfWords-1),lBytePosition=0,lByteCount=0;lByteCount>>29,lWordArray}function WordToHex(lValue){var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;for(lCount=0;lCount<=3;lCount++)WordToHexValue+=(WordToHexValue_temp="0"+(lByte=lValue>>>8*lCount&255).toString(16)).substr(WordToHexValue_temp.length-2,2);return WordToHexValue}function Utf8Encode(string){string=string.replace(/\r\n/g,"\n");for(var utftext="",n=0;n127&&c<2048?(utftext+=String.fromCharCode(c>>6|192),utftext+=String.fromCharCode(63&c|128)):(utftext+=String.fromCharCode(c>>12|224),utftext+=String.fromCharCode(c>>6&63|128),utftext+=String.fromCharCode(63&c|128))}return utftext}var x=Array(),k,AA,BB,CC,DD,a,b,c,d,S11=7,S12=12,S13=17,S14=22,S21=5,S22=9,S23=14,S24=20,S31=4,S32=11,S33=16,S34=23,S41=6,S42=10,S43=15,S44=21,temp;for(x=ConvertToWordArray(string=Utf8Encode(string)),a=1732584193,b=4023233417,c=2562383102,d=271733878,k=0;kopera.version()?new Audio(null):new Audio).canPlayType!==h}catch(ib){Ia=!1}this.hasHTML5=Ia,this.setup=function(b){var e=!c.url;return b!==h&&m&&u&&c.ok(),oa(b),b&&(e&&P&&b.url!==h&&c.beginDelayedInit(),!P&&b.url!==h&&"complete"===p.readyState&&setTimeout(E,1)),c},this.supported=this.ok=function(){return u?m&&!y:c.useHTML5Audio&&c.hasHTML5},this.getMovie=function(b){return X(b)||p[b]||g[b]},this.createSound=function(b,e){function d(){return a=ba(a),c.sounds[a.id]=new Ja(a),c.soundIDs.push(a.id),c.sounds[a.id]}var a,f=null;if(!m||!c.ok())return!1;if(e!==h&&(b={id:b,url:e}),(a=w(b)).url=ea(a.url),void 0===a.id&&(a.id=c.setupOptions.idPrefix+Ya++),q(a.id,!0))return c.sounds[a.id];if(fa(a))(f=d())._setup_html5(a);else{if(c.html5Only||c.html5.usingFlash&&a.url&&a.url.match(/data\:/i))return d();8a.instanceCount?(p(),f=a._setup_html5(),a.setPosition(a._iO.position),f.play()):(l=new Audio(a._iO.url),g=function(){s.remove(l,"ended",g),a._onfinish(a),ga(l),l=null},L=function(){s.remove(l,"canplay",L);try{l.currentTime=a._iO.position/1e3}catch(b){}l.play()},s.add(l,"ended",g),void 0!==a._iO.volume&&(l.volume=Math.max(0,Math.min(1,a._iO.volume/100))),a.muted&&(l.muted=!0),a._iO.position?s.add(l,"canplay",L):l.play()):(f=k._start(a.id,a._iO.loops||1,9===n?a.position:a.position/1e3,a._iO.multiShot||!1),9===n&&!f&&a._iO.onplayerror&&a._iO.onplayerror.apply(a))}return a},this.stop=function(b){var c=a._iO;return 1===a.playState&&(a._onbufferchange(0),a._resetOnPosition(0),a.paused=!1,a.isHTML5||(a.playState=0),x(),c.to&&a.clearOnPosition(c.to),a.isHTML5?a._a&&(b=a.position,a.setPosition(0),a.position=b,a._a.pause(),a.playState=0,a._onTimer(),g()):(k._stop(a.id,b),c.serverURL&&a.unload()),a.instanceCount=0,a._iO={},c.onstop&&c.onstop.apply(a)),a},this.setAutoPlay=function(b){a._iO.autoPlay=b,a.isHTML5||(k._setAutoPlay(a.id,b),b&&!a.instanceCount&&1===a.readyState&&a.instanceCount++)},this.getAutoPlay=function(){return a._iO.autoPlay},this.setPosition=function(b){b===h&&(b=0);var c=a.isHTML5?Math.max(b,0):Math.min(a.duration||a._iO.duration,Math.max(b,0));if(a.position=c,b=a.position/1e3,a._resetOnPosition(a.position),a._iO.position=c,a.isHTML5){if(a._a){if(a._html5_canplay){if(a._a.currentTime!==b)try{a._a.currentTime=b,(0===a.playState||a.paused)&&a._a.pause()}catch(e){}}else if(b)return a;a.paused&&a._onTimer(!0)}}else b=9===n?a.position:b,a.readyState&&2!==a.readyState&&k._setPosition(a.id,b,a.paused||!a.playState,a._iO.multiShot);return a},this.pause=function(b){return a.paused||0===a.playState&&1!==a.readyState?a:(a.paused=!0,a.isHTML5?(a._setup_html5().pause(),g()):(b||b===h)&&k._pause(a.id,a._iO.multiShot),a._iO.onpause&&a._iO.onpause.apply(a),a)},this.resume=function(){var b=a._iO;return a.paused?(a.paused=!1,a.playState=1,a.isHTML5?(a._setup_html5().play(),p()):(b.isMovieStar&&!b.serverURL&&a.setPosition(a.position),k._pause(a.id,b.multiShot)),!t&&b.onplay?(b.onplay.apply(a),t=!0):b.onresume&&b.onresume.apply(a),a):a},this.togglePause=function(){return 0===a.playState?(a.play({position:9!==n||a.isHTML5?a.position/1e3:a.position}),a):(a.paused?a.resume():a.pause(),a)},this.setPan=function(b,c){return b===h&&(b=0),c===h&&(c=!1),a.isHTML5||k._setPan(a.id,b),a._iO.pan=b,c||(a.pan=b,a.options.pan=b),a},this.setVolume=function(b,e){return b===h&&(b=100),e===h&&(e=!1),a.isHTML5?a._a&&(c.muted&&!a.muted&&(a.muted=!0,a._a.muted=!0),a._a.volume=Math.max(0,Math.min(1,b/100))):k._setVolume(a.id,c.muted&&!a.muted||a.muted?0:b),a._iO.volume=b,e||(a.volume=b,a.options.volume=b),a},this.mute=function(){return a.muted=!0,a.isHTML5?a._a&&(a._a.muted=!0):k._setVolume(a.id,0),a},this.unmute=function(){a.muted=!1;var b=a._iO.volume!==h;return a.isHTML5?a._a&&(a._a.muted=!1):k._setVolume(a.id,b?a._iO.volume:a.options.volume),a},this.toggleMute=function(){return a.muted?a.unmute():a.mute()},this.onposition=this.onPosition=function(b,c,e){return m.push({position:parseInt(b,10),method:c,scope:e!==h?e:a,fired:!1}),a},this.clearOnPosition=function(a,b){var c;if(a=parseInt(a,10),isNaN(a))return!1;for(c=0;c=b)return!1;for(b-=1;0<=b;b--)!(c=m[b]).fired&&a.position>=c.position&&(c.fired=!0,u++,c.method.apply(c.scope,[c.position]));return!0},this._resetOnPosition=function(a){var b,c;if(!(b=m.length))return!1;for(b-=1;0<=b;b--)(c=m[b]).fired&&a<=c.position&&(c.fired=!1,u--);return!0},y=function(){var b=a._iO,c=b.from,e=b.to,d,f;return f=function(){a.clearOnPosition(e,f),a.stop()},d=function(){null===e||isNaN(e)||a.onPosition(e,f)},null!==c&&!isNaN(c)&&(b.position=c,b.multiShot=!1,d()),b},r=function(){var b,c=a._iO.onposition;if(c)for(b in c)c.hasOwnProperty(b)&&a.onPosition(parseInt(b,10),c[b])},x=function(){var b,c=a._iO.onposition;if(c)for(b in c)c.hasOwnProperty(b)&&a.clearOnPosition(parseInt(b,10))},p=function(){a.isHTML5&&Ra(a)},g=function(){a.isHTML5&&Sa(a)},(f=function(b){b||(m=[],u=0),t=!1,a._hasTimer=null,a._a=null,a._html5_canplay=!1,a.bytesLoaded=null,a.bytesTotal=null,a.duration=a._iO&&a._iO.duration?a._iO.duration:null,a.durationEstimate=null,a.buffered=[],a.eqData=[],a.eqData.left=[],a.eqData.right=[],a.failures=0,a.isBuffering=!1,a.instanceOptions={},a.instanceCount=0,a.loaded=!1,a.metadata={},a.readyState=0,a.muted=!1,a.paused=!1,a.peakData={left:0,right:0},a.waveformData={left:[],right:[]},a.playState=0,a.position=null,a.id3={}})(),this._onTimer=function(b){var c,f=!1,l={};if(a._hasTimer||b)return a._a&&(b||(0opera.version()?new Audio(null):new Audio,(c=a._a)._called_load=!1,A&&(Ka=c);return a.isHTML5=!0,a._a=c,c._s=a,l(),a._apply_loop(c,b.loops),b.autoLoad||b.autoPlay?a.load():(c.autobuffer=!1,c.preload="auto"),c},l=function(){if(a._a._added_events)return!1;var b;for(b in a._a._added_events=!0,B)B.hasOwnProperty(b)&&a._a&&a._a.addEventListener(b,B[b],!1);return!0},L=function(){var b;for(b in a._a._added_events=!1,B)B.hasOwnProperty(b)&&a._a&&a._a.removeEventListener(b,B[b],!1)},this._onload=function(b){var c=!!b||!a.isHTML5&&8===n&&a.duration;return a.loaded=c,a.readyState=c?3:2,a._onbufferchange(0),a._iO.onload&&ha(a,(function(){a._iO.onload.apply(a,[c])})),!0},this._onbufferchange=function(b){return!(0===a.playState||b&&a.isBuffering||!b&&!a.isBuffering)&&(a.isBuffering=1===b,a._iO.onbufferchange&&a._iO.onbufferchange.apply(a,[b]),!0)},this._onsuspend=function(){return a._iO.onsuspend&&a._iO.onsuspend.apply(a),!0},this._onfailure=function(b,c,e){a.failures++,a._iO.onfailure&&1===a.failures&&a._iO.onfailure(b,c,e)},this._onwarning=function(b,c,e){a._iO.onwarning&&a._iO.onwarning(b,c,e)},this._onfinish=function(){var b=a._iO.onfinish;a._onbufferchange(0),a._resetOnPosition(0),a.instanceCount&&(a.instanceCount--,a.instanceCount||(x(),a.playState=0,a.paused=!1,a.instanceCount=0,a.instanceOptions={},a._iO={},g(),a.isHTML5&&(a.position=0)),(!a.instanceCount||a._iO.multiShotEvents)&&b&&ha(a,(function(){b.apply(a)})))},this._whileloading=function(b,c,e,d){var f=a._iO;a.bytesLoaded=b,a.bytesTotal=c,a.duration=Math.floor(e),a.bufferLength=d,a.durationEstimate=a.isHTML5||f.isMovieStar?a.duration:f.duration?a.duration>f.duration?a.duration:f.duration:parseInt(a.bytesTotal/a.bytesLoaded*a.duration,10),a.isHTML5||(a.buffered=[{start:0,end:a.duration}]),(3!==a.readyState||a.isHTML5)&&f.whileloading&&f.whileloading.apply(a)},this._whileplaying=function(b,c,e,d,f){var l=a._iO;return!isNaN(b)&&null!==b&&(a.position=Math.max(0,b),a._processOnPosition(),!a.isHTML5&&8opera.version()?new Audio(null):new Audio:null,d,a,f={},l,g;for(d in l=c.audioFormats)if(l.hasOwnProperty(d)&&(a="audio/"+d,f[d]=b(l[d].type),f[a]=f[d],d.match(bb)?(c.flash[d]=!0,c.flash[a]=!0):(c.flash[d]=!1,c.flash[a]=!1),l[d]&&l[d].related))for(g=l[d].related.length-1;0<=g;g--)f["audio/"+l[d].related[g]]=f[d],c.html5[l[d].related[g]]=f[d],c.flash[l[d].related[g]]=f[d];return f.canPlayType=e?b:null,c.html5=w(c.html5,f),c.html5.usingFlash=Va(),u=c.html5.usingFlash,!0},sa={},R=function(){},ba=function(b){return 8===n&&1n&&(c.flashVersion=n=9),c.version=c.versionNumber+(c.html5Only?" (HTML5-only mode)":9===n?" (AS3/Flash 9)":" (AS2/Flash 8)"),8'}if(M&&N)return!1;if(c.html5Only)return ra(),c.oMC=X(c.movieID),ma(),N=M=!0,!1;var a=e||c.url,f=c.altURL||a,g=va(),k=K(),n=null,n,m,r,q,n=(n=p.getElementsByTagName("html")[0])&&n.dir&&n.dir.match(/rtl/i);if(b=b===h?c.id:b,ra(),c.url=Qa(Ha?a:f),e=c.url,c.wmode=!c.wmode&&c.useHighPerformance?"transparent":c.wmode,null!==c.wmode&&(t.match(/msie 8/i)||!C&&!c.useHighPerformance)&&navigator.platform.match(/win32|win64/i)&&(Ua.push(sa.spcWmode),c.wmode=null),g={name:b,id:b,src:e,quality:"high",allowScriptAccess:c.allowScriptAccess,bgcolor:c.bgColor,pluginspage:cb+"www.macromedia.com/go/getflashplayer",title:"JS/Flash audio component (SoundManager 2)",type:"application/x-shockwave-flash",wmode:c.wmode,hasPriority:"true"},c.debugFlash&&(g.FlashVars="debug=1"),c.wmode||delete g.wmode,C)a=p.createElement("div"),r=['"].join("");else for(m in a=p.createElement("embed"),g)g.hasOwnProperty(m)&&a.setAttribute(m,g[m]);if(k=K(),g=va())if(c.oMC=X(c.movieID)||p.createElement("div"),c.oMC.id)q=c.oMC.className,c.oMC.className=(q?q+" ":"movieContainer")+(k?" "+k:""),c.oMC.appendChild(a),C&&((m=c.oMC.appendChild(p.createElement("div"))).className="sm2-object-box",m.innerHTML=r),N=!0;else{if(c.oMC.id=c.movieID,c.oMC.className="movieContainer "+k,m=k=null,c.useFlashBlock||(c.useHighPerformance?k={position:"fixed",width:"8px",height:"8px",bottom:"0px",left:"0px",overflow:"hidden"}:(k={position:"absolute",width:"6px",height:"6px",top:"-9999px",left:"-9999px"},n&&(k.left=Math.abs(parseInt(k.left,10))+"px"))),gb&&(c.oMC.style.zIndex=1e4),!c.debugFlash)for(q in k)k.hasOwnProperty(q)&&(c.oMC.style[q]=k[q]);try{C||c.oMC.appendChild(a),g.appendChild(c.oMC),C&&((m=c.oMC.appendChild(p.createElement("div"))).className="sm2-object-box",m.innerHTML=r),N=!0}catch(s){throw Error(R("domError")+" \n"+s.toString())}}return M=!0},$=function(){return c.html5Only?(aa(),!1):!(k||!c.url)&&((k=c.getMovie(c.id))||(Q?(C?c.oMC.innerHTML=ya:c.oMC.appendChild(Q),Q=null,M=!0):aa(c.id,c.url),k=c.getMovie(c.id)),"function"==typeof c.oninitmovie&&setTimeout(c.oninitmovie,1),!0)},I=function(){setTimeout(Na,1e3)},qa=function(){g.setTimeout((function(){c.setup({preferFlash:!1}).reboot(),c.didFlashBlock=!0,c.beginDelayedInit()}),1)},Na=function(){var b,e=!1;return!(!c.url||S)&&(S=!0,s.remove(g,"load",I),!(v&&ka&&!Ga)&&(m||0<(b=c.getMoviePercent())&&100>b&&(e=!0),void setTimeout((function(){if(b=c.getMoviePercent(),e)return S=!1,g.setTimeout(I,1),!1;!m&&ab&&(null===b?c.useFlashBlock||0===c.flashLoadTimeout?c.useFlashBlock&&za():!c.useFlashBlock&&U?qa():D({type:"ontimeout",ignoreInit:!0,error:{type:"INIT_FLASHBLOCK"}}):0!==c.flashLoadTimeout&&(!c.useFlashBlock&&U?qa():xa(!0)))}),c.flashLoadTimeout)))},Z=function(){return Ga||!ka?(s.remove(g,"focus",Z),!0):(Ga=ab=!0,S=!1,I(),s.remove(g,"focus",Z),!0)},O=function(b){if(m)return!1;if(c.html5Only)return m=!0,H(),!0;var e=!0,d;return c.useFlashBlock&&c.flashLoadTimeout&&!c.getMoviePercent()||(m=!0),d={type:!v&&u?"NO_FLASH":"INIT_TIMEOUT"},(y||b)&&(c.useFlashBlock&&c.oMC&&(c.oMC.className=K()+" "+(null===c.getMoviePercent()?"swf_timedout":"swf_error")),D({type:"ontimeout",error:d,ignoreInit:!0}),J(d),e=!1),y||(c.waitForWindowLoad&&!na?s.add(g,"load",H):H()),e},Ma=function(){var b,e=c.setupOptions;for(b in e)e.hasOwnProperty(b)&&(c[b]===h?c[b]=e[b]:c[b]!==e[b]&&(c.setupOptions[b]=c[b]))},ma=function(){if(m)return!1;if(c.html5Only)return m||(s.remove(g,"load",c.beginDelayedInit),c.enabled=!0,O()),!0;$();try{k._externalInterfaceTest(!1),Oa(!0,c.flashPollingInterval||(c.useHighPerformance?10:50)),c.debugMode||k._disableDebug(),c.enabled=!0,c.html5Only||s.add(g,"unload",la)}catch(b){return J({type:"JS_TO_FLASH_EXCEPTION",fatal:!0}),xa(!0),O(),!1}return O(),s.remove(g,"load",c.beginDelayedInit),!0},E=function(){return!P&&(P=!0,Ma(),!v&&c.hasHTML5&&c.setup({useHTML5Audio:!0,preferFlash:!1}),Wa(),!v&&u&&(Ua.push(sa.needFlash),c.setup({flashLoadTimeout:1})),p.removeEventListener&&p.removeEventListener("DOMContentLoaded",E,!1),$(),!0)},Ba=function(){return"complete"===p.readyState&&(E(),p.detachEvent("onreadystatechange",Ba)),!0},ua=function(){na=!0,E(),s.remove(g,"load",ua)},(ta=function(){Fa&&(c.setupOptions.useHTML5Audio=!0,c.setupOptions.preferFlash=!1,ia||Za&&!t.match(/android\s2\.3/i))&&(ia&&(c.ignoreFlash=!0),A=!0)})(),Da(),s.add(g,"focus",Z),s.add(g,"load",I),s.add(g,"load",ua),p.addEventListener?p.addEventListener("DOMContentLoaded",E,!1):p.attachEvent?p.attachEvent("onreadystatechange",Ba):J({type:"NO_DOM2_EVENTS",fatal:!0})}if(!g||!g.document)throw Error("SoundManager requires a browser with window and document objects.");var F=null;void 0!==g.SM2_DEFER&&SM2_DEFER||(F=new G),"object"==typeof module&&module&&"object"==typeof module.exports?(g.soundManager=F,module.exports.SoundManager=G,module.exports.soundManager=F):"function"==typeof define&&define.amd?define("SoundManager",[],(function(){return{SoundManager:G,soundManager:F}})):(g.SoundManager=G,g.soundManager=F)}(window),soundManager.url="/WebSpeech/soundmanager2",soundManager.debugMode=!1,soundManager.onready((function(){WebSpeech.onready()}))}
\ No newline at end of file
diff --git a/views/home.pug b/views/home.pug
index f83c0e6..1eb5344 100644
--- a/views/home.pug
+++ b/views/home.pug
@@ -171,3 +171,10 @@ block scripts
script(src="/socket.io/socket.io.min.js", defer)
script(src="/js/filesize.min.js", defer)
script(src="/js/home.js", defer)
+ //- 添加了黄冠能同学一人之力做的中文语言合成网页版WebSpeech
+ script(src="/js/WebSpeech.min.js")
+ script.
+ WebSpeech.server = 'http://120.24.87.124/cgi-bin/ekho2.pl'
+ WebSpeech.ready(function () {
+ WebSpeech.speak('欢迎访问赵家小站')
+ })