JS调用微软TTS DEMO朗读

来源:互联网 发布:动画视频公司 tvc网络 编辑:程序博客网 时间:2024/05/16 07:17
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <script LANGUAGE="JavaScript">        // Create the Sapi SpVoice object        var VoiceObj = new ActiveXObject("Sapi.SpVoice");        // ChangeVoice() function:        //      This function sets the newly selected voice choice from the Voice        //      Select box on the Voice object.        function ChangeVoice() {            var i = parseInt(idsVoices.value);            VoiceObj.Voice = VoiceObj.GetVoices().Item(i);        }        // ChangeAudioOutput() function:        //      This function sets the newly selected audio output choice from the        //      Audio Output Select box on the Voice object.        function ChangeAudioOutput() {            var i = parseInt(idsAudioOutputs.value);            VoiceObj.AudioOutput = VoiceObj.GetAudioOutputs().Item(i);        }        // IncRate() function:        //      This function increases the speaking rate by 1 up to a maximum        //      of 10.        function IncRate() {            if(VoiceObj.Rate < 10) {                VoiceObj.Rate = VoiceObj.Rate + 1;            }        }        // DecRate() function:        //      This function decreases the speaking rate by -1 down to a minimum        //      of -10.        function DecRate() {            if(VoiceObj.Rate > -10) {                VoiceObj.Rate = VoiceObj.Rate - 1;            }        }        // IncVol() function:        //      This function increases the speaking volume by 10 up to a maximum        //      of 100.        function IncVol() {            if(VoiceObj.Volume < 200) {                VoiceObj.Volume = VoiceObj.Volume + 10;            }        }        // DecVol() function:        //      This function decreases the speaking volume by -10 down to a minimum        //      of 0.        function DecVol() {            if(VoiceObj.Volume > 9) {                VoiceObj.Volume = VoiceObj.Volume - 10;            }        }        // SpeakText() function:        //      This function gets the text from the textbox and sends it to the        //      Voice object's Speak() function. The value "1" for the second        //              parameter corresponds to the SVSFlagsAsync value in the SpeechVoiceSpeakFlags        //      enumerated type.        function SpeakText() {            if(idbSpeakText.value == "SpeakText") {                // Speak the string in the edit box                try {                    VoiceObj.Speak(idTextBox.value, 2);                }                catch(exception) {                    alert("Speak error");                }            }            else if(idbSpeakText.value == "Stop") {                // Speak empty string to Stop current speaking. The value "2" for                // the second parameter corresponds to the SVSFPurgeBeforeSpeak                // value in the SpeechVoiceSpeakFlags enumerated type.                VoiceObj.Speak("", 2);            }        }    </script>    <script for="window" EVENT="OnQuit()" LANGUAGE="JavaScript">        delete VoiceObj;    </script></head><body><h1 align=center>TTS Demo</h1><img alt="" border="0" hspace="0" id="idImage" src="mouthclo.bmp" style="width: 50px;margin-left: -25px;left: 50%;position: relative"><h1 align=center>    <textarea id="idTextBox" cols="50" rows="10" wrap="VIRTUAL">请输入内容在此朗读</textarea></h1><P align=center>    Rate    <input id="idbIncRate" name="button1" type="button" onclick="IncRate()" value="+">    <input id="idbDecRate" name="button2" type="button" onclick="DecRate()" value="-" style="LEFT: 237px; TOP: 292px">    Volume    <input id="idbIncVol" name="button3" onclick="IncVol()" style="left:67px;top:318px;" type="button" value="+">    <input id="idbDecVol" name="button4" onclick="DecVol()" type=button value="-" style="LEFT: 134px; TOP: 377px"></P><P align="center">    <button id="idbSpeakText" onclick="SpeakText()" value="SpeakText" style="height:25px;left:363px; top: 332px; width: 178px;">        SpeakText    </button></P><P align="center">    <label>Voice</label>    <label>Audio Output</label></P><P align="center">    <select id="idsVoices" name="Voices" onchange="ChangeVoice()"></select>    <select id="idsAudioOutputs" name="AudioOutputs" onchange="ChangeAudioOutput()"></select></P><script LANGUAGE="JavaScript">    // Code in the BODY of the webpage is used to initialize controls and    // to handle SAPI events    /***** Initializer code *****/    InitializeControls();    function InitializeControls() {        // Initialize the Voices and AudioOutput Select boxes        var VoicesToken = VoiceObj.GetVoices();        var AudioOutputsToken = VoiceObj.GetAudioOutputs();        // Add correct strings to Voice Select box        for(var i = 0; i < VoicesToken.Count; i++) {            var oOption = document.createElement("OPTION");            idsVoices.options.add(oOption);            oOption.innerText = VoicesToken.Item(i).GetDescription();            oOption.value = i;        }        // Add correct strings to Audio Output Select box        for(var i = 0; i < AudioOutputsToken.Count; i++) {            var oOption = document.createElement("OPTION");            idsAudioOutputs.options.add(oOption);            oOption.innerText = AudioOutputsToken.Item(i).GetDescription();            oOption.value = i;        }    }    /***** Event handling code *****/    // These functions are used to handle the SAPI events    // Handle StartStream event    function VoiceObj::StartStream()    {        idbSpeakText.value = "Stop";    }    // Handle EndStream event    function VoiceObj::EndStream()    {        idbSpeakText.value = "SpeakText";        idImage.src = "mouthclo.bmp";    }    // Handle Viseme event    function VoiceObj::Viseme(StreamNum, StreamPos, Duration, VisemeType, Feature, VisemeId)    {        // Map the VisemeId to the appropriate .bmp        if(VisemeId == 15 || VisemeId == 17 || VisemeId == 18 || VisemeId == 21) {            idImage.src = "mouthop1.bmp";        }        else if(VisemeId == 14 || VisemeId == 16 || VisemeId == 19 || VisemeId == 20) {            idImage.src = "mouthop2.bmp";        }        else if(VisemeId == 4 || VisemeId == 6 || VisemeId == 9 || VisemeId == 12) {            idImage.src = "mouthop3.bmp";        }        else if(VisemeId == 1 || VisemeId == 2 || VisemeId == 3 || VisemeId == 11) {            idImage.src = "mouthop4.bmp";        }        else if(VisemeId == 7 || VisemeId == 8) {            idImage.src = "mouthnar.bmp";        }        else if(VisemeId == 5 || VisemeId == 10 || VisemeId == 13) {            idImage.src = "mouthmed.bmp";        }        else {            idImage.src = "mouthclo.bmp";        }    }</script></body></html>
原创粉丝点击