前端开发攻略---用原生JS在网页中也能实现文本转语音

1、原理

语音合成 (也被称作是文本转为语音,英语简写是 tts) 包括接收 app 中需要语音合成的文本,再在设备麦克风播放出来这两个过程。

Web API中对此有一个主要控制接口 SpeechSynthesis,外加一些处理如何表示要被合成的文本 (也被称为 utterances),用什么声音来播出 utterances 等工作的相关接口。同样的,许多操作系统都有自己的某种语音合成系统,在这个任务中我们调用可用的 API 来使用语音合成系统。

2、示例

d65ab8eadbc84da4a92319af46ec66d3.png 您可以直接复制下面代码运行在浏览器中

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/axios/1.5.0/axios.js"></script></head><body><div><input type="text" /><button>开始播放语音</button></div></body><script>const btn = document.querySelector('button')const ipt = document.querySelector('input')function speak({ text, speechRate, lang, volume, pitch }, endEvent, startEvent) {if (!window.SpeechSynthesisUtterance) {console.warn('当前浏览器不支持文字转语音服务')return}if (!text) {return}const speechUtterance = new SpeechSynthesisUtterance()speechUtterance.text = textspeechUtterance.rate = speechRate || 1speechUtterance.lang = lang || 'zh-CN'speechUtterance.volume = volume || 1speechUtterance.pitch = pitch || 1speechUtterance.onstart = function (e) {startEvent && startEvent()}speechUtterance.onend = function (e) {endEvent && endEvent()}speechSynthesis.speak(speechUtterance)return speechUtterance}btn.addEventListener('click', function () {if (!ipt.value) returnspeak({text: ipt.value,},function () {console.log('语音播放结束')},function () {console.log('语音开始播放')})})</script>
</html>

支持的浏览器

  • Firefox 桌面版和移动版。
  • Firefox OS 2.5+。
  • Chrome 桌面版和安卓版。

注意:如果效果演示失败,大概是由于您当前使用的浏览器不支持语音转文字这个API,请更换浏览器后重试!

3、解析speak函数

接受参数

  • text:要转换为语音的文本内容。
  • speechRate:语音播放速率。
  • lang:语音的语言代码。
  • volume:语音的音量。
  • pitch:语音的音调。

1、另外,它还接受两个回调函数作为参数:endEvent 和 startEventendEvent 在语音播放结束时触发,而 startEvent 在语音播放开始时触发。

2、函数首先检查浏览器是否支持语音合成服务,如果不支持则输出警告信息并返回。然后它检查是否传入了要转换的文本内容,如果没有则直接返回。

3、接着,函数创建了一个 SpeechSynthesisUtterance 对象,该对象表示一段要朗读的文本。

4、然后将传入的参数赋值给这个对象的相应属性,如文本内容、语速、语言、音量和音调。

在设置好 SpeechSynthesisUtterance 对象的属性后,

5、函数设置了两个事件处理程序:onstart 和 onendonstart 事件处理程序在语音播放开始时触发 startEvent 回调函数,onend 事件处理程序在语音播放结束时触发 endEvent 回调函数。

6、最后,函数通过 speechSynthesis.speak() 方法来开始语音合成,将 SpeechSynthesisUtterance 对象传递给该方法以开始朗读文本,并返回这个 SpeechSynthesisUtterance 对象。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/650584.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySql 主从同步-在原来同步基础上增加历史数据库

在MySql已经主从同步的后&#xff0c;由于有新的需求再增加1个历史数据库&#xff0c;要改原来的1个变成现在的2个数据库。在官网并没有找到类似的场景&#xff08;官方同步多个数据是从一开始就设置&#xff0c;不是后续增加的&#xff09;&#xff0c;只能结合以往的经验自己…

Weblogic一个domain建多个server(端口)

一、基本环境 名称IP端口说明AdminServer192.168.20.207001管理服务WRServer192.168.20.207001提供应用服务 1、启动weblogic服务 二、操作步骤 在weblogic控制台。环境-服务器-新建 填写服务器名称-监听地址-监听端口-点击完成 2、按照web应用 3、启动服务 /home/weblogic/…

(二十九)加油站:面向对象重难点深入讲解【重点是元类】

目录&#xff1a; 每篇前言&#xff1a;0. Python中的元类&#xff1a;1. 本文引子&#xff1a;2. Python中的mro机制&#xff1a;3. Python中类的魔法属性dict&#xff1a;注意事项&#xff1a; 拓展——内建函数dir() 4. 正式谈一谈元类&#xff08;metaclass&#xff09;:&a…

小酒馆点餐系统实现-C++项目详细过程

目录 项目介绍1、项目描述2、市场调研3、技术调研 项目设计1、概要设计2、详细设计① 数据管理模块&#xff1a;② 业务控制模块&#xff1a;③ 前端界面模块&#xff1a; 3、代码实现实现数据管理模块实现业务控制模块实现前端界面模块 项目介绍 1、项目描述 使用户可以通过…

Nacos 安全零信任实践

作者&#xff1a;柳遵飞 Nacos 作为配置中心经常存储一些敏感信息&#xff0c;但是由于误用导致安全风险&#xff0c;最常见的主要是以下两个问题&#xff1a; 1&#xff09;Nacos 暴露公网可以吗&#xff1f;不可以&#xff0c;因为 Nacos 定位是注册配置中心&#xff0c;是…

RoadBEV:鸟瞰图中的道路表面重建

1. 代码地址 GitHub - ztsrxh/RoadBEV: Codes for RoadBEV: road surface reconstruction in Birds Eye View 2. 摘要 本文介绍了RoadBEV&#xff1a;鸟瞰图中的道路表面重建。道路表面条件&#xff08;特别是几何形状&#xff09;极大地影响了自动驾驶汽车的驾驶性能。基于…

浏览器渲染机制:重排(Reflow)与重绘(Repaint)以及Vue优化策略

浏览器渲染机制是一个复杂但有序的过程&#xff0c;其目的是将HTML、CSS和JavaScript代码转化为用户可以看到和交互的视觉界面。重排&#xff08;Reflow&#xff09;与重绘&#xff08;Repaint&#xff09;是浏览器渲染过程中对页面元素进行更新的两个重要步骤&#xff0c;理解…

QML中使用正则表达式

我想在TextField控件中使用正则表达式&#xff0c;然后GPT4给出的回答是这样的&#xff1a; TextField {id: versionInputplaceholderText: qsTr("输入版本号")validator: RegExpValidator { regExp: /^[a-zA-Z0-9]*$/ } // 仅允许字母和数字width: 120 // 设置合…

Linux系统-DHCP原理与配置

目录 一.DHCP工作原理 1.了解DHCP服务 2.使用DHCP的好处 3.DHCP的分配方式 4.DHCP的租约过程 二.DHCP服务器的配置 1.首先先关闭防火墙 2. 安装DHCP有关软件包 3.查看系统的配置文件​编辑 4.设置参数 5.网络配置 一.DHCP工作原理 1.了解DHCP服务 DHCP(Dynamic Hos…

【Linux】详解信号产生的方式

一、kill命令 在命令行中通过kill -数字 pid指令可以给指定进程发送指定信号。这里说明一下几个常见的信号&#xff1a; SIGINT&#xff08;2号信号&#xff09;&#xff1a;中断信号&#xff0c;通常由用户按下CtrlC产生&#xff0c;用于通知进程终止。SIGQUIT&#xff08;3号…

路由重分布的概念与配置

路由重分布的概念 l 路由重分布是指连接不同路由域&#xff08;自治系统&#xff09;的边界路由器&#xff0c;它在路由协议之间交换和通告路由信息 从一种协议&#xff08;含静态/直连路由&#xff09;到另一种协议 同一种协议的多个实例 路由重分布的背景 网络出口位置…

Liunx下用C语言模拟实现 —— 封装文件操作接口

一、前提 本篇博客将循序渐进的模拟实现C语言中&#xff0c;简单版的对FILE和一些简单的文件操作接口的实现&#xff0c;在上一篇文件操作原理篇我们知道&#xff0c;实际的实现就是对系统接口的封装&#xff0c;为了巩固和练习之前学到的概念&#xff0c;我们也来简单的实现对…