当前位置: 首页 > news >正文

前端开发中基于Web Speech API(speechSynthesis接口)实现文字转语音功能

文章目录

      • 一、Web Speech 的概念及用法
      • 二、Web Speech 的 API 接口
        • 1、SpeechSynthesis
          • 属性
          • 方法
        • 2、SpeechSynthesisUtterance
          • 属性
          • 方法
      • 三、Web Speech 的 用法
        • 用法演示一
        • 用法演示二
          • html
          • js
      • 四、扩展

一、Web Speech 的概念及用法

在开发业务系统时,有时候可能需要使用语音播报一段文字。

目前文字转语音即语音合成技术现在已经很成熟了,像百度、讯飞等都提供了相关的服务,支持将文字转换成各种形式的语音,通常这些服务都需要付费使用,如果对语音要求不高,并且又想节约成本,那么可以直接使用浏览器的语音合成功能。

Web Speech API 使你能够将语音数据合并到 Web 应用程序中。Web Speech API 有两个部分:SpeechSynthesis 语音合成(文本到语音 TTS)和 SpeechRecognition 语音识别(异步语音识别)。

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

Web Speech API 使 Web 应用能够处理语音数据,该项 API 包含以下两个部分:

  • 语音识别通过 SpeechRecognition (en-US) 接口进行访问,它提供了识别从音频输入(通常是设备默认的语音识别服务)中识别语音情景的能力。一般来说,你将使用该接口的构造函数来构造一个新的 SpeechRecognition (en-US) 对象,该对象包含了一系列有效的对象处理函数来检测识别设备麦克风中的语音输入。SpeechGrammar 接口则表示了你应用中想要识别的特定文法。文法则通过 JSpeech Grammar Format (JSGF.) 来定义。

  • 语音合成通过 SpeechSynthesis 接口进行访问,它提供了文字到语音(TTS)的能力,这使得程序能够读出它们的文字内容(通常使用设备默认的语音合成器)。不同的声音类类型通过 SpeechSynthesisVoice (en-US) 对象进行表示,不同部分的文字则由 SpeechSynthesisUtterance (en-US) 对象来表示。你可以将它们传递给 SpeechSynthesis.speak() (en-US) 方法来产生语音。

二、Web Speech 的 API 接口

1、SpeechSynthesis

SpeechSynthesis是语音服务的控制接口;它可以用于获取设备上关于可用的合成声音的信息,开始、暂停语音,或除此之外的其他命令。

属性

SpeechSynthesis.paused 只读
当SpeechSynthesis 处于暂停状态时, Boolean 值返回 true 。

SpeechSynthesis.pending 只读
当语音播放队列到目前为止保持没有说完的语音时, Boolean 值返回 true 。

SpeechSynthesis.speaking 只读
当语音谈话正在进行的时候,即使SpeechSynthesis处于暂停状态, Boolean 返回 true 。

方法

SpeechSynthesis.cancel()
取消语音播放。

SpeechSynthesis.getVoices()
返回当前设备所有可用声音的 SpeechSynthesisVoice列表。

SpeechSynthesis.pause()
把 SpeechSynthesis 暂停语音播放。

SpeechSynthesis.resume()
把 SpeechSynthesis 对象置为一个非暂停状态:如果已经暂停了则继续。

SpeechSynthesis.speak()
添加语音到播放列队,将会在其他语音播放完后自动播放。

2、SpeechSynthesisUtterance

SpeechSynthesisUtterance 表示一次发音请求,其中包含了将由语音服务朗读的内容,以及如何朗读它(例如:语种、音高、音量)。

属性

lang:获取并设置话语的语言
pitch:获取并设置话语的音调(0-2,值越大越尖锐,越低越低沉)
rate:获取并设置说话的速度(0.1-10,值越大语速越快,越小语速越慢)
text:获取并设置说话时的文本
voice:获取并设置说话的声音(0-1)
volume:获取并设置说话的音量

方法

onboundary:当播放至一个词或句子结尾时触发
onend:语音播放结束时触发
onerror:语音播放错误时触发
onmark:当语音播放至 mark 标记时触发
onpause:暂停语音播放时触发
onresume:恢复语音播放时触发
onstart:开始语音播放时触发

三、Web Speech 的 用法

用法演示一
let synth = window.speechSynthesis;
let utterThis = new SpeechSynthesisUtterance('支付宝到账5元');
synth.speak(utterThis);
用法演示二
html
<input type="text" name="text" id="text">
<button onclick="startAudio()">播放语音</button>
js
function startAudio() {// 检查浏览器是否支持Web Speech API  if ('speechSynthesis' in window) {  let input = document.getElementById('text')// 创建一个新的SpeechSynthesisUtterance对象 let msg = new SpeechSynthesisUtterance(input.value)msg.volume = 5 //音量msg.rate = 1 //语速msg.text = input.value //文字speechSynthesis.speak(msg) //播放语音} else {  console.error('浏览器不支持Web Speech API');  }
}

这个示例会使用默认的语音合成引擎(如果有的话)将"输入框的内容"转换为语音。如果浏览器支持Web Speech API,你应该能够听到这句话被读出来。如果浏览器不支持Web Speech API,这个示例会在控制台输出一条错误消息。

四、扩展

除了使用Web Speech API之外,还有使用第三方文字转语音(TTS)库的方法,例如使用百度文字转语音开放API或iSpeech TTS引擎。

使用百度文字转语音开放API的方法需要调用其提供的接口,传入要转换的文字,并设置语言、语速等参数。使用iSpeech TTS引擎则需要引入相应的JavaScript库,并使用其提供的API将文字转换为语音。

此外,还可以使用浏览器自带的语音助手或插件来实现文字转语音的功能,例如Siri、Alexa等。这些工具通常需要用户进行一些设置和配置,以便能够正确地将文字转换为语音。

百度文字转语音开放API的调用示例代码如下:

var text = '你好,世界!'; // 要转换为语音的文本  
var apikey = '你的API密钥'; // 百度提供的API密钥  var params = {  text: text,  apikey: apikey,  engine: 'paddle', // 选择语音合成引擎,支持'paddle'和'deepizone'两种引擎  voice: 'zh_cn', // 选择语音类型,支持'zh_cn'和'en'两种类型  speed: 5, // 语速,取值范围为0-10,数字越大语速越快  vol: 5, // 音量,取值范围为0-10,数字越大音量越大  per: 0 // 音色,取值范围为0-19,不同数字代表不同音色  
};  var url = 'http://tts.baidu.com/text2audio?' + $.param(params); // 将参数拼接成URL  
$.get(url, function(response) { // 发送GET请求获取语音数据  var audio = new Audio(response); // 创建Audio对象并播放语音  audio.play();  
});

相关文章:

前端开发中基于Web Speech API(speechSynthesis接口)实现文字转语音功能

文章目录 一、Web Speech 的概念及用法二、Web Speech 的 API 接口1、SpeechSynthesis属性方法 2、SpeechSynthesisUtterance属性方法 三、Web Speech 的 用法用法演示一用法演示二htmljs 四、扩展 一、Web Speech 的概念及用法 在开发业务系统时&#xff0c;有时候可能需要使…...

C++核心编程之通过类和对象的思想对文件进行操作

目录 ​​​​​​​一、文件操作 1. 文件类型分类&#xff1a; 2. 操作文件的三大类 二、文本文件 1.写文件 2.读文件 三、二进制文件 1.写二进制文件 2.读二进制文件 一、文件操作 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 通过文件可以将…...

Verilog语法——4.Verilog工程模板、相应规范再强调

参考资料 【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】 4. Verilog工程模板、相应规范 4.1 Verilog工程模板 4.1.1 设计模块模板 module module_name(clk,rst_n,//其他信号&#xff0c;举例doutdout };//参数定义parameter …...

CNN:Convolutional Neural Network(下)

目录 1 CNN 学到的是什么 1.1 Convolution 中的参数 1.2 FFN 中的参数 1.3 Output 2 Deep Dream 3 Deep Style 4 More Application 4.1 AlphaGo 4.2 Speech 4.3 Text 原视频&#xff1a;李宏毅 2020&#xff1a;Convolutional Neural Network 本博客属于学…...

FPGA时序分析与时序约束(四)——时序例外约束

目录 一、时序例外约束 1.1 为什么需要时序例外约束 1.2 时序例外约束分类 二、多周期约束 2.1 多周期约束语法 2.2 同频同相时钟的多周期约束 2.3 同频异相时钟的多周期约束 2.4 慢时钟域到快时钟域的多周期约束 2.5 快时钟域到慢时钟域的多周期约束 三、虚假路径约…...

无需任何三方库,在 Next.js 项目在线预览 PDF 文件

前言&#xff1a; 之前在使用Vue和其它框架的时候&#xff0c;预览 PDF 都是使用的 PDFObject 这个库&#xff0c;步骤是&#xff1a;下载依赖&#xff0c;然后手动封装一个 PDF 预览组件&#xff0c;这个组件接收本地或在线的pdf地址&#xff0c;然后在页面中使用组件的车时候…...

排序问题——晴问题库

排序问题——晴问题库 排序问题是线性数据的常考问题&#xff0c;在解晴问题库时总结归纳以下关于排序的解题方法和思路。 感谢晴神 排序问题是数据结构中十分重点的一部分。 可以分为五个大部分&#xff1a; 插入排序选择排序交换排序基数归并 再具体往下分&#xff1a; 插…...

【LabVIEW FPGA入门】FPGA中的数学运算

数值控件选板上的大部分数学函数都支持整数或定点数据类型&#xff0c;但是需要请注意&#xff0c;避免使用乘法、除法、倒数、平方根等函数&#xff0c;此类函数比较占用FPGA资源&#xff0c;且如果使用的是定点数据或单精度浮点数据仅适用于FPGA终端。 1.整数运算 支持的数…...

华为设备VRRP配置

核心代码&#xff1a; 需要对所有虚拟路由器设置&#xff08;要进入到对应的端口&#xff09; vrrp vrid 38 virtual-ip 192.168.10.254 vrrp vrid 38 priority 120 vrrp vrid 38 track int g0/0/1 reduced 30①mac由vrid生成 ②指定虚拟ip ③虚拟ip作为内部主机的网关&#x…...

2024年艺术发展与文化产业国际会议(ICADCI 2024)

2024年艺术发展与文化产业国际会议(ICADCI 2024) 2024 International Conference on Art Development and Cultural Industry(ICADCI 2024) 数据库&#xff1a;EI,CPCI,CNKI,Google Scholar等 一、【会议简介】 2024年艺术发展与文化产业国际会议(ICADCI 2024)将于丽江这座美丽…...

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳 Excerpt 文章浏览阅读1.2k次。鸿蒙开发,获取手表心跳,按钮点击后触发的方法,我们将跳转页面的代码写在这个位置就可以实现点击按钮进行跳转页面的动作。在HTML文件“index.hml”,添加按钮,这里按钮用到是标…...

使用企业订货软件的担忧与考虑|网上APP订货系统

使用企业订货软件的担忧与考虑|网上APP订货系统 网上订货系统担心出现的问题 1&#xff0c;如果在订货系统中定错(多)货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误&#xff0c;但是网上订货平台为大家提供了很多的解决方案&#xff0c;其中对于订单的…...

Java-集合-Collection类

1 需求 2 接口 Interface Collection<E> public interface Collection<E> extends Iterable<E> 2.3 Method Detail int size()boolean isEmpty()boolean contains(Object o)Iterator<E> iterator()Object[] toArray()<T> T[] toArray(T[] a)…...

Linux:/proc/kmsg 与 /proc/sys/kernel/printk_xxx

目录 前言一、/proc/kmsg1、简介2、如何修改内核日志缓冲区3、dmesgklogctl 函数&#xff08;来源于 man 手册&#xff09; 4、扩展阅读 二、 /proc/sys/kernel/printk_xxx三、/dev/kmsg 前言 本篇文章将为大家介绍与 Linux 内核日志相关的一些控制文件&#xff0c;共同学习&am…...

使用 Postman 发送 get 请求的简易教程

在API开发与测试的场景中&#xff0c;Postman 是一种普遍应用的工具&#xff0c;它极大地简化了发送和接收HTTP请求的流程。要发出GET请求&#xff0c;用户只需设定正确的参数并点击发送即可。 如何使用 Postman 发送一个GET请求 创建一个新请求并将类型设为 GET 首先&#…...

【网站项目】基于jsp的拍卖网站设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

为什么洗衣机会每天自动上传3.6GB数据?

“为什么我家的LG洗衣机每天都会上传3.6GB的数据&#xff1f;” 一位名为Johnie用户发现他家电设备的异常行为后表示很不理解&#xff0c;随后他把相关信息发布在X平台&#xff0c;很快这篇帖子就收获了超过1700万次的浏览量&#xff0c;并迅速变成一场争议和网络安全battle。…...

word写标书的疑难杂症总结

最近在解决方案工作&#xff0c;与office工具经常打交道&#xff0c;各种问题&#xff0c;在此最下记录&#xff1a; 1.word中文档距离文档顶端有距离调整不了 1.疑难杂症问题1&#xff0c;多个空格都是不能解决 #解决办法&#xff1a;word中--布局-下拉框---“版式”--“垂直…...

2024,会更好嘛?

2023转眼过去&#xff0c;从1月的前端&#xff0c;2月的java&#xff0c;3月的数据库&#xff0c;4月的运维&#xff0c;我尝试了许多技术方向&#xff0c;终究在2023年5月&#xff0c;凭着背的Java面试题&#xff0c;拿到了三四个offer。2023年6月&#xff0c;边玩边整自己的毕…...

Nsis打包Unity Exe文件(通用)

Nsi 脚本 !include "MUI2.nsh"#使用现代UI Unicode true #使用Unicode !define EXENAME "exeName" #定义常量 exe名称 !define SHORTCUT "快捷方式名称" #定义桌面快捷方式的中文名称Name ${EXENAME} #安装程序的title OutFile "${EXENAME…...

文档分析准确率从61%跃升至98.7%的关键转折点(附2024Q2最新Claude-3.5 Sonnet文档理解基准测试对比表)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;文档分析准确率跃升至98.7%的里程碑意义 当文档智能系统在真实业务场景中将结构化识别准确率稳定提升至98.7%&#xff0c;这不仅是一个数字的突破&#xff0c;更是文档理解能力从“可用”迈向“可信”的关键分…...

26-cv-3948 NASCAR 纳斯卡赛车北美赛车巨头NASCAR商标维权!年认证超1500场赛事,全球布局品牌产品与授权营销。

案号&#xff1a;26-cv-3948原告品牌&#xff1a;NASCAR 纳斯卡赛车品牌方&#xff1a;National Association for Stock Car Auto Racing, LLC起诉地&#xff1a;美国纽约州南区代理律所&#xff1a;Whitewood Law PLLC起诉时间&#xff1a;2026年05月12日起诉类型&#xff1a;…...

AI编程工具 Codex 入门教程,带你7分钟上手 Codex !

大家好&#xff0c;我是程序员小灰。前一段时间&#xff0c;Anthropic旗下的AI编程工具 Claude Code 火了&#xff0c;小灰也为大家制作了Claude Code 相关的视频教程&#xff0c;得到了很多读者的肯定。尽管Claude Code很强大&#xff0c;但存在一个致命的问题&#xff0c;就是…...

别再只用软件rand()了!手把手教你启用STM32F4的硬件随机数发生器(RNG)

解锁STM32F4硬件随机数发生器&#xff1a;从理论到实战的嵌入式安全升级指南 在嵌入式开发领域&#xff0c;随机数生成常被视为基础功能而草率对待——直到某次安全审计暴露了系统漏洞&#xff0c;或是高并发场景下性能瓶颈显现。许多开发者习惯性地调用标准库中的rand()函数&a…...

别再为多设备同步发愁了!手把手教你用NI-DAQmx的‘通道扩展’功能搞定多机箱数据采集

多设备数据采集同步实战&#xff1a;NI-DAQmx通道扩展功能深度解析 在工业测试与科研数据采集领域&#xff0c;工程师们经常面临一个棘手问题&#xff1a;当单个数据采集设备的通道数无法满足需求时&#xff0c;如何实现多个设备的无缝协同工作&#xff1f;想象一下汽车ECU测试…...

【MATLAB】人脸表情识别与情感分析程序(工程实操版)

【MATLAB】人脸表情识别与情感分析程序(工程实操版) 摘要:人脸表情是人类情感表达的核心载体,人脸表情识别与情感分析技术融合了计算机视觉、图像处理、模式识别等多领域知识,广泛应用于人机交互、心理评估、智能安防、教育教学等场景。传统表情识别依赖人工判断,存在主…...

淘宝淘金币自动化脚本终极指南:每天节省25分钟的高效神器

淘宝淘金币自动化脚本终极指南&#xff1a;每天节省25分钟的高效神器 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 在…...

chatgpt-mirai-qq-bot输入输出参数:类型验证和默认值处理

chatgpt-mirai-qq-bot输入输出参数&#xff1a;类型验证和默认值处理 在构建复杂的聊天机器人系统时&#xff0c;输入输出参数的类型验证和默认值处理是确保系统稳定性和可靠性的关键。chatgpt-mirai-qq-bot项目通过精心设计的参数处理机制&#xff0c;为开发者提供了强大的类型…...

如何让老旧Windows系统重新获得安全更新:Legacy Update完整解决方案

如何让老旧Windows系统重新获得安全更新&#xff1a;Legacy Update完整解决方案 【免费下载链接】LegacyUpdate Get back online, activate, and install updates on your legacy Windows PC 项目地址: https://gitcode.com/gh_mirrors/le/LegacyUpdate 还在为Windows X…...

联想笔记本BIOS解锁神器:3分钟开启隐藏硬件性能

联想笔记本BIOS解锁神器&#xff1a;3分钟开启隐藏硬件性能 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具&#xff0c;例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirrors/le/LEGI…...