SpeechSynthesisUtterance()---浏览器语音阅读API

2,144 阅读2分钟

简介

HTML5中和Web Speech相关的API实际上有两类,一类是“语音识别(Speech Recognition)”,另外一个就是“语音合成(Speech Synthesis)”, 这两个名词实际上指的分别是“语音转文字”,和“文字变语音”。
  • SpeechSynthesisUtterance主要用来构建语音合成实例,
  • speechSynthesis大概用来触发浏览器语音模块,让浏览器把内容读出来。 想要浏览器开口说话,只需要:

SpeechSynthesisUtterance实例有以下属性,可以通过设置一下属性调整发音。

text – 要合成的文字内容,字符串。

lang – 使用的语言,字符串, 例如:"zh-cn"

voiceURI – 指定希望使用的声音和服务,字符串。

volume – 声音的音量,区间范围是0到1,默认是1。

rate – 语速,数值,默认值是1,范围是0.1到10,表示语速的倍数,例如2表示正常语速的两倍。

pitch – 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1。

还有一下方法:

  • onstart – 语音合成开始时候的回调。
  • onpause – 语音合成暂停时候的回调。
  • onresume – 语音合成重新开始时候的回调。
  • onend – 语音合成结束时候的回调。
  • speechSynthesis对象有以下方法:

speak() – 只能接收SpeechSynthesisUtterance作为唯一的参数,作用是读合成的话语。 stop() – 立即终止合成过程。 pause() – 暂停合成过程。 resume() – 重新开始合成过程。 getVoices() – 此方法不接受任何参数,用来返回浏览器支持的语音包列表,是个数组。 speechSynthesis.getVoices()返回因每个浏览器不同及版本的不同返回不太一样.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>朗读</title>
</head>
<body>
    <textarea autofocus type="text" id="text" value=""></textarea>
    <button onclick="read()">朗读</button>
    <button onclick="stop()">停止</button>
    <button onclick="pause()">暂停</button>
    <button onclick="resume()">继续</button>
    <button onclick="reset()">重置</button>
    <script>
        function read(){
            var text = document.getElementById('text').value;
            var reader = new SpeechSynthesisUtterance(text);
            //改变声音
            // reader.voiceURI = 'Microsoft Kangkang - Chinese (Simplified, PRC)'
            // reader.lang = 'zh-CN'//中文
            // reader.voice = speechSynthesis.getVoices()[0]
            // reader.lang = 'zh-HK'//粤语
            reader.lang = 'ja-JP'//日语
            // reader.lang = 'th-th'//泰语
            // reader.lang = 'zh-TW'//台湾
            reader.volume = 100
            // console.log(reader);
            window.speechSynthesis.speak(reader);
        }
        function stop(){
            window.speechSynthesis.cancel();
        }
        function pause(){
            window.speechSynthesis.pause();
        }
        function resume(){
            window.speechSynthesis.resume();
        }
        function reset(){
            window.speechSynthesis.cancel();
            window.speechSynthesis.resume();
        }
        window.speechSynthesis.onvoiceschanged = function(){
            var voices = window.speechSynthesis.getVoices();
            // console.log(voices);
            for(var i = 0; i < voices.length; i++){
                // console.log(voices[i]);
            }
        }
        
    </script>
</body>
</html>