js 文字转语音 api SpeechSynthesisUtterance

简介: js 文字转语音 api SpeechSynthesisUtterance

SpeechSynthesisUtterance基本介绍


SpeechSynthesisUtterance.lang是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等


官方文档地址(https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesisUtterance


SpeechSynthesisUtterance基本属性

SpeechSynthesisUtterance.lang 获取并设置话语的语言

SpeechSynthesisUtterance.pitch 获取并设置话语的音调(值越大越尖锐,越低越低沉)

SpeechSynthesisUtterance.rate 获取并设置说话的速度(值越大语速越快,越小语速越慢)

SpeechSynthesisUtterance.text 获取并设置说话时的文本

SpeechSynthesisUtterance.voice 获取并设置说话的声音

SpeechSynthesisUtterance.volume 获取并设置说话的音量

SpeechSynthesisUtterance.text基本方法

speak() 将对应的实例添加到语音队列中

cancel() 删除队列中所有的语音.如果正在播放,则直接停止

pause() 暂停语音

resume() 恢复暂停的语音

getVoices 获取支持的语言数组. 注意:必须添加在voiceschanged事件中才能生效


使用demo

9.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        <label for="voices">语言:</label>
        <select name="voice" id="voices">
            <option value="">请选择</option>
            <!-- <option value="Google_SC">Google 普通话(中国大陆)</option>
            <option value="Kangkang_SC">Microsoft Kangkang - Chinese (Simplified, PRC)</option> -->
        </select>
    </div>
    <div>
        <label for="rate">语速:</label>
        <input id="rate" name="rate" type="range" min="0" max="3" value="1" step="0.1">
    </div>
    <div>
        <label for="pitch">音调:</label>
        <input id="pitch" name="pitch" type="range" min="0" max="2" step="0.1">
    </div>
    <div>
        <textarea id="text" name="text"></textarea>
    </div>
    <div>
        <button onclick="startAudio()">点击播放语音</button>
    </div>
    <div>
        <button onclick="stopAudio()">点击结束语音</button>
    </div>
    <div>
        <button onclick="pauseAudio()">点击暂停语音</button>
    </div>
    <div>
        <button onclick="resumeAudio()">恢复暂停的语音</button>
    </div>
</body>
<script>
    let utterance = new SpeechSynthesisUtterance() // 创建 语音对象
    // 获取元素对象
    let dom_voices = document.querySelector('#voices')
    const options = document.querySelectorAll('[type="range"], [name="text"]')
    options.forEach(e => e.addEventListener('change', handleChange))
    // voiceschanged 事件
    speechSynthesis.addEventListener('voiceschanged', () => {
        let voices = speechSynthesis.getVoices();
        // 根据系统语音创建选项
        voices.forEach(e => {
            const option = document.createElement('option')
            option.value = e.lang
            option.text = e.name
            dom_voices.appendChild(option)
        })
    })
    // 发生改变时触发
    function handleChange(e) {
        // console.log(this.name, this.value);
        utterance[this.name] = this.value
    }
    function startAudio() {
        utterance.lang = dom_voices.selectedOptions[0].value // 设置语言
        speechSynthesis.speak(utterance);
    }
    // 点击结束语音
    function stopAudio() {
        speechSynthesis.cancel(utterance)
    }
    function pauseAudio() {
        speechSynthesis.pause(utterance)
    }
    function resumeAudio() {
        speechSynthesis.resume(utterance);
    }
</script>
</html>
相关文章
|
7天前
|
开发框架 监控 JavaScript
使用Node.js 框架( Express.js)来创建一个简单的 API 端点
【7月更文挑战第5天】使用Node.js 框架( Express.js)来创建一个简单的 API 端点
11 3
|
9天前
|
JavaScript API
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
21 1
|
6天前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch(&#39;url&#39;).then(r =&gt; r.json()).then(data =&gt; console.log(data)).catch(err =&gt; console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。
|
10天前
|
JavaScript API 索引
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
28 0
|
10天前
|
JSON JavaScript API
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
15 0
|
12天前
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
12天前
|
Web App开发 JavaScript 前端开发
js 调试—— 【控制台】debugger语句 、 命令行API
js 调试—— 【控制台】debugger语句 、 命令行API
14 0
|
12天前
|
JavaScript 前端开发 Java
|
11天前
|
NoSQL 安全 API
如何有效提升 API 接口的安全性?
**API安全关键在于验证和防刷。通过排序参数、生成签名和MD5加密确保请求合法性。使用Redis限制请求频率,防止接口被恶意刷取。验证和防刷策略结合,保护API免受攻击和滥用。**
29 0
|
16天前
|
JSON 安全 API
如何高效编写API接口:以Python与Flask为例
构建RESTful API的简明教程:使用Python的Flask框架,从环境准备(安装Python,设置虚拟环境,安装Flask)到编写首个API(包括获取用户列表和单个用户信息的路由)。运行API服务器并测试在`http://127.0.0.1:5000/users`。进阶话题包括安全、数据库集成、API文档生成和性能优化。【6月更文挑战第27天】
40 7