Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Js中如何实现文本朗读即文字转语音功能实现

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

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

前言

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

在不使用第三方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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让你的浏览器开口说话
之前自己做的一个点名系统,可以支持语音播报,内部是调用了百度的在线体验语音接口API的,但是现在百度接口改了,没有免费体验,要使用就只能注册申请,嫌麻烦,刚好也知道H5有播放语音的API。所以干脆就拿过来研究一下。
万少
2025/02/10
960
让你的浏览器开口说话
js 语音播报
<el-button  @ click = " speak " > 播放 </el-button>
tianyawhl
2022/05/06
2.9K0
使用高德API和MapboxGL实现路径规划并语音播报
本文使用高德API实现位置查询和路径规划,使用MapboxGL完成地图交互与界面展示,并使用Web Speech API实现行驶中路线的实时语音播报。
牛老师讲GIS
2024/11/11
1630
使用高德API和MapboxGL实现路径规划并语音播报
Web Speech API 之 Speech Synthesis
Speech synthesis(语音合成,也被称作是文本转为语音,英语简写是 TTS)包括接收 app 中需要语音合成的文本,再在设备扬声器或音频输出连接中播放出来这两个过程。
AlphaHinex
2024/07/04
4200
Web Speech API 之 Speech Synthesis
B4A TTS使用小米"小爱同学语音引擎"进行文字转语音
TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。
办公魔盒
2021/06/25
12.9K0
B4A TTS使用小米"小爱同学语音引擎"进行文字转语音
文字转语音——这招你学到了吗
我喜欢上了看小说,不知道为什么,这是一个谜,(因为我是谜一样的男人,哈哈),看着看着感觉眼皮在打架,突然我想,要是有一个人可以阅读就好了(这里我们明显感觉小编与世界脱轨),那不如写一个自动阅读的软件好了,然后就有了语音阅读神器。
大家一起学编程
2021/03/29
2.6K0
C# Web应用调用EXE文件的一些实践
最近同事使用Python开发了一款智能文字转语音的程序,经讨论部署在WINDOWS环境服务器下,因此需要生成目标为可执行程序文件,即EXE文件。需要在WEB应用程序里进行调用,并传递相关参数。
初九之潜龙勿用
2024/06/20
1520
C# Web应用调用EXE文件的一些实践
Android开发笔记(一百零八)智能语音
如今越来越多的app用到了语音播报功能,例如地图导航、天气预报、文字阅读、口语训练等等。语音技术主要分两块,一块是语音转文字,即语音识别;另一块是文字转语音,即语音合成。 对中文来说,和语音播报相关的一个技术是汉字转拼音,想想看,拼音本身就是音节拼读的标记,每个音节对应一段音频,那么一句的拼音便能用一连串的音频流合成而来。汉字转拼音的说明参见《Android开发笔记(八十三)多语言支持》。 语音合成通常也简称为TTS,即TextToSpeech(从文本到语言)。语音合成技术把文字智能地转化为自然语音流,当然为了避免机械合成的呆板和停顿感,语音引擎还得对语音流进行平滑处理,确保输出的语音音律流畅、感觉自然。
aqi00
2019/01/18
5.7K1
百度AI接口开发文字转语音功能
今天做了一个功能,开始一个文字转语音的功能,主要应用于网站文章阅读。使用了百度AI的语音合成接口。下面详细的来说一下;
申霖
2020/04/01
1.3K0
百度AI接口开发文字转语音功能
打造个人听书神器:使用pyttsx3实现文字转语音
在这个信息爆炸的时代,我们每天都在处理海量的文字信息。然而,当眼睛疲惫时,我们是否能够通过其他方式来享受阅读的乐趣呢?答案是肯定的。今天,我将带大家了解如何使用Python中的pyttsx3库,将文字转化为语音,打造一个属于自己的听书神器。随着智能语音助手的普及,文字转语音技术已经成为提升阅读体验的重要工具之一。
LucianaiB
2025/01/12
1650
打造个人听书神器:使用pyttsx3实现文字转语音
H5 语音合成播报功能
采用的 SpeechSynthesisUtterance实现语音播报功能,参考资料: ONE、TWO
White feathe
2021/12/08
1.9K0
H5 语音合成播报功能
AVFoundation 文本转语音和音频录制 播放
现在你应该对AVFoundation有了比较深入的了解,并且对数字媒体的细节也有了一定认识,下面介绍一下 AVFoundation的文本转语音功能
iOSSir
2019/06/14
2.4K0
基于 ChatGPT API 的划词翻译浏览器脚本实现
最近 GitHub 上有个基于 ChatGPT API 的浏览器脚本,openai-translator, 短时间内 star 冲到了 9.7k, 功能上除了支持翻译外,还支持润色和总结功能,除了浏览器插件外,还使用了 tauri 打包了一个桌面客户端,那抛开 tauri 是使用 rust 部分,那浏览器部分实现还是比较简单的,今天我们就来手动实现一下。
狂奔滴小马
2023/04/07
1.7K0
基于 ChatGPT API 的划词翻译浏览器脚本实现
Java 语言 jacob 实现文本转语音
https://sourceforge.net/projects/jacob-project/
默存
2023/09/13
8360
Java 语言 jacob 实现文本转语音
使用 Web Speech API 和 ChatGPT API 开发一个智能语音机器人
随着 AI 的不断发展,我们前端工程师也可以开发出一个智能语音机器人,下面是我开发的一个简单示例,大家可以访问这个视频地址查看效果。
狂奔滴小马
2023/04/27
1.7K0
使用 Web Speech API 和 ChatGPT API 开发一个智能语音机器人
我开发了一个【免费】使用微软的文字转语音服务的js库
尝试过各种TTS的方案,一番体验下来,发现微软才是这个领域的王者,其Azure文本转语音服务的转换出的语音效果最为自然,但Azure是付费服务,注册操作付费都太麻烦了。但在其官网上竟然提供了一个完全体的演示功能,能够完完整整的体验所有角色语音,说话风格...
大帅老猿
2022/06/06
2.5K0
我开发了一个【免费】使用微软的文字转语音服务的js库
教你让b站视频的弹幕发出语音!
侦查弹幕非常简单,我常介绍的:用元素选择器,选中窗口,一看这个类名,然后看这里面这一个个标签,就知道和弹幕有关。
coder_koala
2020/12/07
1.5K0
教你让b站视频的弹幕发出语音!
C# 使用 SpeechSynthesizer 类将文本转换为语音
SpeechSynthesizer​ 是 .NET Framework 和 .NET Core/5+ 中用于文本到语音(Text-to-Speech, TTS)转换的类。它属于 System.Speech.Synthesis​ 命名空间,主要用于将文本转换为语音并播放或保存为音频文件。
Power
2025/04/01
1590
HTML人工合成声音
问答系统中可以使用的人工合成声音。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div class="voiceinator"> <select name="voice" id="voices"> <option value="">Select A Voice</option> </select> <lab
luxuantao
2021/02/24
8110
学习|Android使用TTS语音合成
所谓活到老,学到老,本篇开始我写的Android代码尽量都转为Android指定的官方语言Kotlin,一是技多不压身,二是Kotlin的语法与我接触的第一门开发语言Delphi有点像,学起来也不太难,所以直接在代码中开始使用才能掌握的更快。
Vaccae
2019/12/11
4.3K0
相关推荐
让你的浏览器开口说话
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验