浏览器语音合成对象speechSynthesis和SpeechSynthesisUtterance实现语音播放

这篇具有很好参考价值的文章主要介绍了浏览器语音合成对象speechSynthesis和SpeechSynthesisUtterance实现语音播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天分享的是浏览器的语音合成功能,浏览器的语音播放并不复杂,主要对象有两个,一个是 speechSynthesis,一个是 SpeechSynthesisUtterancespeechSynthesis 是一个全局唯一的对象,它无法通过构造函数来生成,用来表示语音播放的状态,例如语音播放、语音暂停等,而SpeechSynthesisUtterance 是用来表示语音播放的属性,包括语音内容、语音音调、语音音量等,可以通过 new 来生成;在介绍两个对象的属性和用法之前,可以先看一下它们的兼容性如何;
speechsynthesisutterance 封装,javascript,前端

1、speechSynthesis
  • 属性
    • pending:表示当前播放列表是否有未播完的语音,即播放列表长度是否大于 2;
    • speaking:表示当前是否有语音正在进行播放,无论是播放还是暂停的状态, 也就是播放列表是否为空;
    • paused: 表示当前是否是暂停状态;
  • 事件
    • onvoiceschanged:监听事件,当 SpeechSynthesisVoice 列表发生改变的时候触发,通常也是在这个事件中通过 SpeechSynthesis.getVoices 来获取到浏览器支持的语音配置对象;
  • 方法
    • cancel:移除所有语音队列中的语音,相当于清空的功能;
    • pause:将当前语音对象置为暂停状态,这里需要注意一下,当调用这个方法时,整个浏览器的语音播放会处于一个暂停状态,如果没有调用 cancel 或 resume 方法,则不会继续播放,包括其他标签页添加进语音播放列表的语音合成对象
    • resume:将当前语音对象置为非暂停状态,如果是暂停状态,则继续播放剩下的语音;
    • speak:添加一个语音对象到语音播放列表,当前列表为空时,则会马上播放,如果当前播放列表存在其他语音对象,则会等到其他语音对象播放完毕之后播放;
    • getVoices: 返回当前设备所有可用声音的列表;
      speechsynthesisutterance 封装,javascript,前端
2、 SpeechSynthesisUtterance
  • 属性

    • lang:语音播放的语言;
    • pitch:语音播放的音调,最大值为 2;
    • rate:语音播放的速率;
    • text:语音播放的文字内容;
    • voice:语音播放的声音,通过 SpeechSynthesis.getVoices 获取的列表项来设置,需要注意一个点,getVoices 返回所有可用的列表,但是也有一个限制,那就是当前设备是否支持设置的声音,也就是图中的 localService 字段值,如果不支持,设置之后播放是没有声音的
      speechsynthesisutterance 封装,javascript,前端
    • volume:语音播放的音量,最大值为 1;
  • 事件文章来源地址https://www.toymoban.com/news/detail-756669.html

    • boundary: 在播放语音时遇到一个单词或句子的结束,这个事件就会被触发;
    • start:当浏览器开始播放合成语音时触发;
    • end:当浏览器播放合成语音结束时触发;
    • error:当语音播放发生中断,无法成功播放时触发,SpeechSynthesis.cancel 会触发;
    • pause:当暂停播放语音时触发;
    • resume:当暂停语音之后选择继续播放时触发;
      speechsynthesisutterance 封装,javascript,前端
3、实战案例
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>SpeechSynthesisUtterance</title>
	</head>
	<body>
		<p id="text">这段文字将通过浏览器的语音合成API来播放</p>
		<button id="playBtn">播放</button>
		<button id="pauseBtn">暂停</button>
		<button id="resumeBtn">继续</button>
		<button id="cancelBtn">取消</button>
		<button id="statusBtn">获取状态</button>
		<script>
			const text = document.getElementById("text");
			const playBtn = document.getElementById("playBtn");
			const pauseBtn = document.getElementById("pauseBtn");
			const resumeBtn = document.getElementById("resumeBtn");
			const cancelBtn = document.getElementById("cancelBtn");
			const statusBtn = document.getElementById("statusBtn");
			let ssu = null;
			playBtn.addEventListener("click", () => {
				// 创建语音
				if (!ssu) {
					ssu = new SpeechSynthesisUtterance(text.innerText);
					ssu.addEventListener("start", () => {
						console.log("开始播放语音");
					});
					ssu.addEventListener("end", () => {
						console.log("播放语音结束");
					});
					ssu.addEventListener("boundary", (e) => {
						console.log("当前遇到单词或句子", e.name);
					});
					ssu.addEventListener("pause", () => {
						console.log("暂停播放语音");
					});
					ssu.addEventListener("resume", () => {
						console.log("继续播放语音");
					});
					ssu.addEventListener("error", (e) => {
						console.log("发生错误", e.error);
					});
				}
				console.log(ssu);
				// 播放语音
				window.speechSynthesis.speak(ssu);
			});
			pauseBtn.addEventListener("click", () => {
				window.speechSynthesis.pause();
			});
			resumeBtn.addEventListener("click", () => {
				window.speechSynthesis.resume();
			});
			cancelBtn.addEventListener("click", () => {
				window.speechSynthesis.cancel();
			});
			statusBtn.addEventListener("click", () => {
				const { pending, speaking, paused } = window.speechSynthesis;
				console.log(`当前播放列表${pending ? "有" : "没有"}未播完的语音`);
				console.log(`当前播放列表${speaking ? "存在" : "不存在"}语音`);
				console.log(`当前${paused ? "是" : "不是"}暂停播放状态`);
			});
		</script>
	</body>
</html>

到了这里,关于浏览器语音合成对象speechSynthesis和SpeechSynthesisUtterance实现语音播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决苹果Safari 浏览器下html不能自动播放声音和视频的问题-实时语音通话功能【唯一客服】...

    在实现我的客服系统中,实时语音通话功能的时候,如果想自动播放音视频流,在苹果设备上遇到了问题。 苹果浏览器(Safari)在默认情况下不允许声音在背景里自动播放。这是出于用户体验和隐私方面的考虑,避免在用户没有意识到的情况下自动播放声音。 解决办法是 iOS

    2024年02月12日
    浏览(89)
  • 使用Python+selenium实例化Microsoft Edge或Chrome浏览器对象和常见的报错

    实例化谷歌浏览器对象: 实例化Microsoft Edge对象: 1.浏览器窗口闪退: 用import time    time.sleep(5),让浏览器多待上一会就好了 2.报错\\\"DeprecationWarning: executable_path has been deprecated\\\":  此错误不耽误程序运行,如果程序因为此错误不能运行,修改代码为: 3.报错\\\"TypeError: \\\'module\\\'

    2024年02月12日
    浏览(34)
  • Java 中,使用 HttpServletResponse 对象将服务器上的文件响应到客户端浏览器进行下载

    在服务器端,使用 FileInputStream 打开要下载的文件,并将其读取到字节数组中。 2.设置 HttpServletResponse 的响应头信息,告诉浏览器需要下载文件,并指定文件名和文件类型 其中,Content-Type 表示响应内容的类型,这里设置为 application/octet-stream,表示二进制流。Content-Length 表示

    2024年02月13日
    浏览(57)
  • Selenium调用使用360浏览器,QQ浏览器,遨游浏览器,猎豹浏览器,Chromium

    国产的360安全浏览器,360急速浏览器,QQ浏览器,遨游浏览器甚至新版还未上市的Edge浏览器都是基于Chrome浏览器的开源版本Chronium开发来的。所以360浏览器可以理解为一个定制的Chrome浏览器,最新360安全浏览器是基于Chromium 63版本的,落后正式的Chrome版本。 我们下载对应的2

    2024年02月06日
    浏览(41)
  • 浏览器:浏览器指纹

    一、引子 场景一、绑定用户与浏览器(设备),比如某一个网站的账号给到用户,用户只能在自己的电脑的某浏览器使用。 场景二、精准推送广告。 场景三、公司做营销活动,防止活动奖品被程序薅羊毛。 等等场景我们有什么技术方法实现或避免呢,本文介绍浏览器指纹来

    2024年02月06日
    浏览(48)
  • 浏览器原理 之 浏览器安全

    XSS 攻击,即跨站脚本攻击(Cross-Site Scripting),是一种常见的网络安全漏洞,它允许攻击者将恶意脚本注入到其他用户浏览的正常网页中。这些恶意脚本通常以 JavaScript 形式出现,并在用户的浏览器中执行。执行的结果可以是窃取用户的cookies、会话令牌,或者对用户的账户进

    2024年04月25日
    浏览(29)
  • 浏览器---浏览器/http相关面试题

    共同点:二者都是以key-value的键值对方式存储在浏览器端,大小大概在5M。 区别: (1)数据有效期不同:sessionStorage仅在当前浏览器窗口关闭之前有效;localStorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据; (2)作用域不同:sessionStorage数据只能在同一个

    2024年02月22日
    浏览(39)
  • 对比两款支持扩展的安卓浏览器:kiwi浏览器和狐猴浏览器

    如果你对支持扩展的手机浏览器感兴趣的话,应该早已对kiwi浏览器耳熟能详。而国内也有不少优秀的支持扩展的手机浏览器非常值得一试,最近我正在使用的狐猴浏览器就是一个不错的产品。 可能你正在寻找一个适合自己的手机浏览器,那这篇文章我就想对比一下kiwi浏览器

    2024年02月06日
    浏览(45)
  • Ubuntu卸载firefox浏览器安装google浏览器

            Ubuntu20.4系统,默认用的firefox浏览器,在2022.09.25日之后打开钉钉网页版,突然提示目前该浏览器不支持企业钉钉网页版了,请使用UC浏览器或google浏览器,之前firefox是支持打开钉钉网页版的,现在突然打不开有点不习惯,但是呢,如果两个浏览器同时安装使用的话

    2024年02月05日
    浏览(49)
  • Edge浏览器和Google浏览器占用内存情况

    最近发现适用edge浏览器看视频时,或者打开多个网页,电脑就会变得非常卡顿,打开任务管理器发现内存占用较多,网上也有人说edge浏览器确实占用内存较多。但是给出的解决方案是更新windows系统,这个方法显然不能接受,采用google浏览器即可减小内存占用。 下面进行一组

    2024年02月15日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包