JS文字转语音技术实现

news2024/12/26 0:20:53

前言

最近在做排队叫号系统,涉及到文字转语音播报,因此总结了几种前端文字转语音发声的方法。

一、Web Speech API

h5新提供的一个原生语音识别技术的API,可以将文本转成语音并播放。
作为官方的api,实现的效果是比较符合理想的,支持的语言种类也很丰富, 就是兼容性上不太友好。下面兼容情况。
在这里插入图片描述

const synth = window.speechSynthesis; // 启用文本
const msg = new SpeechSynthesisUtterance(); // 表示一次发音请求。其中包含了将由语音服务朗读的内容,以及如何朗读它(例如:语种、音高、音量)。

 // 语音播报的函数
const handleSpeak=(text)=> {
     msg.text = text; // 文字内容: 测试内容
     msg.lang = "zh-CN"; // 使用的语言:中文
     msg.volume = 1; // 声音音量:1
     msg.rate = 1; // 语速:1
     msg.pitch = 1; // 音高:1
     synth.speak(msg); // 播放
 },
 // 语音停止
const  handleStop=(e)=>  {
     msg.text = e;
     msg.lang = "zh-CN";
     synth.cancel(msg); // 取消该次语音播放
 }

补充:其他相关回调函数

speech.lang 获取并设置话语的语言(en-US、zh-CN)
speech.pitch 获取并设置话语的音调 (值越大越尖锐,range:0-2, default:1, float)
speech.rate 获取并设置说话的速度 (值越大语速越快, range:0.1-10, default:1, float)
speech.text 获取并设置说话时的文本
speech.voice 获取并设置说话的声音
speech.volume 获取并设置说话的音量 (range: 0-1, default:1, float)
speech.onboundary
speech.onend 播放结束的回调
speech.onerror 播放出现错误的回调
speech.onmark 当读到标记文本时的回调
speech.onpause 播放暂停
speech.onresume 播放重启
speech.onstart 播放开始的回调

二、speak-tts

基于Web Speech API开发的组件,跟Web Speech API用法差不多,但是多了下载和引入的部分。同理存在兼容性问题。

  // 下载
  npm install speak-tts
  // 引入
  import Speech from 'speak-tts'
  const speech = ref(null);
  const speechInit = () => {
  speech.value = new Speech();
  speech.value?.setLanguage("zh-CN");
  speech.value?.init().then(() => {
    console.log("语音播报初始化完成");
  });
};
  const speak = () => {
  speech.value?.speak({ text: "测试发声" }).then(() => {
    console.log("播报完成");
  });
};

以上两种方法,在windows与ios环境下的浏览器均好用,但是在android系统下不可用。为了解决此问题衍可采用一下写法。

三、uniapp for TTS离线语音合成

MT-TTS
安卓原生离线语音合成引擎工具插件
MT-TTS-Speech
调用安卓系统已安装的TTS进行语音合成播放
uniapp官网插件下载地址

var TTSSpeech = uni.requireNativePlugin("MT-TTS-Speech");
			TTSSpeech.getInstallTTS(list => {
			console.log("====");
			list.forEach(v => console.log(`引擎名 ${v.label} 包名:${v.name}`));
			})
			
			TTSSpeech.init((status) => {
			if(status === 0){
			console.log('引擎初始化成功')
			TTSSpeech.speak({ text: '测试发声'})
			}
			}, 'com.iflytek.speechcloud')

四、由后端生成音频文件采用原生document进行播放

const queue = ref([]);
queue.value.push(newValue.callUri);
const interval = ref({});
//定时器
let soundID = 0;
const playServer = function () {
  console.log("开启播放线程");
  var ctrlAudio = document.getElementById("audio");
  interval.value = setInterval(function () {
    if (queue.value.length > 0) {
      console.log("待播放音频数:" + queue.value.length);
    }
    if (queue.value.length > 0 && ctrlAudio.paused) {
      ctrlAudio.volume = 1;
      ctrlAudio.setAttribute("src", queue.value[0]);
      ctrlAudio.play();
      queue.value.splice(0, 1);
    }
  }, 500);
};
onMounted(() => {
  soundID = setTimeout(playServer, 1000);
});
onBeforeUnmount(() => {
  clearTimeout(soundID);
  soundID = 0;
});

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

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

相关文章

Windows平台下用例图中包含(include)、扩展(extend)和泛化(generalization)介绍

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows平台下用例图中包含(include)、扩展(extend)和泛化(generalization)介绍。 用例图是解决用户需求的图,画好用例图一定要理清用例之间的关系。用例之间有三种关系&…

LabVIEWCompactRIO 开发指南33 测试和调试LabVIEW FPGA代码

LabVIEWCompactRIO 开发指南33 测试和调试LabVIEW FPGA代码 如前所述,应在仿真模式下开发LabVIEWFPGA VI,以快速迭代设计并避免冗长的编译时间。当需要测试和调试VI时,可以保持仿真模式或利用其他几个选项。应该根据功能验证与性能的要求以…

【LeetCode】 复制带随机指针的链表

Leetcode 138.复制带随机指针的链表 文章目录 题目描述解题思路运行代码 题目描述 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全…

C语言中这么骚的退出程序方式你知道几个?

前言 在本篇文章当中主要给大家介绍C语言当中一些不常用的特性,比如在main函数之前和之后设置我们想要执行的函数,以及各种花式退出程序的方式。 1、main函数是最先执行和最后执行的函数吗? 1)C语言构造和析构函数 通常我们在…

Python数据分析案例27——PCA-K均值-轮廓系数客户聚类

本案例适合应用统计,数据科学,电商专业 K均值对客户进行分类的案例都做烂了......但我认为这个案例还是有一定的价值的,使用了pca,还有轮廓系数寻找最优的聚类个数。 下面来看看 代码准备 导入包 import numpy as np import pa…

网上学影视后期靠谱吗 影视后期剪辑需要学什么

影视后期如果有人手把手当面教的话,当然是最好的。但很多人都没有这么好的条件,实际上,网上也有很多教程可以学习利用。不过,小伙伴们可能会有疑问,网上学影视后期靠谱吗,影视后期剪辑需要学什么&#xff1…

从创意造型到高品质曲面的卓越体验|CATIA ICEM Design Experience

目录 IDX为设计师提供了强大直观的建模工具 IDX为曲面工程师提供高品质数字模型处理能力 IDX与其他工具配合形成完整的数字化解决方案 建模是设计工作的重要环节,合适的数字模型能够在各个环节对整个设计流程产生正面的推动作用。 设计的不同阶段对模型有各自的…

Azkaban从入门到精通以及案例实操系列

1、Azkaban概论 1.1、Azkaban简介 Azkaban 是一个开源的基于 Web 的工作流调度系统,由 LinkedIn 公司开发并维护。它可以帮助用户在大规模数据处理中来管理和调度作业,提供了简单易用、高效可靠的工作流设计和调度功能。 Azkaban 的主要特点包括&…

亿发ERP系统,全链条采购协同管理数智化平台,中小企业采购业务全流程管理

在数字时代,中小型企业在采购管理方面面临多项挑战。 集采管理难:由于资源和专业知识有限,中小企业通常难以建立集中采购职能,无法有效简化整个组织的采购活动。这一挑战包括定义采购政策、标准化程序和实施高效的采购系统。 信…

『赠书活动 | 第六期』《“Java四大名著“,你集齐了吗?》

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第六期』 本期书籍:《“Java四大名著”,你集齐了吗?》 赠书规则:评论区:点赞&…

供水管网监测系统,供水管网压力监测系统

水是城市赖以生存的血脉,直接关系到居民、企业和公共设施的正常生活和生产。然而,城市供水管网的高效运行面临着一系列挑战,如管道老化、泄漏和不均衡的供水压力等。 目前城市供水管网泄漏检测排查采用人工巡检、人工听漏的方式,巡…

Flutter3.10版本发布,编程语言的重大更新

Flutter是一款强大的跨端开发框架,可以帮助开发者构建高性能、美观、灵活的应用程序,从而实现跨平台开发和部署。小程序容器技术与跨端框架结合使用,为开发者提供一站式的小程序开发和发布服务,帮助他们更加轻松和高效地构建和部署…

CPU和GPU前端的应用

1、CPU(英文Central Processing Unit 中央处理器) CPU(中央处理器)是一种通用的处理器,其主要任务是执行计算机程序中的指令和序列。它能够处理复杂的逻辑判断、分支、跳转、内存访问等操作,因此在执行大多…

虚幻引擎4利用粒子系统实现物体轨迹描绘2- 消除轨迹

目录 前言粒子频繁产生对系统运行的影响轨迹的清除小结 前言 之前已经实现了UE4中跟随物体利用粒子系统产生轨迹的效果,文章链接如下: 虚幻引擎4利用粒子系统实现物体轨迹描绘_ADi_hhh的博客-CSDN博客 但是上篇文章还留下了两个问题 轨迹如何清除&am…

Spring探索——既生@Resource,何生@Autowired?

提到Spring依赖注入,大家最先想到应该是Resource和Autowired,很多文章只是讲解了功能上的区别,对于Spring为什么要支持两个这么类似的注解却未提到,属于知其然而不知其所以然。不知大家在使用这两个注解的时候有没有想过&#xff…

mysql8.0主从复制搭建

mysql8.0主从复制搭建 1.安装两个相同版本8.0的mysql数据库 主从IP端口主库192.168.139.1283306从库192.168.139.1303306 2.主从复制配置 2.1 修改mysql配置文件my.conf 主机mysql配置完整 [mysql] # 设置mysql客户端默认字符集 default-character-setutf8mb4 [client] # …

二十三种设计模式第十篇--外观模式

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门(政务窗口 )能解决一切手续问题就好了。 软件设计也是这样,当一个系统的功能越来越强&…

2023年小型水库安全监测能力提升解决方案

一、方案背景 2023年小型水库安全监测能力提升试点项目建设将按照“统一规划、统一标准、统一实施、统一管理、统一支撑”的工作要求,对全区小型水库雨水情测报和监测设施建设项目按高水平、高标准、高质量要求开展安全监测能力提升建设,同步开展水工程安…

ZeLinAI是什么?国产ChatGPT快速搭建自己的AI应用

ChatGPT使用门槛高,需要科学上网短信接码等,不如直接选择国产ZelinAI,使用超简单轻轻松松从0到1零代码创建自己的AI应用。目前模型仅支持GPT-3.5-turbo,后续应该会接入文心一言、GPT-4、GPT-4.5和Bard,新手站长分享国产…

DL.to 最新研究(论文)推荐——分割、CVPR、扩散模型、感受野注意力模块

目录 一、CVPR 1.CrowdCLIP:基于视觉-语言模型的无监督人群计数 CrowdCLIP: Unsupervised Crowd Counting via Vision-Language Model 2.Beyond mAP:更好地评估实例分割 Beyond mAP: Re-evaluating and Improving Performance in Instance Segmentation with Se…