在Js中如何实现文本朗读即文字转语音功能实现

2023-10-20 20:28

本文主要是介绍在Js中如何实现文本朗读即文字转语音功能实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

9db8024d6145b123a8efc1db27986da1.jpeg

前言

平时在做项目的过程中,有遇到场景是客户要求播放语音的场景,比如:无障碍朗读,整篇文章实现朗读,文字转语音,文字转语音播放等等。

在不使用第三方API接口的情况下,这里需要js来实现文字转语音播放的功能。能想到的也就是利用html5的个APISpeechSynthesis

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

SpeechSynthesis实例对象属性

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

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

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

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

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

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

SpeechSynthesis方法

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

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

  3. pause()暂停语音

  4. resume() 恢复暂停的语音

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

实例对象中的方法

  1. onstart – 语音合成开始时候的回调。

  2. onpause – 语音合成暂停时候的回调。

  3. onresume – 语音合成重新开始时候的回调。

  4. onend – 语音合成结束时候的回调

简单实现

如果想让浏览器读出“书以启智,技于谋生,活出斜杠”的声音,可以下面的js代码:

let utterThis = new SpeechSynthesisUtterance('书以启智,技于谋生,活出斜杠');
speechSynthesis.speak(utterThis);

实现这个语音朗读,需要用构造器函数SpeechSynthesisUtterance方法,实例对象下,调用speak方法,即可实现语音的播报

除了使用speak方法,我们还可以实例对象属性text,因此上面的代码也可以写成

let utterThis = new SpeechSynthesisUtterance();
utterThis.text = '书以启智,技于谋生,活出斜杠';
utterThis.lang = 'en-US';//汉语
utterThis.rate = 0.7;//语速
speechSynthesis.speak(utterThis);

具体实例代码

<template><div class="speech-wrap"><div><span class="demonstration">音量</span><el-slider @input="handleVoinceInput" v-model="voinceValue"  vertical height="200px"></el-slider></div><div><el-input class="inseret-input" clearable placeholder="请输入内容" v-model="input"></el-input><el-select @change="handleSelectChange" v-model="selectVal" slot="prepend" placeholder="请选择语言"><el-option label="zh-CN" value="zh-CN"></el-option><el-option label="en-US" value="en-US"></el-option></el-select><el-button slot="append" @click="handleTransYuYin">转语音</el-button><el-button  @click="handleStopYuYin">暂停</el-button><el-button  @click="handleHuiFuYuYin">恢复</el-button></div>  </div></template><script>export default {name: 'speechSynthesisUtterance',data() {return {input: '书以启智,技于谋生,活出斜杠',voinceValue: 30,selectVal: 'zh-CN',}},methods: {handleTransYuYin() {if(this.input) {let msg = new SpeechSynthesisUtterance(this.input);msg.volume = this.voinceValue;msg.rate = this.voinceValue;msg.pitch = this.voinceValue;this.throttle(window.speechSynthesis.speak(msg),2000);}else {this.$message.error('输入框内容不能为空');}},handleVoinceInput(val) {this.voinceValue = val;},handleSelectChange(val) {this.selectVal = val;},handleStopYuYin() {window.speechSynthesis.pause();},handleHuiFuYuYin() {window.speechSynthesis.resume();},throttle(fn,delay) {let last = 0return function() {const now = new Date()if(now - last > delay) {fn.apply(this,arguments)last = now}}}  }}</script><style scoped>.speech-wrap {display:flex;justify-content:start;align-items: center;}.speech-wrap .inseret-input {width: 400px;}</style>

window.speechSynthesis来创建语音,xxx.volume 获取并设置说话的音量,xxx.rate 获取并设置说话的速度(值越大语速越快,越小语速越慢),xxx.pitch 获取并设置话语的音调(值越大越尖锐,越低越低沉)

window.speechSynthesis.speak(msg) 播放语音,msg 是一个SpeechSynthesisUtterance对象,msg.text 设置要播放的话, msg.lang 设置语言,msg.volume 设置音量,msg.rate 设置语速,msg.pitch 设置音调

上面使用了throttle函数来限制播放的频率,防止播放过快,导致浏览器卡顿

如果不使用接口的方式,在项目中加入文本转语音,可以用这种方式实现,但是要注意兼容性问题,这个API是不兼容IE浏览器的

关于山东33岁小伙自绑双脚跳河自尽

2023-10-19

fa50f54314ea2450e0175c7f44076c5e.jpeg

聊一下湖北黄石当街锤人事件

2023-10-18

594f5dc5ad986470f83192361a816a64.jpeg

聊下读完《如何成为一名运营大牛》这本书后感

2023-10-12

315d0df234592d3224d355eda532f0c3.jpeg

聊一下读完“优势成长”这本书后感

2023-10-08

daae65a9d13e2e8752ab038738d70ca5.jpeg

函数的防抖与节流

2023-10-07

6bef494a2823be51eb1ca7e3a033247a.jpeg

vuejs中使用axios时如何实现滑动滚动条来动态加载列表数据

2023-10-06

1b113a71d9e18ca25d037def416b4089.jpeg

0164a5d81ca2217a1e034ee36434d828.png

(能绘画,能问答)

953c832fc4d896f51c9ce5487dad9712.png

这篇关于在Js中如何实现文本朗读即文字转语音功能实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249511

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)