html5语音合成speechsynthesisApi

news/2024/7/23 10:27:53 标签: html5, 前端, 文本语音播报
一、关于HTML5语音Web Speech API

HTML5中和Web Speech相关的API实际上有两类:

一类是“语音识别(Speech Recognition)”,另一个就是“语音合成(Speech Synthesis)”,实际上指的分别是“语音转文字”,和“文字变语音”。

而本文要介绍的就是这里的“语音合成-文字变语音”。为什么称为“合成”呢?比方说你Siri发音“你好,财富!” 实际上是把“你”、“好”、“财”、“富”这4个字的读音给合并在一起,因此,称为“语音合成”。

“语音识别(Speech Recognition)”目前的就Chrome浏览器和Opera浏览器默认支持

“语音合成(Speech Synthesis)”的兼容性要好上太多了Chrome,FF,Edge,Safari等等都是支持

使用方式

  • 创建SpeechRecognition的新实例。由于到目前为止,浏览器还没有广泛支持,所以需要webKit的前缀

var newRecognition = webkitSpeechRecognition();

设置是持续听还是听到声音之后就关闭接收。通过设置continuous属性值实现。一般聊天沟通使用false属性值,如果是写文章之类的则可以设置为true,如下:

newRecognition.continuous = true;
  • 控制语音识别的开启和停止,可以使用start()和stop()方法:

 // 开启 newRecognition.start();

// 停止 newRecognition.stop();

  • 对识别到的结果进行处理,可以使用一些事件方法,比方说onresult:
newRecognition.onresult = function(event) { 
    console.log(event);
}

除了result事件外,还有其他一些事件,例如,soundstart、speechstart、error等信息。

二、关于语音合成Speech Synthesis API 

先从最简单的例子说起,如果想让浏览器读出“你好,财富!”的声音,可以下面的JS代码:

var utterStr = new window.SpeechSynthesisUtterance(‘你好,财富!‘); window.speechSynthesis.speak(utterStr); 

 大家可以在自己浏览器的控制台里面运行上面两行代码,会读出声音来的,如下:

SpeechSynthesisUtterancespeechSynthesis,就是语音合成Speech Synthesis API的核心。

首先是SpeechSynthesisUtterance对象,主要用来构建语音合成实例,例如上面代码中的实例对象utterStr。我们可以直接在构建的时候就把要读的文字内容写进去:

var utterStr = new window.SpeechSynthesisUtterance(‘你好,财富!‘); 

也可以使用实例对象的一些属性,包括:

  • text – 要合成的文字内容,字符串。
  • lang – 使用的语言,字符串, 例如:"zh-cn"
  • voiceURI – 指定希望使用的声音和服务,字符串。
  • volume – 声音的音量,区间范围是01,默认是1
  • rate – 语速,数值,默认值是1,范围是0.110,表示语速的倍数,例如2表示正常语速的两倍。
  • pitch – 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1

因此上面的代码也可以写成

var utterStr = new window.SpeechSynthesisUtterance();
utterStr.text = '你好,财富!';

不仅如此,该实例对象还暴露了一些方法:

  • onstart – 语音合成开始时候的回调。
  • onpause – 语音合成暂停时候的回调。
  • onresume – 语音合成重新开始时候的回调。
  • onend – 语音合成结束时候的回调。

接下来是speechSynthesis对象,主要作用是触发行为,例如读,停,还原等:

  • speak() – 只能接收SpeechSynthesisUtterance作为唯一的参数,作用是读合成的话语。

  • stop() – 立即终止合成过程。

  • pause() – 暂停合成过程。

  • resume() – 重新开始合成过程。

  • getVoices – 此方法不接受任何参数,用来返回浏览器支持的语音包列表,是个数组,例如,在我的电脑下,Firefox浏览器返回的语言包是两个:

 而在chrome浏览器下,会出现更多语言包:

另外,getVoices的获取是个异步的过程,因此,你可以直接在控制台输入,speechSynthesis.getVoices()返回的是一个空数组,没关系,多试几次,或者搞个定时器之类的

三、语音合成Speech Synthesis API有什么用

对于盲人或弱视用户,往往会借助一些辅助设备或者软件访问我们的网页,其原理是通过触摸或定位某些元素发出声音,来让用户感知内容。
有了语音合成Speech Synthesis API,对于这类用户,以及开发人员自己,都会带来一定的便利性的。

 

 


http://www.niftyadmin.cn/n/5310730.html

相关文章

【Java】设计模式之生产者/消费者

设计模式之生产者/消费者 这个设计模式使用一个消息队列对生产者和消费者进行解耦。它与保护性暂停最大的区别就是它并不需要产生结果者与消费结果者一一对应,而是可以多对多。而且这个设计模式它传递消息会存在一定的延迟,而保护性暂停传递信息是十分及…

什么叫梯度消失?

梯度消失(Gradient Vanishing)是神经网络训练中常见的一个问题,特别是在深层神经网络中。它指的是在网络的反向传播过程中,用于更新网络权重的梯度变得非常小,以至于几乎不对权重产生任何显著的更新。这种现象通常发生…

C#-基本概念

应用程序启动 具有入口点 (entry point) 的程序集称为应用程序 (application)。应用程序运行时,将创建新的应用程序域 (application domain)。同一台计算机上可能会同时运行着同一个应用程序的若干个实例,此时,每一个实例都拥有各自的应用程序域。 应用程序域用作应用程序状…

如何翻译整本书并制作为双语对照?

随着人工智能技术的快速发展,机器翻译已经不再是遥不可及的梦想。众多大互联网公司如谷歌、百度等都相继推出了免费的翻译工具,使得跨语言沟通变得触手可及。今年,数百家公司更是开发出大型AI语言模型,其中以ChatGPT 4引人瞩目&am…

数字孪生在区块链的应用

数字孪生与区块链的结合可以为一些应用场景提供额外的安全性、透明度和可追溯性。以下是数字孪生在区块链上的一些潜在应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.供应链管理: …

算法通关村番外篇-优先队列

大家好我是苏麟 , 今天聊聊优先队列 . 优先队列 我们了解优先队列之前先说说队列 . 队列的特点是什么? 队列的特点是先进先出(FIFO)。 入队列,将新元素置于队尾: 出队列,队头元素最先被移出&#xff1a…

软件安装文档 | Docker (简洁)

如果之前安装过旧版本的Docker,可以使用下面命令卸载: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine …

Raect中自定义hook

一、自定义Hook 自定义Hook:将一些常用的、跨越多个组件的Hook功能,抽离出去形成一个函数,该函数就是自定义Hook,自定义Hook,由于其内部需要使用Hook功能,所以它本身也需要按照Hook的规则实现:…