前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在Js中如何实现文本朗读即文字转语音功能实现

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

作者头像
itclanCoder
发布于 2023-11-08 09:07:18
发布于 2023-11-08 09:07:18
1.6K09
代码可运行
举报
文章被收录于专栏:itclanCoderitclanCoder
运行总次数:9
代码可运行

前言

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

在不使用第三方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代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let utterThis = new SpeechSynthesisUtterance('书以启智,技于谋生,活出斜杠');
speechSynthesis.speak(utterThis);

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let utterThis = new SpeechSynthesisUtterance();
utterThis.text = '书以启智,技于谋生,活出斜杠';
utterThis.lang = 'en-US';//汉语
utterThis.rate = 0.7;//语速
speechSynthesis.speak(utterThis);

具体实例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 = 0
             return 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浏览器的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 itclanCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C# 使用 SpeechSynthesizer 类将文本转换为语音
SpeechSynthesizer​ 是 .NET Framework 和 .NET Core/5+ 中用于文本到语音(Text-to-Speech, TTS)转换的类。它属于 System.Speech.Synthesis​ 命名空间,主要用于将文本转换为语音并播放或保存为音频文件。
Power
2025/04/01
980
你可能会用到的JS工具函数(第二期)
Vue3在script标签中引入 const oDiv = document.createElement('div'); const oScript = document.createElement('script'); oDiv.setAttribute('id', 'app'); oScript.type = 'text/javascript'; oScript.src = "https://unpkg.com/vue@next"; document.bo
Vam的金豆之路
2021/12/01
2580
三文带你轻松上手鸿蒙的AI语音03-文本合成声音
HarmonyOS NEXT 提供的AI 文本合并语音功能,可以将一段不超过10000字符的文本合成为语音并进行播报。
万少
2025/02/09
940
三文带你轻松上手鸿蒙的AI语音03-文本合成声音
让你的浏览器开口说话
之前自己做的一个点名系统,可以支持语音播报,内部是调用了百度的在线体验语音接口API的,但是现在百度接口改了,没有免费体验,要使用就只能注册申请,嫌麻烦,刚好也知道H5有播放语音的API。所以干脆就拿过来研究一下。
万少
2025/02/10
870
让你的浏览器开口说话
js 语音播报
<el-button  @ click = " speak " > 播放 </el-button>
tianyawhl
2022/05/06
2.8K0
使用高德API和MapboxGL实现路径规划并语音播报
本文使用高德API实现位置查询和路径规划,使用MapboxGL完成地图交互与界面展示,并使用Web Speech API实现行驶中路线的实时语音播报。
牛老师讲GIS
2024/11/11
1430
使用高德API和MapboxGL实现路径规划并语音播报
Web Speech API 之 Speech Synthesis
Speech synthesis(语音合成,也被称作是文本转为语音,英语简写是 TTS)包括接收 app 中需要语音合成的文本,再在设备扬声器或音频输出连接中播放出来这两个过程。
AlphaHinex
2024/07/04
3540
Web Speech API 之 Speech Synthesis
H5 语音合成播报功能
采用的 SpeechSynthesisUtterance实现语音播报功能,参考资料: ONE、TWO
White feathe
2021/12/08
1.9K0
H5 语音合成播报功能
鸿蒙开发:文本合成语音
Android开发的同学都知道,在Android当中,实现一段文字合成语音播放,可以使用系统提供的对象TextToSpeech来很快的实现,如果不用系统自带的,也可以使用三方提供的,比如讯飞的语音合成等等,总之,实现起来多种多样,那么,在鸿蒙当中,如何实现根据指定的文本进行合成语音合成播放呢,其实也是非常的简单,因为鸿蒙当中也有textToSpeech。
程序员一鸣
2024/12/31
1740
鸿蒙开发:文本合成语音
浏览器自带api语音播报speechSynthesis.speak()无法自动播报问题分析及非完美解决方案
最近遇到一个需求,就是前端页面要实时监听后端传过来的数据,同时当后端传过来这条数据时前端界面要语音播报这条数据。
潜心专研的小张同学
2023/08/24
1.6K0
B4A TTS使用小米"小爱同学语音引擎"进行文字转语音
TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。
办公魔盒
2021/06/25
12.8K0
B4A TTS使用小米"小爱同学语音引擎"进行文字转语音
Java 语言 jacob 实现文本转语音
https://sourceforge.net/projects/jacob-project/
默存
2023/09/13
7890
Java 语言 jacob 实现文本转语音
文字转语音——这招你学到了吗
我喜欢上了看小说,不知道为什么,这是一个谜,(因为我是谜一样的男人,哈哈),看着看着感觉眼皮在打架,突然我想,要是有一个人可以阅读就好了(这里我们明显感觉小编与世界脱轨),那不如写一个自动阅读的软件好了,然后就有了语音阅读神器。
大家一起学编程
2021/03/29
2.6K0
HarmonyOS学习路之开发篇—AI功能开发(语音播报)
语音播报(Text to Speech,下文简称TTS),基于华为智慧引擎(HUAWEI HiAI Engine)中的语音播报引擎,向开发者提供人工智能应用层API。该技术提供将文本转换为语音并进行播报的能力。
爱吃土豆丝的打工人
2023/10/15
6600
百度AI接口开发文字转语音功能
今天做了一个功能,开始一个文字转语音的功能,主要应用于网站文章阅读。使用了百度AI的语音合成接口。下面详细的来说一下;
申霖
2020/04/01
1.3K0
百度AI接口开发文字转语音功能
C# Web应用调用EXE文件的一些实践
最近同事使用Python开发了一款智能文字转语音的程序,经讨论部署在WINDOWS环境服务器下,因此需要生成目标为可执行程序文件,即EXE文件。需要在WEB应用程序里进行调用,并传递相关参数。
初九之潜龙勿用
2024/06/20
1380
C# Web应用调用EXE文件的一些实践
使用 Web Speech API 和 ChatGPT API 开发一个智能语音机器人
随着 AI 的不断发展,我们前端工程师也可以开发出一个智能语音机器人,下面是我开发的一个简单示例,大家可以访问这个视频地址查看效果。
狂奔滴小马
2023/04/27
1.7K0
使用 Web Speech API 和 ChatGPT API 开发一个智能语音机器人
我开发了一个【免费】使用微软的文字转语音服务的js库
尝试过各种TTS的方案,一番体验下来,发现微软才是这个领域的王者,其Azure文本转语音服务的转换出的语音效果最为自然,但Azure是付费服务,注册操作付费都太麻烦了。但在其官网上竟然提供了一个完全体的演示功能,能够完完整整的体验所有角色语音,说话风格...
大帅老猿
2022/06/06
2.4K0
我开发了一个【免费】使用微软的文字转语音服务的js库
打造个人听书神器:使用pyttsx3实现文字转语音
在这个信息爆炸的时代,我们每天都在处理海量的文字信息。然而,当眼睛疲惫时,我们是否能够通过其他方式来享受阅读的乐趣呢?答案是肯定的。今天,我将带大家了解如何使用Python中的pyttsx3库,将文字转化为语音,打造一个属于自己的听书神器。随着智能语音助手的普及,文字转语音技术已经成为提升阅读体验的重要工具之一。
LucianaiB
2025/01/12
1160
打造个人听书神器:使用pyttsx3实现文字转语音
教你让b站视频的弹幕发出语音!
侦查弹幕非常简单,我常介绍的:用元素选择器,选中窗口,一看这个类名,然后看这里面这一个个标签,就知道和弹幕有关。
coder_koala
2020/12/07
1.5K0
教你让b站视频的弹幕发出语音!
推荐阅读
相关推荐
C# 使用 SpeechSynthesizer 类将文本转换为语音
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文