js 文字转语音 api SpeechSynthesisUtterance

news2024/11/28 7:50:20

SpeechSynthesisUtterance基本介绍

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

官方文档地址(https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesisUtterance)

SpeechSynthesisUtterance基本属性

  • SpeechSynthesisUtterance.lang 获取并设置话语的语言
  • SpeechSynthesisUtterance.pitch 获取并设置话语的音调(值越大越尖锐,越低越低沉)
  • SpeechSynthesisUtterance.rate 获取并设置说话的速度(值越大语速越快,越小语速越慢)
  • SpeechSynthesisUtterance.text 获取并设置说话时的文本
  • SpeechSynthesisUtterance.voice 获取并设置说话的声音
  • SpeechSynthesisUtterance.volume 获取并设置说话的音量
  • SpeechSynthesisUtterance.text基本方法
  • speak() 将对应的实例添加到语音队列中
  • cancel() 删除队列中所有的语音.如果正在播放,则直接停止
  • pause() 暂停语音
  • resume() 恢复暂停的语音
  • getVoices 获取支持的语言数组. 注意:必须添加在voiceschanged事件中才能生效

使用demo

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <div>
        <label for="voices">语言:</label>
        <select name="voice" id="voices">
            <option value="">请选择</option>
            <!-- <option value="Google_SC">Google 普通话(中国大陆)</option>
            <option value="Kangkang_SC">Microsoft Kangkang - Chinese (Simplified, PRC)</option> -->
        </select>
    </div>
    <div>
        <label for="rate">语速:</label>
        <input id="rate" name="rate" type="range" min="0" max="3" value="1" step="0.1">
    </div>
    <div>

        <label for="pitch">音调:</label>
        <input id="pitch" name="pitch" type="range" min="0" max="2" step="0.1">
    </div>
    <div>
        <textarea id="text" name="text"></textarea>
    </div>
    <div>
        <button onclick="startAudio()">点击播放语音</button>
    </div>
    <div>
        <button onclick="stopAudio()">点击结束语音</button>
    </div>

    <div>
        <button onclick="pauseAudio()">点击暂停语音</button>
    </div>

    <div>
        <button onclick="resumeAudio()">恢复暂停的语音</button>
    </div>

</body>
<script>
    let utterance = new SpeechSynthesisUtterance() // 创建 语音对象

    // 获取元素对象
    let dom_voices = document.querySelector('#voices')
    const options = document.querySelectorAll('[type="range"], [name="text"]')

    options.forEach(e => e.addEventListener('change', handleChange))

    // voiceschanged 事件
    speechSynthesis.addEventListener('voiceschanged', () => {
        let voices = speechSynthesis.getVoices();
        // 根据系统语音创建选项
        voices.forEach(e => {
            const option = document.createElement('option')
            option.value = e.lang
            option.text = e.name
            dom_voices.appendChild(option)
        })
    })


    // 发生改变时触发
    function handleChange(e) {
        // console.log(this.name, this.value);
        utterance[this.name] = this.value
    }

    function startAudio() {
        utterance.lang = dom_voices.selectedOptions[0].value // 设置语言
        speechSynthesis.speak(utterance);
    }
    // 点击结束语音
    function stopAudio() {
        speechSynthesis.cancel(utterance)
    }

    function pauseAudio() {
        speechSynthesis.pause(utterance)
    }

    function resumeAudio() {
        speechSynthesis.resume(utterance);
    }
</script>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE初阶】第七节.多线程(基础篇)单例模式(案例一)

欢迎大家跟我一起来学习有关多线程的有关内容&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 前言 一、单例模式的概念 二、单例模式的简单实 2.1 饿汉模式 2.2 懒汉模式 总结 前言…

搭建Linux环境

学习Linux之前&#xff0c;我们首先需要在电脑上搭建Linux操作系统环境。 就好比说你买了一台电脑&#xff0c;需要使用Windows10操作系统&#xff0c;那么首先应该安装Windows操作系统&#xff08;刚买的电脑会引导你一步一步的安装&#xff09;。 一、Linux环境搭建的三种方式…

数据结构 第三章 栈和队列(队列)

感谢&#xff1a;点击收听 1 基本知识点 1、允许删除的一端称为队头(front) 2、允许插入的一端称为队尾(rear) 3、当队列中没有元素时称为空队列 4、顺序队列&#xff1a; 1 使用顺序表来实现队列 2 两个指针分别指向队列的前端和尾端 **3 如果队列的大小为MaxSize个,那么元…

什么是倒排表(倒排索引)

这种搜索引擎的实现常常用的就是倒排的技术 文档(Document)&#xff1a;一般搜索引擎的处理对象是互联网网页&#xff0c;而文档这个概念要更宽泛些&#xff0c;代表以文本形式存在的存储对象&#xff0c;相比网页来说&#xff0c;涵盖更多种形式&#xff0c;比如Word&#xff…

在Mac下如何创建文件

相比于windows中创建Mac是比较复杂的 第一步&#xff1a;打开启动台&#xff0c;依次打开「启动台-其他-自动操作」&#xff0c;可以按住「 Command 空格」直接搜索「自动操作」程序。 第二步&#xff1a;打开之后在「选取文稿类型」选项时&#xff0c;选择「快速操作」&#…

工地车辆未冲洗识别抓拍系统 yolov5网络

工地车辆未冲洗识别抓拍系统通过yolov5网络深度算法学习模型&#xff0c;自动对画面中每辆进出车辆的清洗实现自动识别判定。如果识别到车辆冲洗不合格&#xff0c;就会自动进行抓拍并将违规车辆信息回传。目标检测架构分为两种&#xff0c;一种是two-stage&#xff0c;一种是o…

「兔了个兔」看我如何抓取兔兔图片到本地(附源码)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

如何在IDEA中使用Maven构建Java项目?Maven的使用详细解读

文章目录1. 前言2. IDEA 中配置 Maven 环境3. Maven 的坐标问题4. IDEA 中创建 Maven 项目5. IDEA 中导入 Maven 项目6. 安装插件7. 依赖管理8. 依赖范围6. 总结Java编程基础教程系列1. 前言 前面在如何使用 Maven 构建 Java 项目一文中&#xff0c;我们一直在命令行中执行构建…

LabVIEW什么是实时操作系统(RTOS)

LabVIEW什么是实时操作系统(RTOS)一般而言&#xff0c;操作系统的任务是管理计算机的硬件资源和应用程序。实时操作系统会执行这些任务&#xff0c;但是运行时间精度和可靠度都极高。在实际应用中&#xff0c;有的系统失常代价高昂&#xff0c;甚至会引起安全事故。这时&#x…

成为提示专家,AI艺术杂志:AI Unleashed 第一期

shadow最近发现了一期AI艺术的杂志。名称叫 AI Unleashed&#xff0c;是一本深入探索 AI 和想象力的杂志。每期杂志都将填满精彩的 AI 艺术&#xff0c;激发你的好奇心&#xff0c; 让你更加了解最新的 AI 技术&#xff0c;以及它如何改变现有工作流和我们对艺术和技术的看法。…

LVS+keepalived(双主)+Nginx实现高可用负载均衡

#为什么采用双主架构&#xff1a; 单主架构只有一个keepalived对外提供服务&#xff0c;该主机长期处于繁忙状态&#xff0c;而另一台主机却很空闲&#xff0c;利用率低下 #双主架构的优点&#xff1a; 即将两个或以上VIP分别运行在不同的keepalived服务器&#xff0c;以实现…

C++11使用线程类thread的方法

C11 之前&#xff0c;C 语言没有对并发编程提供语言级别的支持。如果需要使用线程&#xff0c;windows系统需要使用CreateThread函数创建线程&#xff0c;而linux需要使用pthread库使用线程。C11 中增加了线程以及线程相关的类&#xff0c;很方便地支持了并发编程。由于可以跨平…

活动星投票十大商业品牌网络评选微信的投票方式线上免费投票

“十大商业品牌”网络评选投票_线上系统免费投票_功能齐全的视频投票_在线投票免费小程序用户在使用微信投票的时候&#xff0c;需要功能齐全&#xff0c;又快捷方便的投票小程序。而“活动星投票”这款软件使用非常的方便&#xff0c;用户可以随时使用手机微信小程序获得线上投…

CV学习笔记-VGG

VGG 1. 常见的卷积神经网络 VGG属于一种经典的卷积神经网络结构&#xff0c;其出现在AlexNet之后&#xff0c;由于AlexNet的突破证实了卷积神经网络的可行性&#xff0c;VGG的思路主要是将网络层数加深&#xff0c;从某种意义上说&#xff0c;网络层数的加深可以粗略地认为考虑…

编译原理学习笔记14——属性文法与语法制导翻译1

编译原理学习笔记14——属性文法与语法制导翻译114.1 属性文法14.2 属性计算14.1 属性文法 属性文法 综合属性 自下而上传递信息语法规则&#xff1a;根据右 部候选式中的符号 的属性计算左部被 定义符号的综合属性语法树&#xff1a;根据子结 点的属性和父结点 自身的属性…

【日常系列】LeetCode《30·动态规划总结》

动态规划总结 线性动态规划问题总结 打家劫舍总结 最大子数组和总结 dp[i] 依赖于前面一个或者两个状态 dp[i] 依赖于前面多个状态 注意&#xff1a;子序列可以不连续 dp[i] 带有一个或者多个维度 输入为两个数组或者两个字符串 lc 10【剑指 19】【top100】&#xff1a;正…

【LeetCode每日一题:2309. 兼具大小写的最好英文字母~~~模拟+Hash表+贪心】

题目描述 给你一个由英文字母组成的字符串 s &#xff0c;请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母&#xff0c;则返回一个空字符串。 最好 英文字母的大写和小写形式必须 都 在 s 中出现。 英文字母 b 比另一个英文字母 …

Java生成微信小程序二维码,5种实现方式,一个比一个简单

文章目录前言先看官网一、JDK自带的URLConnection方式二、Apache的HttpClient方式三、okhttp3方式四、Unirest方式五、RestTemplate方式其它细节getAccessToken构建参数mapbyte[]数组源码下载前言 先介绍一下项目场景&#xff0c;主要是通过微信小程序二维码裂变分享&#xff…

一时重构一时爽,一直重构一直爽

笔者&#xff08;后台技术汇&#xff09;恭祝各位大佬&#xff1a;2023年春节快乐&#xff0c;兔年祥瑞。距离上次更新&#xff0c;已经过去5个月有余了&#xff0c;有小伙伴疑惑笔者是不是删库跑路了..其实不是&#xff0c;这段时间是在参加一次比较大的项目重构&#xff08;目…

学习笔记 —— python代码耗时及内存占用测试方法

1、手写耗时测试 先看结果; 主要有三种方法&#xff0c;各自的时钟间隔如下&#xff1a; time.time() timeit time.time_ns() ( time is outputted in ns!). 可见方法2&#xff0c;即timeit 的时钟间隔最短。 注&#xff1a;最后一个是以ns为单位的&#xff0c;前两个是…